From 18f07e36f1bfedc658adc70089c6893ca00eb780 Mon Sep 17 00:00:00 2001 From: melvn <104540526@student.swin.edu.au> Date: Sun, 2 Mar 2025 11:06:56 +1100 Subject: [PATCH 1/6] inital deepseek reasoner support. --- README.md | 1 + src/model.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index bc3bd0bb..5e3ae3a2 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ If you wish to run your own dataset, please switch to the "release" branch: ```sh git checkout release ``` +This fork modifys the original authors work to include the use of reasoning model for the critic stage in order to improve the level of accurary and precision in its detections. In addition claude support was added. New benchmarks on the original datasets are found at the bottom of this readme. ## Getting Start diff --git a/src/model.py b/src/model.py index bd94fa43..aac064a3 100644 --- a/src/model.py +++ b/src/model.py @@ -1,13 +1,17 @@ import time -import openai import os +from openai import OpenAI from utils import dotdict - -OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY') #"Enter your openai API key" +OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY') +DEEPSEEK_API_KEY = os.environ.get('DEEPSEEK_API_KEY') completion_tokens = 0 prompt_tokens = 0 +# Initialize clients +openai_client = OpenAI(api_key=OPENAI_API_KEY) +deepseek_client = OpenAI(api_key=DEEPSEEK_API_KEY, base_url="https://api.deepseek.com") + def gpt(prompt, model, temperature=0.7, max_tokens=4000, n=1, stop=None) -> list: messages = [{"role": "user", "content": prompt}] if model == "gpt-4": @@ -16,13 +20,19 @@ def gpt(prompt, model, temperature=0.7, max_tokens=4000, n=1, stop=None) -> list return chatgpt(messages, model=model, temperature=temperature, max_tokens=max_tokens, n=n, stop=stop) -def chatgpt(messages, model, temperature, max_tokens, n, stop) -> list: +def chatgpt(messages, model, temperature=0.0, max_tokens=4000, n=1, stop=None) -> list: global completion_tokens, prompt_tokens outputs = [] + + # Use Deepseek API for deepseek models + if model.startswith("deepseek"): + return deepseek_chat(messages, model, temperature, max_tokens, n, stop) + + # Original OpenAI implementation while n > 0: cnt = min(n, 20) n -= cnt - res = openai.chat.completions.create(model=model, messages=messages, temperature=temperature, max_tokens=max_tokens, + res = openai_client.chat.completions.create(model=model, messages=messages, temperature=temperature, max_tokens=max_tokens, n=cnt, stop=stop) outputs.extend([choice.message.content for choice in res.choices]) # log completion tokens @@ -31,6 +41,40 @@ def chatgpt(messages, model, temperature, max_tokens, n, stop) -> list: return outputs +def deepseek_chat(messages, model, max_tokens, n, stop) -> list: + """Handle chat completions using Deepseek API""" + global completion_tokens, prompt_tokens + outputs = [] + + # Map deepseek model names to actual API model names + model_map = { + "deepseek-r1": "deepseek-reasoner", # currently points to deepseek r1 + } + + api_model = model_map.get(model, model) + + while n > 0: + batch_size = min(n, 20) # Process in batches like the original + n -= batch_size + + # Create multiple requests if n > 1 + for _ in range(batch_size): + res = deepseek_client.chat.completions.create( + model=api_model, + messages=messages, + max_tokens=max_tokens, + stop=stop + ) + + outputs.append(res.choices[0].message.content) + + # Track token usage + completion_tokens += res.usage.completion_tokens + prompt_tokens += res.usage.prompt_tokens + + return outputs + + def gpt_usage(backend="gpt-4"): global completion_tokens, prompt_tokens if backend == "gpt-4": @@ -39,4 +83,7 @@ def gpt_usage(backend="gpt-4"): cost = completion_tokens / 1000 * 0.03 + prompt_tokens / 1000 * 0.01 elif backend == "gpt-3.5-turbo": cost = completion_tokens / 1000 * 0.002 + prompt_tokens / 1000 * 0.0015 - return {"completion_tokens": completion_tokens, "prompt_tokens": prompt_tokens, "cost": cost} + elif backend.startswith("deepseek"): + # Add Deepseek pricing - adjust these values based on actual pricing + cost = completion_tokens / 1000 * 0.002 + prompt_tokens / 1000 * 0.001 + return {"completion_tokens": completion_tokens, "prompt_tokens": prompt_tokens, "cost": cost} \ No newline at end of file From 4e5cacefe1d6270111d2e67e1c5d1bc18f4d4d2d Mon Sep 17 00:00:00 2001 From: melvn <104540526@student.swin.edu.au> Date: Sun, 2 Mar 2025 11:36:10 +1100 Subject: [PATCH 2/6] changed token cost calculation function and updated readme.md slightly. not tested yet. --- README.md | 22 ++++++++++++++++++++++ src/model.py | 24 +++++++++++++++++++++--- src/run_auditor.py | 2 +- src/run_auditor_user_defined.py | 2 +- src/run_critic.py | 2 +- src/run_critic_user_defined.py | 2 +- 6 files changed, 47 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5e3ae3a2..545b8c5a 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,28 @@ This fork modifys the original authors work to include the use of reasoning mode ## Getting Start +## Using Deepseek Reasoner + +This fork adds support for Deepseek Reasoner, a specialized model for reasoning tasks that can improve the accuracy of vulnerability detection. + +To use Deepseek Reasoner: + +1. Set your Deepseek API key in the environment: + ```sh + export DEEPSEEK_API_KEY="your-api-key-here" + ``` + +2. Run the auditor with Deepseek Reasoner: + ```sh + python src/run_auditor.py --backend=deepseek-r1 --temperature=0.7 --topk=3 --num_auditor=1 + ``` + Note: The temperature parameter is passed for compatibility but has no effect with Deepseek Reasoner. + +3. Run the critic with Deepseek Reasoner: + ```sh + python src/run_critic.py --backend=deepseek-r1 --temperature=0 --auditor_dir="auditor_deepseek-r1_0.7_top3_1" --num_critic=1 --shot=few + ``` + ### Step 0: Set up your GPT-4 API Get GPT-4 API from https://platform.openai.com/account/api-keys diff --git a/src/model.py b/src/model.py index aac064a3..4c8905f5 100644 --- a/src/model.py +++ b/src/model.py @@ -41,7 +41,7 @@ def chatgpt(messages, model, temperature=0.0, max_tokens=4000, n=1, stop=None) - return outputs -def deepseek_chat(messages, model, max_tokens, n, stop) -> list: +def deepseek_chat(messages, model, temperature, max_tokens, n, stop) -> list: """Handle chat completions using Deepseek API""" global completion_tokens, prompt_tokens outputs = [] @@ -59,6 +59,7 @@ def deepseek_chat(messages, model, max_tokens, n, stop) -> list: # Create multiple requests if n > 1 for _ in range(batch_size): + # Note: temperature is passed but has no effect for deepseek-reasoner res = deepseek_client.chat.completions.create( model=api_model, messages=messages, @@ -66,6 +67,12 @@ def deepseek_chat(messages, model, max_tokens, n, stop) -> list: stop=stop ) + # For deepseek-reasoner, we might want to capture the reasoning content + if model.startswith("deepseek-r") and hasattr(res.choices[0].message, 'reasoning_content'): + # Store reasoning content somewhere if needed + reasoning = res.choices[0].message.reasoning_content + # Could log or store this for debugging/analysis + outputs.append(res.choices[0].message.content) # Track token usage @@ -83,7 +90,18 @@ def gpt_usage(backend="gpt-4"): cost = completion_tokens / 1000 * 0.03 + prompt_tokens / 1000 * 0.01 elif backend == "gpt-3.5-turbo": cost = completion_tokens / 1000 * 0.002 + prompt_tokens / 1000 * 0.0015 + elif backend == "deepseek-r1": + # Deepseek Reasoner pricing (standard rate), not off peak discount rates. + # Input: $0.55 per 1M tokens + # Output: $2.19 per 1M tokens + input_cost = prompt_tokens / 1000000 * 0.55 + output_cost = completion_tokens / 1000000 * 2.19 + cost = input_cost + output_cost elif backend.startswith("deepseek"): - # Add Deepseek pricing - adjust these values based on actual pricing - cost = completion_tokens / 1000 * 0.002 + prompt_tokens / 1000 * 0.001 + # Generic pricing for other Deepseek models (standard rate) + # Input: $0.27 per 1M tokens + # Output: $1.10 per 1M tokens + input_cost = prompt_tokens / 1000000 * 0.27 + output_cost = completion_tokens / 1000000 * 1.10 + cost = input_cost + output_cost return {"completion_tokens": completion_tokens, "prompt_tokens": prompt_tokens, "cost": cost} \ No newline at end of file diff --git a/src/run_auditor.py b/src/run_auditor.py index 5794c346..daf8fc04 100644 --- a/src/run_auditor.py +++ b/src/run_auditor.py @@ -96,7 +96,7 @@ def run(args): def parse_args(): args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview'], default='gpt-4-turbo-preview') + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') args.add_argument('--temperature', type=float, default=0.7) args.add_argument('--dataset', type=str, default="CVE") args.add_argument('--topk', type=int, default=5) # the topk per each auditor diff --git a/src/run_auditor_user_defined.py b/src/run_auditor_user_defined.py index edec358c..f39b6872 100644 --- a/src/run_auditor_user_defined.py +++ b/src/run_auditor_user_defined.py @@ -92,7 +92,7 @@ def run(args): def parse_args(): args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview'], default='gpt-4-turbo-preview') + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') args.add_argument('--temperature', type=float, default=0.7) args.add_argument('--data_dir', type=str, default="data/CVE_clean") args.add_argument('--topk', type=int, default=5) # the topk per each auditor diff --git a/src/run_critic.py b/src/run_critic.py index 3d8ec056..4cec09ad 100644 --- a/src/run_critic.py +++ b/src/run_critic.py @@ -84,7 +84,7 @@ def run(args): def parse_args(): args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview'], default='gpt-4-turbo-preview') + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') args.add_argument('--temperature', type=float, default=0) args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory diff --git a/src/run_critic_user_defined.py b/src/run_critic_user_defined.py index c10ecb74..40f463ce 100644 --- a/src/run_critic_user_defined.py +++ b/src/run_critic_user_defined.py @@ -82,7 +82,7 @@ def run(args): def parse_args(): args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview'], default='gpt-4-turbo-preview') + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') args.add_argument('--temperature', type=float, default=0) args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory From 88f0d872b8fb344c5a9f825c3f74587ef191d2eb Mon Sep 17 00:00:00 2001 From: melvn <104540526@student.swin.edu.au> Date: Sat, 8 Mar 2025 23:15:16 +1100 Subject: [PATCH 3/6] working implentation of deepseek r1 model for gptlens architecture. more instructions in the readme.md --- .devcontainer/devcontainer.json | 33 - .gitignore | 3 +- .gitmodules | 3 - .streamlit/config.toml | 3 - GPTLens | 1 - GPTLens.pdf | Bin 1066178 -> 0 bytes README.md | 133 -- data/CVE/2018-10706.sol | 404 ----- data/CVE/2018-10944.sol | 1344 ----------------- data/CVE/2018-11239.sol | 102 -- data/CVE_clean/2018-10706.sol | 252 ---- data/CVE_clean/2018-10944.sol | 1041 ------------- data/CVE_clean/2018-11239.sol | 55 - data/CVE_label/CVE2description.json | 564 ------- data/CVE_label/CVE2label.json | 21 - data_full/CVE/2018-10299.sol | 299 ---- data_full/CVE/2018-10376.sol | 294 ---- data_full/CVE/2018-10468.sol | 146 -- data_full/CVE/2018-10666.sol | 253 ---- data_full/CVE/2018-10705.sol | 157 -- data_full/CVE/2018-10706.sol | 404 ----- data_full/CVE/2018-10944.sol | 1344 ----------------- data_full/CVE/2018-11239.sol | 102 -- data_full/CVE/2018-11335.sol | 280 ---- data_full/CVE/2018-11411.sol | 126 -- data_full/CVE/2018-11429.sol | 165 -- data_full/CVE/2018-11446.sol | 432 ------ data_full/CVE/2018-11561.sol | 146 -- data_full/CVE/2018-11687.sol | 99 -- data_full/CVE/2018-12025-1.sol | 165 -- data_full/CVE/2018-12025-2.sol | 165 -- data_full/CVE/2018-12025-3.sol | 150 -- data_full/CVE/2018-12062.sol | 175 --- data_full/CVE/2018-12063.sol | 184 --- data_full/CVE/2018-12067.sol | 175 --- data_full/CVE/2018-12068.sol | 175 --- data_full/CVE/2018-12070.sol | 269 ---- data_full/CVE/2018-12078.sol | 145 -- data_full/CVE/2018-12079.sol | 175 --- data_full/CVE/2018-12080.sol | 184 --- data_full/CVE/2018-12081.sol | 175 --- data_full/CVE/2018-12082.sol | 168 --- data_full/CVE/2018-12083.sol | 117 -- data_full/CVE/2018-12084.sol | 153 -- data_full/CVE/2018-12230.sol | 161 -- data_full/CVE/2018-12454.sol | 148 -- data_full/CVE/2018-12511.sol | 175 --- data_full/CVE/2018-12702.sol | 142 -- data_full/CVE/2018-12703.sol | 142 -- data_full/CVE/2018-12885.sol | 1149 -------------- data_full/CVE/2018-12959.sol | 127 -- data_full/CVE/2018-12975.sol | 1234 --------------- data_full/CVE/2018-13041.sol | 194 --- data_full/CVE/2018-13068.sol | 166 -- data_full/CVE/2018-13069.sol | 248 --- data_full/CVE/2018-13070.sol | 169 --- data_full/CVE/2018-13071.sol | 231 --- data_full/CVE/2018-13072.sol | 168 --- data_full/CVE/2018-13073.sol | 175 --- data_full/CVE/2018-13074.sol | 227 --- data_full/CVE/2018-13075.sol | 275 ---- data_full/CVE/2018-13076.sol | 168 --- data_full/CVE/2018-13077.sol | 199 --- data_full/CVE/2018-13078.sol | 145 -- data_full/CVE/2018-13079.sol | 161 -- data_full/CVE/2018-13080.sol | 145 -- data_full/CVE/2018-13081.sol | 171 --- data_full/CVE/2018-13082.sol | 255 ---- data_full/CVE/2018-13083.sol | 219 --- data_full/CVE/2018-13084.sol | 155 -- data_full/CVE/2018-13085.sol | 295 ---- data_full/CVE/2018-13086.sol | 175 --- data_full/CVE/2018-13087.sol | 233 --- data_full/CVE/2018-13088.sol | 248 --- data_full/CVE/2018-13089.sol | 254 ---- data_full/CVE/2018-13090.sol | 248 --- data_full/CVE/2018-13091.sol | 206 --- data_full/CVE/2018-13092.sol | 178 --- data_full/CVE/2018-13113.sol | 142 -- data_full/CVE/2018-13126.sol | 301 ---- data_full/CVE/2018-13127.sol | 238 --- data_full/CVE/2018-13128.sol | 193 --- data_full/CVE/2018-13129.sol | 276 ---- data_full/CVE/2018-13131.sol | 312 ---- data_full/CVE/2018-13132.sol | 403 ----- data_full/CVE/2018-13144.sol | 103 -- data_full/CVE/2018-13189.sol | 335 ---- data_full/CVE/2018-13202.sol | 183 --- data_full/CVE/2018-13208.sol | 171 --- data_full/CVE/2018-13220.sol | 171 --- data_full/CVE/2018-13221.sol | 186 --- data_full/CVE/2018-13225.sol | 181 --- data_full/CVE/2018-13227.sol | 172 --- data_full/CVE/2018-13228.sol | 171 --- data_full/CVE/2018-13230.sol | 171 --- data_full/CVE/2018-13325.sol | 176 --- data_full/CVE/2018-13326.sol | 135 -- data_full/CVE/2018-13327.sol | 92 -- data_full/CVE/2018-13493.sol | 344 ----- data_full/CVE/2018-13533.sol | 191 --- data_full/CVE/2018-13625.sol | 271 ---- data_full/CVE/2018-13670.sol | 103 -- data_full/CVE/2018-13695.sol | 301 ---- data_full/CVE/2018-13698.sol | 131 -- data_full/CVE/2018-13703.sol | 262 ---- data_full/CVE/2018-13722.sol | 410 ----- data_full/CVE/2018-13777.sol | 166 -- data_full/CVE/2018-13778.sol | 224 --- data_full/CVE/2018-13779.sol | 180 --- data_full/CVE/2018-13782.sol | 171 --- data_full/CVE/2018-13783.sol | 271 ---- data_full/CVE/2018-13836.sol | 119 -- data_full/CVE/2018-14001.sol | 152 -- data_full/CVE/2018-14002.sol | 83 - data_full/CVE/2018-14003.sol | 200 --- data_full/CVE/2018-14004.sol | 299 ---- data_full/CVE/2018-14005.sol | 255 ---- data_full/CVE/2018-14006.sol | 249 --- data_full/CVE/2018-14063.sol | 178 --- data_full/CVE/2018-14084.sol | 273 ---- data_full/CVE/2018-14085.sol | 174 --- data_full/CVE/2018-14086.sol | 107 -- data_full/CVE/2018-14087.sol | 174 --- data_full/CVE/2018-14089.sol | 208 --- data_full/CVE/2018-14576.sol | 194 --- data_full/CVE/2018-14715.sol | 740 --------- data_full/CVE/2018-15552.sol | 120 -- data_full/CVE/2018-17050.sol | 141 -- data_full/CVE/2018-17071.sol | 55 - data_full/CVE/2018-17111.sol | 128 -- data_full/CVE/2018-17877.sol | 403 ----- data_full/CVE/2018-17882.sol | 117 -- data_full/CVE/2018-17968.sol | 253 ---- data_full/CVE/2018-17987.sol | 179 --- data_full/CVE/2018-18425.sol | 264 ---- data_full/CVE/2018-18665.sol | 79 - data_full/CVE/2018-19830.sol | 203 --- data_full/CVE/2018-19831.sol | 305 ---- data_full/CVE/2018-19832.sol | 232 --- data_full/CVE/2018-19833.sol | 73 - data_full/CVE/2018-19834.sol | 265 ---- data_full/CVE/2019-15078.sol | 243 --- data_full/CVE/2019-15079.sol | 127 -- data_full/CVE/2019-15080.sol | 227 --- data_full/CVE/2020-17752.sol | 421 ------ data_full/CVE/2020-17753.sol | 499 ------ data_full/CVE/2020-35962.sol | 929 ------------ data_full/CVE/2021-3004.sol | 644 -------- data_full/CVE/2021-3006.sol | 929 ------------ data_full/CVE/2021-33403.sol | 365 ----- data_full/CVE/2021-34270.sol | 197 --- data_full/CVE/2021-34272.sol | 255 ---- data_full/CVE/2021-34273.sol | 129 -- data_full/CVE_clean/2018-10299.sol | 142 -- data_full/CVE_clean/2018-10376.sol | 169 --- data_full/CVE_clean/2018-10468.sol | 99 -- data_full/CVE_clean/2018-10666.sol | 163 -- data_full/CVE_clean/2018-10705.sol | 98 -- data_full/CVE_clean/2018-10706.sol | 252 ---- data_full/CVE_clean/2018-10944.sol | 1041 ------------- data_full/CVE_clean/2018-11239.sol | 55 - data_full/CVE_clean/2018-11335.sol | 152 -- data_full/CVE_clean/2018-11411.sol | 89 -- data_full/CVE_clean/2018-11429.sol | 122 -- data_full/CVE_clean/2018-11446.sol | 242 --- data_full/CVE_clean/2018-11561.sol | 74 - data_full/CVE_clean/2018-11687.sol | 79 - data_full/CVE_clean/2018-12025.sol | 90 -- data_full/CVE_clean/2018-12062.sol | 132 -- data_full/CVE_clean/2018-12063.sol | 123 -- data_full/CVE_clean/2018-12067.sol | 132 -- data_full/CVE_clean/2018-12068.sol | 132 -- data_full/CVE_clean/2018-12070.sol | 144 -- data_full/CVE_clean/2018-12078.sol | 107 -- data_full/CVE_clean/2018-12079.sol | 132 -- data_full/CVE_clean/2018-12080.sol | 123 -- data_full/CVE_clean/2018-12081.sol | 132 -- data_full/CVE_clean/2018-12082.sol | 125 -- data_full/CVE_clean/2018-12083.sol | 76 - data_full/CVE_clean/2018-12084.sol | 108 -- data_full/CVE_clean/2018-12230.sol | 90 -- data_full/CVE_clean/2018-12454.sol | 123 -- data_full/CVE_clean/2018-12511.sol | 132 -- data_full/CVE_clean/2018-12702.sol | 73 - data_full/CVE_clean/2018-12703.sol | 73 - data_full/CVE_clean/2018-12885.sol | 617 -------- data_full/CVE_clean/2018-12959.sol | 67 - data_full/CVE_clean/2018-12975.sol | 645 -------- data_full/CVE_clean/2018-13041.sol | 115 -- data_full/CVE_clean/2018-13068.sol | 91 -- data_full/CVE_clean/2018-13069.sol | 128 -- data_full/CVE_clean/2018-13070.sol | 122 -- data_full/CVE_clean/2018-13071.sol | 171 --- data_full/CVE_clean/2018-13072.sol | 125 -- data_full/CVE_clean/2018-13073.sol | 131 -- data_full/CVE_clean/2018-13074.sol | 112 -- data_full/CVE_clean/2018-13075.sol | 142 -- data_full/CVE_clean/2018-13076.sol | 125 -- data_full/CVE_clean/2018-13077.sol | 128 -- data_full/CVE_clean/2018-13078.sol | 107 -- data_full/CVE_clean/2018-13079.sol | 128 -- data_full/CVE_clean/2018-13080.sol | 107 -- data_full/CVE_clean/2018-13081.sol | 127 -- data_full/CVE_clean/2018-13082.sol | 133 -- data_full/CVE_clean/2018-13083.sol | 113 -- data_full/CVE_clean/2018-13084.sol | 123 -- data_full/CVE_clean/2018-13085.sol | 140 -- data_full/CVE_clean/2018-13086.sol | 130 -- data_full/CVE_clean/2018-13087.sol | 124 -- data_full/CVE_clean/2018-13088.sol | 128 -- data_full/CVE_clean/2018-13089.sol | 126 -- data_full/CVE_clean/2018-13090.sol | 128 -- data_full/CVE_clean/2018-13091.sol | 111 -- data_full/CVE_clean/2018-13092.sol | 89 -- data_full/CVE_clean/2018-13113.sol | 77 - data_full/CVE_clean/2018-13126.sol | 151 -- data_full/CVE_clean/2018-13127.sol | 126 -- data_full/CVE_clean/2018-13128.sol | 138 -- data_full/CVE_clean/2018-13129.sol | 152 -- data_full/CVE_clean/2018-13131.sol | 178 --- data_full/CVE_clean/2018-13132.sol | 249 --- data_full/CVE_clean/2018-13144.sol | 65 - data_full/CVE_clean/2018-13189.sol | 171 --- data_full/CVE_clean/2018-13202.sol | 140 -- data_full/CVE_clean/2018-13208.sol | 131 -- data_full/CVE_clean/2018-13220.sol | 132 -- data_full/CVE_clean/2018-13221.sol | 155 -- data_full/CVE_clean/2018-13225.sol | 137 -- data_full/CVE_clean/2018-13227.sol | 131 -- data_full/CVE_clean/2018-13228.sol | 131 -- data_full/CVE_clean/2018-13230.sol | 131 -- data_full/CVE_clean/2018-13325.sol | 129 -- data_full/CVE_clean/2018-13326.sol | 77 - data_full/CVE_clean/2018-13327.sol | 71 - data_full/CVE_clean/2018-13493.sol | 191 --- data_full/CVE_clean/2018-13533.sol | 160 -- data_full/CVE_clean/2018-13625.sol | 218 --- data_full/CVE_clean/2018-13670.sol | 82 - data_full/CVE_clean/2018-13695.sol | 173 --- data_full/CVE_clean/2018-13698.sol | 53 - data_full/CVE_clean/2018-13703.sol | 217 --- data_full/CVE_clean/2018-13722.sol | 209 --- data_full/CVE_clean/2018-13777.sol | 89 -- data_full/CVE_clean/2018-13778.sol | 115 -- data_full/CVE_clean/2018-13779.sol | 137 -- data_full/CVE_clean/2018-13782.sol | 131 -- data_full/CVE_clean/2018-13783.sol | 149 -- data_full/CVE_clean/2018-13836.sol | 92 -- data_full/CVE_clean/2018-14001.sol | 130 -- data_full/CVE_clean/2018-14002.sol | 60 - data_full/CVE_clean/2018-14003.sol | 109 -- data_full/CVE_clean/2018-14004.sol | 204 --- data_full/CVE_clean/2018-14005.sol | 164 -- data_full/CVE_clean/2018-14006.sol | 202 --- data_full/CVE_clean/2018-14063.sol | 106 -- data_full/CVE_clean/2018-14084.sol | 141 -- data_full/CVE_clean/2018-14085.sol | 132 -- data_full/CVE_clean/2018-14086.sol | 85 -- data_full/CVE_clean/2018-14087.sol | 128 -- data_full/CVE_clean/2018-14089.sol | 145 -- data_full/CVE_clean/2018-14576.sol | 114 -- data_full/CVE_clean/2018-14715.sol | 502 ------ data_full/CVE_clean/2018-15552.sol | 73 - data_full/CVE_clean/2018-17050.sol | 107 -- data_full/CVE_clean/2018-17071.sol | 42 - data_full/CVE_clean/2018-17111.sol | 72 - data_full/CVE_clean/2018-17877.sol | 267 ---- data_full/CVE_clean/2018-17882.sol | 79 - data_full/CVE_clean/2018-17968.sol | 156 -- data_full/CVE_clean/2018-17987.sol | 149 -- data_full/CVE_clean/2018-18425.sol | 179 --- data_full/CVE_clean/2018-18665.sol | 73 - data_full/CVE_clean/2018-19830.sol | 140 -- data_full/CVE_clean/2018-19831.sol | 233 --- data_full/CVE_clean/2018-19832.sol | 174 --- data_full/CVE_clean/2018-19833.sol | 60 - data_full/CVE_clean/2018-19834.sol | 139 -- data_full/CVE_clean/2019-15078.sol | 174 --- data_full/CVE_clean/2019-15079.sol | 58 - data_full/CVE_clean/2019-15080.sol | 121 -- data_full/CVE_clean/2020-17752.sol | 290 ---- data_full/CVE_clean/2020-17753.sol | 350 ----- data_full/CVE_clean/2020-35962.sol | 540 ------- data_full/CVE_clean/2021-3004.sol | 400 ----- data_full/CVE_clean/2021-3006.sol | 540 ------- data_full/CVE_clean/2021-33403.sol | 196 --- data_full/CVE_clean/2021-34270.sol | 128 -- data_full/CVE_clean/2021-34272.sol | 133 -- data_full/CVE_clean/2021-34273.sol | 80 - data_full/CVE_label/CVE2description.json | 564 ------- data_full/CVE_label/CVE2label.json | 21 - data_sample/CVE/2018-13071.sol | 231 --- data_sample/CVE/2018-13072.sol | 168 --- data_sample/CVE/2018-13073.sol | 175 --- data_sample/CVE/2018-13074.sol | 227 --- data_sample/CVE_clean/2018-13071.sol | 171 --- data_sample/CVE_clean/2018-13072.sol | 125 -- data_sample/CVE_clean/2018-13073.sol | 131 -- data_sample/CVE_clean/2018-13074.sol | 112 -- data_sample/CVE_label/CVE2description.json | 564 ------- data_sample/CVE_label/CVE2label.json | 21 - data_sample/prompts.py | 91 -- requirements.txt | 10 - .../2018-13071.json | 23 - .../2018-13072.json | 23 - .../2018-13073.json | 23 - .../2018-13074.json | 23 - .../2018-13071.json | 1 - .../2018-13072.json | 1 - .../2018-13073.json | 35 - .../2018-13074.json | 35 - .../ranker_default/2018-13071.json | 1 - .../ranker_default/2018-13072.json | 1 - .../ranker_default/2018-13073.json | 38 - .../ranker_default/2018-13074.json | 38 - src/CS8903_Aditya_PAL_GPTLens_Demo.pdf | Bin 797910 -> 0 bytes src/Gradio_UI_Files/README.md | 9 - src/Gradio_UI_Files/UI Files/UI_gradio.py | 199 --- .../UI Files/UI_static_gradio.py | 61 - src/Gradio_UI_Files/images/auditor_prompt.png | Bin 131536 -> 0 bytes .../images/auditor_reasoning.png | Bin 73285 -> 0 bytes src/Gradio_UI_Files/images/author.png | Bin 28397 -> 0 bytes src/Gradio_UI_Files/images/critic_prompt.png | Bin 113250 -> 0 bytes src/Gradio_UI_Files/images/criticism.png | Bin 120923 -> 0 bytes src/Gradio_UI_Files/images/developer.png | Bin 47791 -> 0 bytes src/Gradio_UI_Files/images/header.png | Bin 126147 -> 0 bytes src/Gradio_UI_Files/images/model.png | Bin 668792 -> 0 bytes src/Gradio_UI_Files/images/professor.png | Bin 29489 -> 0 bytes src/UI.py | 319 ---- src/UI_demo.py | 411 ----- src/environment_old.yml | 83 - .../2018-10706.json | 23 - .../2018-10944.json | 23 - .../2018-11239.json | 23 - .../2018-10706.json | 35 - .../2018-10944.json | 35 - .../2018-11239.json | 35 - .../ranker_default/2018-10706.json | 38 - .../ranker_default/2018-10944.json | 38 - .../ranker_default/2018-11239.json | 38 - .../CVE-2018-10299.json | 29 - .../CVE-2018-10376.json | 29 - .../CVE-2018-10468.json | 29 - .../CVE-2018-11411.json | 29 - .../CVE-2018-12025.json | 29 - .../CVE-2018-13836.json | 29 - .../CVE-2018-15552.json | 29 - .../CVE-2018-17877.json | 29 - .../CVE-2018-17882.json | 29 - src/model.py | 107 -- src/pre_process.py | 41 - src/prompts.py | 91 -- src/run_auditor.py | 117 -- src/run_auditor_user_defined.py | 113 -- src/run_critic.py | 108 -- src/run_critic_user_defined.py | 106 -- src/run_rank.py | 71 - src/utils.py | 19 - 358 files changed, 2 insertions(+), 64166 deletions(-) delete mode 100644 .devcontainer/devcontainer.json delete mode 100644 .gitmodules delete mode 100644 .streamlit/config.toml delete mode 160000 GPTLens delete mode 100644 GPTLens.pdf delete mode 100644 README.md delete mode 100644 data/CVE/2018-10706.sol delete mode 100644 data/CVE/2018-10944.sol delete mode 100644 data/CVE/2018-11239.sol delete mode 100644 data/CVE_clean/2018-10706.sol delete mode 100644 data/CVE_clean/2018-10944.sol delete mode 100644 data/CVE_clean/2018-11239.sol delete mode 100644 data/CVE_label/CVE2description.json delete mode 100644 data/CVE_label/CVE2label.json delete mode 100644 data_full/CVE/2018-10299.sol delete mode 100644 data_full/CVE/2018-10376.sol delete mode 100644 data_full/CVE/2018-10468.sol delete mode 100644 data_full/CVE/2018-10666.sol delete mode 100644 data_full/CVE/2018-10705.sol delete mode 100644 data_full/CVE/2018-10706.sol delete mode 100644 data_full/CVE/2018-10944.sol delete mode 100644 data_full/CVE/2018-11239.sol delete mode 100644 data_full/CVE/2018-11335.sol delete mode 100644 data_full/CVE/2018-11411.sol delete mode 100644 data_full/CVE/2018-11429.sol delete mode 100644 data_full/CVE/2018-11446.sol delete mode 100644 data_full/CVE/2018-11561.sol delete mode 100644 data_full/CVE/2018-11687.sol delete mode 100644 data_full/CVE/2018-12025-1.sol delete mode 100644 data_full/CVE/2018-12025-2.sol delete mode 100644 data_full/CVE/2018-12025-3.sol delete mode 100644 data_full/CVE/2018-12062.sol delete mode 100644 data_full/CVE/2018-12063.sol delete mode 100644 data_full/CVE/2018-12067.sol delete mode 100644 data_full/CVE/2018-12068.sol delete mode 100644 data_full/CVE/2018-12070.sol delete mode 100644 data_full/CVE/2018-12078.sol delete mode 100644 data_full/CVE/2018-12079.sol delete mode 100644 data_full/CVE/2018-12080.sol delete mode 100644 data_full/CVE/2018-12081.sol delete mode 100644 data_full/CVE/2018-12082.sol delete mode 100644 data_full/CVE/2018-12083.sol delete mode 100644 data_full/CVE/2018-12084.sol delete mode 100644 data_full/CVE/2018-12230.sol delete mode 100644 data_full/CVE/2018-12454.sol delete mode 100644 data_full/CVE/2018-12511.sol delete mode 100644 data_full/CVE/2018-12702.sol delete mode 100644 data_full/CVE/2018-12703.sol delete mode 100644 data_full/CVE/2018-12885.sol delete mode 100644 data_full/CVE/2018-12959.sol delete mode 100644 data_full/CVE/2018-12975.sol delete mode 100644 data_full/CVE/2018-13041.sol delete mode 100644 data_full/CVE/2018-13068.sol delete mode 100644 data_full/CVE/2018-13069.sol delete mode 100644 data_full/CVE/2018-13070.sol delete mode 100644 data_full/CVE/2018-13071.sol delete mode 100644 data_full/CVE/2018-13072.sol delete mode 100644 data_full/CVE/2018-13073.sol delete mode 100644 data_full/CVE/2018-13074.sol delete mode 100644 data_full/CVE/2018-13075.sol delete mode 100644 data_full/CVE/2018-13076.sol delete mode 100644 data_full/CVE/2018-13077.sol delete mode 100644 data_full/CVE/2018-13078.sol delete mode 100644 data_full/CVE/2018-13079.sol delete mode 100644 data_full/CVE/2018-13080.sol delete mode 100644 data_full/CVE/2018-13081.sol delete mode 100644 data_full/CVE/2018-13082.sol delete mode 100644 data_full/CVE/2018-13083.sol delete mode 100644 data_full/CVE/2018-13084.sol delete mode 100644 data_full/CVE/2018-13085.sol delete mode 100644 data_full/CVE/2018-13086.sol delete mode 100644 data_full/CVE/2018-13087.sol delete mode 100644 data_full/CVE/2018-13088.sol delete mode 100644 data_full/CVE/2018-13089.sol delete mode 100644 data_full/CVE/2018-13090.sol delete mode 100644 data_full/CVE/2018-13091.sol delete mode 100644 data_full/CVE/2018-13092.sol delete mode 100644 data_full/CVE/2018-13113.sol delete mode 100644 data_full/CVE/2018-13126.sol delete mode 100644 data_full/CVE/2018-13127.sol delete mode 100644 data_full/CVE/2018-13128.sol delete mode 100644 data_full/CVE/2018-13129.sol delete mode 100644 data_full/CVE/2018-13131.sol delete mode 100644 data_full/CVE/2018-13132.sol delete mode 100644 data_full/CVE/2018-13144.sol delete mode 100644 data_full/CVE/2018-13189.sol delete mode 100644 data_full/CVE/2018-13202.sol delete mode 100644 data_full/CVE/2018-13208.sol delete mode 100644 data_full/CVE/2018-13220.sol delete mode 100644 data_full/CVE/2018-13221.sol delete mode 100644 data_full/CVE/2018-13225.sol delete mode 100644 data_full/CVE/2018-13227.sol delete mode 100644 data_full/CVE/2018-13228.sol delete mode 100644 data_full/CVE/2018-13230.sol delete mode 100644 data_full/CVE/2018-13325.sol delete mode 100644 data_full/CVE/2018-13326.sol delete mode 100644 data_full/CVE/2018-13327.sol delete mode 100644 data_full/CVE/2018-13493.sol delete mode 100644 data_full/CVE/2018-13533.sol delete mode 100644 data_full/CVE/2018-13625.sol delete mode 100644 data_full/CVE/2018-13670.sol delete mode 100644 data_full/CVE/2018-13695.sol delete mode 100644 data_full/CVE/2018-13698.sol delete mode 100644 data_full/CVE/2018-13703.sol delete mode 100644 data_full/CVE/2018-13722.sol delete mode 100644 data_full/CVE/2018-13777.sol delete mode 100644 data_full/CVE/2018-13778.sol delete mode 100644 data_full/CVE/2018-13779.sol delete mode 100644 data_full/CVE/2018-13782.sol delete mode 100644 data_full/CVE/2018-13783.sol delete mode 100644 data_full/CVE/2018-13836.sol delete mode 100644 data_full/CVE/2018-14001.sol delete mode 100644 data_full/CVE/2018-14002.sol delete mode 100644 data_full/CVE/2018-14003.sol delete mode 100644 data_full/CVE/2018-14004.sol delete mode 100644 data_full/CVE/2018-14005.sol delete mode 100644 data_full/CVE/2018-14006.sol delete mode 100644 data_full/CVE/2018-14063.sol delete mode 100644 data_full/CVE/2018-14084.sol delete mode 100644 data_full/CVE/2018-14085.sol delete mode 100644 data_full/CVE/2018-14086.sol delete mode 100644 data_full/CVE/2018-14087.sol delete mode 100644 data_full/CVE/2018-14089.sol delete mode 100644 data_full/CVE/2018-14576.sol delete mode 100644 data_full/CVE/2018-14715.sol delete mode 100644 data_full/CVE/2018-15552.sol delete mode 100644 data_full/CVE/2018-17050.sol delete mode 100644 data_full/CVE/2018-17071.sol delete mode 100644 data_full/CVE/2018-17111.sol delete mode 100644 data_full/CVE/2018-17877.sol delete mode 100644 data_full/CVE/2018-17882.sol delete mode 100644 data_full/CVE/2018-17968.sol delete mode 100644 data_full/CVE/2018-17987.sol delete mode 100644 data_full/CVE/2018-18425.sol delete mode 100644 data_full/CVE/2018-18665.sol delete mode 100644 data_full/CVE/2018-19830.sol delete mode 100644 data_full/CVE/2018-19831.sol delete mode 100644 data_full/CVE/2018-19832.sol delete mode 100644 data_full/CVE/2018-19833.sol delete mode 100644 data_full/CVE/2018-19834.sol delete mode 100644 data_full/CVE/2019-15078.sol delete mode 100644 data_full/CVE/2019-15079.sol delete mode 100644 data_full/CVE/2019-15080.sol delete mode 100644 data_full/CVE/2020-17752.sol delete mode 100644 data_full/CVE/2020-17753.sol delete mode 100644 data_full/CVE/2020-35962.sol delete mode 100644 data_full/CVE/2021-3004.sol delete mode 100644 data_full/CVE/2021-3006.sol delete mode 100644 data_full/CVE/2021-33403.sol delete mode 100644 data_full/CVE/2021-34270.sol delete mode 100644 data_full/CVE/2021-34272.sol delete mode 100644 data_full/CVE/2021-34273.sol delete mode 100644 data_full/CVE_clean/2018-10299.sol delete mode 100644 data_full/CVE_clean/2018-10376.sol delete mode 100644 data_full/CVE_clean/2018-10468.sol delete mode 100644 data_full/CVE_clean/2018-10666.sol delete mode 100644 data_full/CVE_clean/2018-10705.sol delete mode 100644 data_full/CVE_clean/2018-10706.sol delete mode 100644 data_full/CVE_clean/2018-10944.sol delete mode 100644 data_full/CVE_clean/2018-11239.sol delete mode 100644 data_full/CVE_clean/2018-11335.sol delete mode 100644 data_full/CVE_clean/2018-11411.sol delete mode 100644 data_full/CVE_clean/2018-11429.sol delete mode 100644 data_full/CVE_clean/2018-11446.sol delete mode 100644 data_full/CVE_clean/2018-11561.sol delete mode 100644 data_full/CVE_clean/2018-11687.sol delete mode 100644 data_full/CVE_clean/2018-12025.sol delete mode 100644 data_full/CVE_clean/2018-12062.sol delete mode 100644 data_full/CVE_clean/2018-12063.sol delete mode 100644 data_full/CVE_clean/2018-12067.sol delete mode 100644 data_full/CVE_clean/2018-12068.sol delete mode 100644 data_full/CVE_clean/2018-12070.sol delete mode 100644 data_full/CVE_clean/2018-12078.sol delete mode 100644 data_full/CVE_clean/2018-12079.sol delete mode 100644 data_full/CVE_clean/2018-12080.sol delete mode 100644 data_full/CVE_clean/2018-12081.sol delete mode 100644 data_full/CVE_clean/2018-12082.sol delete mode 100644 data_full/CVE_clean/2018-12083.sol delete mode 100644 data_full/CVE_clean/2018-12084.sol delete mode 100644 data_full/CVE_clean/2018-12230.sol delete mode 100644 data_full/CVE_clean/2018-12454.sol delete mode 100644 data_full/CVE_clean/2018-12511.sol delete mode 100644 data_full/CVE_clean/2018-12702.sol delete mode 100644 data_full/CVE_clean/2018-12703.sol delete mode 100644 data_full/CVE_clean/2018-12885.sol delete mode 100644 data_full/CVE_clean/2018-12959.sol delete mode 100644 data_full/CVE_clean/2018-12975.sol delete mode 100644 data_full/CVE_clean/2018-13041.sol delete mode 100644 data_full/CVE_clean/2018-13068.sol delete mode 100644 data_full/CVE_clean/2018-13069.sol delete mode 100644 data_full/CVE_clean/2018-13070.sol delete mode 100644 data_full/CVE_clean/2018-13071.sol delete mode 100644 data_full/CVE_clean/2018-13072.sol delete mode 100644 data_full/CVE_clean/2018-13073.sol delete mode 100644 data_full/CVE_clean/2018-13074.sol delete mode 100644 data_full/CVE_clean/2018-13075.sol delete mode 100644 data_full/CVE_clean/2018-13076.sol delete mode 100644 data_full/CVE_clean/2018-13077.sol delete mode 100644 data_full/CVE_clean/2018-13078.sol delete mode 100644 data_full/CVE_clean/2018-13079.sol delete mode 100644 data_full/CVE_clean/2018-13080.sol delete mode 100644 data_full/CVE_clean/2018-13081.sol delete mode 100644 data_full/CVE_clean/2018-13082.sol delete mode 100644 data_full/CVE_clean/2018-13083.sol delete mode 100644 data_full/CVE_clean/2018-13084.sol delete mode 100644 data_full/CVE_clean/2018-13085.sol delete mode 100644 data_full/CVE_clean/2018-13086.sol delete mode 100644 data_full/CVE_clean/2018-13087.sol delete mode 100644 data_full/CVE_clean/2018-13088.sol delete mode 100644 data_full/CVE_clean/2018-13089.sol delete mode 100644 data_full/CVE_clean/2018-13090.sol delete mode 100644 data_full/CVE_clean/2018-13091.sol delete mode 100644 data_full/CVE_clean/2018-13092.sol delete mode 100644 data_full/CVE_clean/2018-13113.sol delete mode 100644 data_full/CVE_clean/2018-13126.sol delete mode 100644 data_full/CVE_clean/2018-13127.sol delete mode 100644 data_full/CVE_clean/2018-13128.sol delete mode 100644 data_full/CVE_clean/2018-13129.sol delete mode 100644 data_full/CVE_clean/2018-13131.sol delete mode 100644 data_full/CVE_clean/2018-13132.sol delete mode 100644 data_full/CVE_clean/2018-13144.sol delete mode 100644 data_full/CVE_clean/2018-13189.sol delete mode 100644 data_full/CVE_clean/2018-13202.sol delete mode 100644 data_full/CVE_clean/2018-13208.sol delete mode 100644 data_full/CVE_clean/2018-13220.sol delete mode 100644 data_full/CVE_clean/2018-13221.sol delete mode 100644 data_full/CVE_clean/2018-13225.sol delete mode 100644 data_full/CVE_clean/2018-13227.sol delete mode 100644 data_full/CVE_clean/2018-13228.sol delete mode 100644 data_full/CVE_clean/2018-13230.sol delete mode 100644 data_full/CVE_clean/2018-13325.sol delete mode 100644 data_full/CVE_clean/2018-13326.sol delete mode 100644 data_full/CVE_clean/2018-13327.sol delete mode 100644 data_full/CVE_clean/2018-13493.sol delete mode 100644 data_full/CVE_clean/2018-13533.sol delete mode 100644 data_full/CVE_clean/2018-13625.sol delete mode 100644 data_full/CVE_clean/2018-13670.sol delete mode 100644 data_full/CVE_clean/2018-13695.sol delete mode 100644 data_full/CVE_clean/2018-13698.sol delete mode 100644 data_full/CVE_clean/2018-13703.sol delete mode 100644 data_full/CVE_clean/2018-13722.sol delete mode 100644 data_full/CVE_clean/2018-13777.sol delete mode 100644 data_full/CVE_clean/2018-13778.sol delete mode 100644 data_full/CVE_clean/2018-13779.sol delete mode 100644 data_full/CVE_clean/2018-13782.sol delete mode 100644 data_full/CVE_clean/2018-13783.sol delete mode 100644 data_full/CVE_clean/2018-13836.sol delete mode 100644 data_full/CVE_clean/2018-14001.sol delete mode 100644 data_full/CVE_clean/2018-14002.sol delete mode 100644 data_full/CVE_clean/2018-14003.sol delete mode 100644 data_full/CVE_clean/2018-14004.sol delete mode 100644 data_full/CVE_clean/2018-14005.sol delete mode 100644 data_full/CVE_clean/2018-14006.sol delete mode 100644 data_full/CVE_clean/2018-14063.sol delete mode 100644 data_full/CVE_clean/2018-14084.sol delete mode 100644 data_full/CVE_clean/2018-14085.sol delete mode 100644 data_full/CVE_clean/2018-14086.sol delete mode 100644 data_full/CVE_clean/2018-14087.sol delete mode 100644 data_full/CVE_clean/2018-14089.sol delete mode 100644 data_full/CVE_clean/2018-14576.sol delete mode 100644 data_full/CVE_clean/2018-14715.sol delete mode 100644 data_full/CVE_clean/2018-15552.sol delete mode 100644 data_full/CVE_clean/2018-17050.sol delete mode 100644 data_full/CVE_clean/2018-17071.sol delete mode 100644 data_full/CVE_clean/2018-17111.sol delete mode 100644 data_full/CVE_clean/2018-17877.sol delete mode 100644 data_full/CVE_clean/2018-17882.sol delete mode 100644 data_full/CVE_clean/2018-17968.sol delete mode 100644 data_full/CVE_clean/2018-17987.sol delete mode 100644 data_full/CVE_clean/2018-18425.sol delete mode 100644 data_full/CVE_clean/2018-18665.sol delete mode 100644 data_full/CVE_clean/2018-19830.sol delete mode 100644 data_full/CVE_clean/2018-19831.sol delete mode 100644 data_full/CVE_clean/2018-19832.sol delete mode 100644 data_full/CVE_clean/2018-19833.sol delete mode 100644 data_full/CVE_clean/2018-19834.sol delete mode 100644 data_full/CVE_clean/2019-15078.sol delete mode 100644 data_full/CVE_clean/2019-15079.sol delete mode 100644 data_full/CVE_clean/2019-15080.sol delete mode 100644 data_full/CVE_clean/2020-17752.sol delete mode 100644 data_full/CVE_clean/2020-17753.sol delete mode 100644 data_full/CVE_clean/2020-35962.sol delete mode 100644 data_full/CVE_clean/2021-3004.sol delete mode 100644 data_full/CVE_clean/2021-3006.sol delete mode 100644 data_full/CVE_clean/2021-33403.sol delete mode 100644 data_full/CVE_clean/2021-34270.sol delete mode 100644 data_full/CVE_clean/2021-34272.sol delete mode 100644 data_full/CVE_clean/2021-34273.sol delete mode 100644 data_full/CVE_label/CVE2description.json delete mode 100644 data_full/CVE_label/CVE2label.json delete mode 100644 data_sample/CVE/2018-13071.sol delete mode 100644 data_sample/CVE/2018-13072.sol delete mode 100644 data_sample/CVE/2018-13073.sol delete mode 100644 data_sample/CVE/2018-13074.sol delete mode 100644 data_sample/CVE_clean/2018-13071.sol delete mode 100644 data_sample/CVE_clean/2018-13072.sol delete mode 100644 data_sample/CVE_clean/2018-13073.sol delete mode 100644 data_sample/CVE_clean/2018-13074.sol delete mode 100644 data_sample/CVE_label/CVE2description.json delete mode 100644 data_sample/CVE_label/CVE2label.json delete mode 100644 data_sample/prompts.py delete mode 100644 requirements.txt delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json delete mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json delete mode 100644 src/CS8903_Aditya_PAL_GPTLens_Demo.pdf delete mode 100644 src/Gradio_UI_Files/README.md delete mode 100644 src/Gradio_UI_Files/UI Files/UI_gradio.py delete mode 100644 src/Gradio_UI_Files/UI Files/UI_static_gradio.py delete mode 100644 src/Gradio_UI_Files/images/auditor_prompt.png delete mode 100644 src/Gradio_UI_Files/images/auditor_reasoning.png delete mode 100644 src/Gradio_UI_Files/images/author.png delete mode 100644 src/Gradio_UI_Files/images/critic_prompt.png delete mode 100644 src/Gradio_UI_Files/images/criticism.png delete mode 100644 src/Gradio_UI_Files/images/developer.png delete mode 100644 src/Gradio_UI_Files/images/header.png delete mode 100644 src/Gradio_UI_Files/images/model.png delete mode 100644 src/Gradio_UI_Files/images/professor.png delete mode 100644 src/UI.py delete mode 100644 src/UI_demo.py delete mode 100644 src/environment_old.yml delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10706.json delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10944.json delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-11239.json delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10706.json delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10944.json delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-11239.json delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10706.json delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10944.json delete mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-11239.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10299.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10376.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10468.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-11411.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-12025.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-13836.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-15552.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17877.json delete mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17882.json delete mode 100644 src/model.py delete mode 100644 src/pre_process.py delete mode 100644 src/prompts.py delete mode 100644 src/run_auditor.py delete mode 100644 src/run_auditor_user_defined.py delete mode 100644 src/run_critic.py delete mode 100644 src/run_critic_user_defined.py delete mode 100644 src/run_rank.py delete mode 100644 src/utils.py diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 794dc2cd..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "Python 3", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye", - "customizations": { - "codespaces": { - "openFiles": [ - "README.md", - "src\UI.py" - ] - }, - "vscode": { - "settings": {}, - "extensions": [ - "ms-python.python", - "ms-python.vscode-pylance" - ] - } - }, - "updateContentCommand": "[ -f packages.txt ] && sudo apt update && sudo apt upgrade -y && sudo xargs apt install -y 2tV3;|X0So|pBP$pl9ss?JrJbpvlckrb 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%0DVR=Jza@FQfX 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

fkc(N+vvW@~6+=9HtGI(@GO6 zw^{SdrOwEH)XpPN)|WtM&;pD-cmZ-k>3Bh;AGnP>JEN+maQ$hMvj!nTgso?6 zbCLP$dyJ{$n*zr{FDGrHya4G;Ryji_W_uDi(@dOc` zg!qPCtI2VVvQ$chpwnqz38f9{*CK;$(`JQK1U9~e+8zRKMFfGXG4`MnK~eD($hP6b zzKGeXzT`wSSPq@dV(R-8{+jGbtJJ*p=il&ze$Ct>VwBS^FLUf-?US`{`>$XQ8Z?OT zD!e3iN~LBI41S%(gl_L7>}zOa*K8Tm!qlBg3ZCwhvP%cxaF-MoIhP~X-LHSHXa(5S z{qy!Mn>?mRk&!j&df-%e*lk$Tzu=V5cTnW>9gy_Bw8lIVsbRK>DmSKXCAy~oW(e5A zuGYX*(JdW7FKvt!t|WyzmE4}T!#!fi_V6bOLeV`OI zJG_N&jV(_#z9G6Ek%$^`mf{#!)26uElogllxsf$tMP^Q3W>$92jE$ya{$-s;$9G2U zXk74ax7qK#TV3XDRVoJNZTz%ZNSN*sTODFWbXyl5mj|F#Sf#YD1ONj;{JuUct6S*$ zx4*mNwG|V(jbFQdLq{B|Lp7N~%RGsJQANhEZbg^RfBwhszn|T+Y3-mQhV|$yS_wtD zX-&3+uCZlo&kuKO7~CaCy{TyfPDO^GD;LIwVdd{kt@TNbevKBM>h{*Y5BuUITo{wP zq`KOy+Z#ELugw`-lBD{!l!t=uGbFDa+5OI!o6$VeDd5(=%xktux`38jn6&Ls(8(7F z3NF}U;ED(Cy&ZOJ^;%tH-H?(qdp570KaCnsrjkPCR6|{IDvVtRmQC6@ zbFl7?P5h7#`|3_n_-j_yHnMVriL#f$i{T63@*@Mi&JXVJ=2!tw>%F%wa(@9C2#cdlRE zJ$JZq40bJ>X?3T1X2ct3z+`lM)1ouS57!jD&}&Qu2iWFrIn|y8qfc&Ifudn@U$YP3 zCNZowXIx1VSSvbwzeZSF-AZ&SMrDUKycm8ire98i?%mKG5=dh-P-JIjbSun6WO(=& zZi}baJiN6QZ>r?oD_O&)zwiS08(nJaBG)oZKijZqEIHY4p2*wunK5b3&&lmB*JXTX zWoM0?i{4>(iJ9946s)pc-x3>abz$d42XxQc=CEzswjQ3f?h;-kK}_#u%U5Wb=WE-h z?w-vkI?Y}Jg_r|^uBfT#*@d7;ObWHfEnF7sgpQ1x_6G#-33YX{gqcskV;qb^gdMv<%%HoA@D~eUz!$-O?LS6>bF#;%dQ3 zQ4W}>hA5hhZUvotm*9%_@(;De{^d*zNn$8>oQaj*Q~7U3Crpo5AeX9&WjJl z^d1`=o7}AVi|9mfoH{QM$_KGx(SrT@jPL59j289R}@d;7Lajel%>Y#e)YQ+P5A4tzdnC&$NHhAx>LHtxCkM$A$JF& zM7?&)*dABUeR%4F!#%T;w5&<&I(|JVKtYS}Cw@4YB;P!Y^Eh1x-!rUZo zzf^-YH_ulf$?S_dfSqYGwuL67Tm3epyAKcGy-cUlLY-%nR&Z!KEP$N_TQ4*VwnG5Z zQUivsz6qWi6b;nQY16)WOB$*E4@5^B5~-(pWwulKISnMm<&%fEO{~^-TD7q|sq@%3 zD$`?`1ef%=y_@gd{&DuGK{^@n(xDP)>WWkK&pWz)-tF(c+P`$7)oPn&KMa|YcBYZf z4ZL8K9UUwrP7R7>1aKL=Z1(R7_5@fxEFw3n^Qf-bgSwb|IURXOQBG!Fb|&?y?Qhq9 z$h^YMpJwzK_R@r<6@?qm29Q-6rz+iZqiw}No3*uQ6YaB8)tlJTI=)e_C@H8&&-%Ng zI&*Z-(KZ{`ogwK{NUaP`*&5Pzo<9&lCY=?vc(JUmQ(GTJ@n4C zuP>i^Z^N)M`vo_(vxtnwcVYC)McE;Swp0_1K!GQ8pMZyNCAM`iPXR`hm6zG-MjM(I5)fbuqc zQXjWg=6vD!#_TtAI#9-@YfjM1hCk zt13j$nknBlc6tk@LdDp)Y15y7|3~46f>lj{u6p$N7cC2Y4cj|*?le9HW6#72cjGMlMt__U}bW( zHB?+&3}j4AY4*T!pNgUWvxl7GUN1RYvvUYE zt#20U6B!w$#$SipQ?DXJb$nA($>+ila9-CFL5j9tLD5rpZQlT+Sbe4b+Gn z&@Uc8yuWYpINf?0_z+1qwIUUCrUt&R|F^@7LFR?}EJ#AH@9?d(SckHG;UU2yY(Y1s zB0qCNw`{CZ+I~m;ke4F03QI8B)DwqPr)^x3@jT-@H!pkQ^0K`*)KxWBBc_+AcLV9K zeX=%fRE!N9H~#V0-$rgfYP8VpBqr5@g$qTb#sdGKoX9H|xl3%zAeBL>4G)}Z`?UT) zeEr3L{^x(c{P5tqAr2v4{89!v|)A1Q#1aTYE55X{l+LS=z(3#oj1?^7RuSU_;?1J zPV$;`3i^QfIs3zi=Jw1Gc^om}FX|He0pEdh`?c5%n zh(~=D%XwgcB4tt$+yH|N%WJ>9K|m2lmpOl3Sfzv;Sp<<)_&(-V=TsHGq+%!|Q&Syq zt|%?7L~3Q!j%t7;zD5)o)Q$3iqId!ZQTc!2J74FlK1u!vX?k#bwcpQ1>%1xv*1;IQ z0gUf}+5-sH%2lg=|MM?X#*Qc%GIS{Eez-_PZl^fVO{aPtI!BBgDMBSbt??9cvaiUd ztRXt=xzzA+s(d(=3kV|$`JH;_&1X-a@ELIF_xday-rrAopnm4H`T6~a z4`1w=sI1c(HXe`JtBZqiqz=qtHR*U1wj7A zPq%;Ik@-}Ng=0(?&@i18wg6F(Iv4eA|F4hjP`|sT^K&mox0E(BD%0xYE;e(GF{lQ!RO{h`z%BmQ?lIvv&t-!fz__|JWx;vN1dC5Jk{k7M%vobp8b%-sD56kTkM=FNl z{EH69%)Zc;t%^4J!Kj5pkNDcRkC+Ni%P-h^(I2jBdacj#J#c~oQEocGrt^9Fp|vrm z-GKjR@4El0M!xocv-Vy<1;vhX=^d$3M8E>}u87jCpkTq?6;QGFUUu!h7sTFIUH$I9 zzr0Tf4nxXhl3Tby_}q0TlgVUqW^zu>oO7O&#kgG8DeRtg_u!Qp5*Xy9q@)`+Z^`){ zc*XG(Ct_n`YZt`t5+`svvU|w8Z8|kcNy8Yzf}B#!70&o*l%LZ4j0CLi%qSi3N(k1w zbYRCnKLuZi_pe?6hfsb~ht(`e3xcmvWS>rYa}POegp3=(C74(-M*F!HBzrR&+v61W zKjCARY?1DAkmW}TJ$m%`{eIW^KkOEM{d)zuw-4;q$;Y#QopVYDU@xRk#e&=L8M>Go z-5Azn{*11$1t<;xm91QR_MWs9FtBvz)|a7Kcuy_xU!tA*T=8BA5AWy~r8Z{N+e~Eq z4jTcmEvLBwcNaG>vE#IC`Eo@SvJ6fqh&^Z}I}H9=a0w9bLER%g6V47JN2bIlQwT^I|L?89Y9u4-7G*e0%6J#Mp!V z8t8MzkbY1upkg41Z(e=mbpp_OR`dX9XAuLs$rpyCMlnmcuV+69i(vP5{{4F3wO3;Z zq@Ks<=~H}6k!P|i5kQSit*{+;+0E#)5DG5Q>CM}B5}&krhc0dV`69s0Yw+!NP^agh4u& z6gcm7=*SWIEt*J8d_n>tIHO=aYQ($*FBheRp7@GD3?P3zNcp@8FQ42OXXo9^N*o$s zl{UJ>KR-1DEH|=uM}S1xs87e`gaS|rOh}LyQGGh$Q{VC9$F?VOofFK%K3X`pSSn!n z^gHf7Xkb8Z!4MPJv!gGEiXmRBxjlt2I=yMH!A^a%R{Q2|G8`5cvg2M@*&_zWw(=BY z5OVGDD?#$xIY?wwyztH0Xz>f6Ct7pL2=4+cEesYC?u`KOZQFN*goMz2s+GI(0a7hm zyjXIVrgP{py9SsN(z*@l=i<_~MW@y+T-&uA?ACE~U~m3N5G3-ud-3@Hsy(HD{qNt) zhsx?v#VDCLG{Lhw_|*vS?hR4JK>EJ~FZT$KPDnUzz0t~m!~xL?DC9{fvzq=AbR-wd z7JmJDz=XlCVh}E&`7sI1KsnE3)c6-vScXpsT4RMB#3<|rV^q>p6_wH&JvViX$bg!L zOtNIANMW$W`;TTCS-M2Qfe;%B_da|6d}3lE=}NNzeU``|Mge>Kk{dOh!}RnF24%=8 z@Pe*CEUgm_m~S(ZOu(z(M9*H4L`og5B%F~p_|s@8Cn0B;MHS8`p=s(CL^dfEE?8#XrzY}Uy1fQH%>bbix}Sr6Nb-#-a$QuT{T@Q zhR80Ut&ml%Rv3`Ak(0p&t-WAL%CL;hM(S|ROB!M`$B2x8q63zY2su|r_+iMVt86Ss zdMYccsze6<^m*m<88hS^vTOYP{dvqN?(RLCj+l@pDH!d8XmrzggqV9Oe z6G7{wUwp+fydp=WrUZI)0sZm$;n%l2+fho9IcO$e!mWcgUDxF8*y^#2&qbtz|KbYG z#tpiG14IUH;XP?SqGKde<`tDl5{vVv6ffJk^V8=qi0K1(h@?Z!!;Fj!$QnSeE3QCE z<%dt7CG50`9L|_IQ$h;G!&y;Q?b~O^4ur8)Z~!S9AQSQS#k119afHt}xNvO! zV%Xn5e*8G3cl}ratbATzt>=x7y?5>M5%t82R^Gyz%Xv)U3l}Xam^0Owib2?gW^f+@ z*4Rv5h>V-F))Elnm6#s7^%lEvLqF>Pk%6>;UQtP8f@%r~Jj~ue`vV}8h$3r}S4PLg zgolSqJJdRcL1e?mO~5b&!x=epl)PJc&E>1t2zP2y1x_5Q$>GMWr7(9Qk+ft-g3V#p zPK>>E`XKzH#JRvsB57cKsTigC<6k~`AdckxfpU5`p8XWgb2c}@_spR^Jc$?UYs{WK zG(ZdS&R)NHYj(zPzdqe8UUh8ZTKu5Sd3M@9+y&`J8LU2_=%6Js9_coGW-ixjF=uq^ zoTuzAGAdpO^4IS-Y`r*9NM$l1Kdkh=oF+(sD`(yE8ccDWDd#vq@Hh>DTU5ME-mSc* zw5+U22@CSDt5&a(Q$t>p5!}Zy{A9(*pwrt{0Nb355Gn?;hdbu(lDn*(6pJjhqWv91 zI=*p=YI==bAm>-8 z3E6lBfK)<9;j#6Vazb%ncB-_u$bgr!C0Q0Xkvukdy=rzsK$l1+OYM+$Lizl5S7Zsa6aIVv|KLQ{qC@6@Z8z{EqF=}`(IVj=7;pGp! zCol5$^%MF`&kQerC~4664(%;60+#H9NvO^oMZ}?!P07B~O4JyXq@FV;Y-Ci_`3n~b z!yyGE2bXlHcsOFjNODP&Dx5fZN|7LvO62}#zxY<3-IAI5^yVd+^1ziU%^hQ9w?-~c z^N0QY)4Mm~V7`C*``G#dBmJnDeI3))(iH!rTUVUeT%;>kuVcn0zsu|xPsw_dAMzkj z)!{-)2LL3L_bjOiEqhSQyDBPub2obhhY6hp1pCb|tv#j3ZM9)tWmk~_XEPvQ(Uarl zALNr+!jm2`VC_Z8WT_qUpr+^L<$wNCyQe`jA6PfA-qboL^+CbG^i@r#eDn4lLIg$u zaB%XM-6l0_#zg|6_UEsfJdB_`RE$6OZbceCoAj@%lkIaxA-6c0{b#qYY?zv$s|ROj zyeVts`JL-PSZ5dv&lr$jn6dW6Qxb?Fn(gqHH4#mP_`cubAaKQT5}u4isLqphf{f4} z1-pujpf%^bh72Y1Go$!h# zRrvJftL6)f2K~Er5MTd|(-Hv~$ioUW+u$=8AH#ot{zMb}&GRRv+3A|s+PuNKNwK%i z93uAjAK$-YY|GO8ZGI!Wb_hvvWX%F7Zg#zk%{x!xNcAY-mRtR&2{8nyK(OM_ZMQ5L zSv8KJ*!Z5bz%T@dJs7+F`n03SK*aal_3$DfbLbV98d!2l@3VB~OSi#5xtunA`kS}! zXr7~3h9j0HV?+*d(dSCBhsIsml|yZZu@Z2y*y_KqYlBUg#;!$EUq5?H6Ba54&z{Yd?_z|70N+lKh25`Y$Xu0KGEtT z)-VV0S~&AOxN=rPUPur`XIS64-X8W9Wxan@6G@68{qxU1XST0g-q2JG3>d!3^|Gg@ zm*DdD&|ZhevM^M|#VJpnK)3;C0qEA6>%3d9nv}2T(`&>uMgLDVu4`pIgauH+L+U92 z#C{^ffAMZh;BNpZUt}aN3g7ueFRdc?R%IW)9Xm9h$DaYSOoPve%LA$Uo>kU*+DQ11 zcnG+v(z0^wU*Qs2>X`Li9{z0FE?ir8v|41hD!QwEF1#XXzx!7t}0 zcC8U}i_;^idU$8^%;9#uso8lQ3Z(gC8xWg;pBiU99qlRxdBTL7`xp1tL!8)5YmFc7ICIPQo|d4 zDO)c11XcU6RriJb7k{W{gQDkGghx(JPQG)m1|plh?~;NdToosVVfn6IlHQug;r@dM zX=5(e*uut!72uFi=WtBjNIb%V1T<0y~Eg}+3+evzSmdq zyA7X$tE=BC2AKuG5~{5_Qm>dC~R|rdH^eJjr2Zg|M;*-cuF>non0g4(r7P z-Gg03Mn$F1%w?kC8&1p6+J@|TLEn_K9KGjR;KVvUy1+K{&EM9_)m?4+=z4@~6faw* zn3#zyJb2zNU$FwphGo`bbVm&u3S8UQWgLYd-p<3 zY&A{NS5F^qpEFW#Z&tQPu$!1$oQy=+9IMy}QDSA!R$h*MztWrxIB{9oPlLFeRx!kh zc>eG%z0B0goN-(7*B>?E{@$7KK5m`csdY~3{nuRN1-BvtMqz7i zOO zu-nm$n&cLz2Ll)19dk$XKarhU0*?_Ec?auUc6t_#Ze=RQmyaJ1K?x9k#=B2W;oGn7 zYt3~O;A5E-?IU8Kb!gp!^rlt_*{&lEpAH`QI|c-oh+!bW>tjG?80%TrRrU}W$YY3D zNMT}9Ct~MK*LZ3hBk}9BLW{Rg?F6R@Na>_O=a3||>7(lz7Kf|Xu8$ZoqPBmf61KuL z@d|Ley!?Ect2C){#E>C0!4=Cbnl)RR;;X?KsuhicD{?-*RYm9QyW6<`a7MHpcqKm`ZWwpF(V`mwpl0O*Qk^h{v_ zBIA)J!@!WlO91v|iA^CBNh76`KD#AO(U`~T(~22dt6sgDJ2#v3&n{?2_uxLWv$6XI69!IpW$>U`lWO7hlR;mumM zBCN@_1^AkJSBHUk1&7z8;ahwtn~MxVdkTw!d#&%>b;hki2m{RBRGau!hLlcb1n`oY zQ;7z9_wOf54u!AZzOP%q9#IBtNkN~5`>y7Vrc9km-=#^F4<0_ONgp&|piv2qNk?}h zYm%I9LM(=3_kti7;6^JM33f7Xo;m=IUCYoYPVTTuAT$CCv3?-79R9o#6$5$R_ZH2T zka~LL0G_qSDK$dW#9Y--k`C1FiAECejwFK*F$4I2xfR~z-@bkU0KVc%m^#EZQp3;3GB(n? zD5YjgiahVs7@q(?UmoY)Kbp5Nz=s)^1g$<>V;c7JuV2HrI7r)y3|KCJ3WA_-q*Y=N zLGzUVlKoJ@Y8W^ZDP8Oe`FS;&IU0z`FYexdFm{{_kDVNQo(B8XzaMA zD>d+H_w3nAlSFM=HkZ7WdzNP61Cr*?q+Ip*F1-;!-eNlyV1I{0l-&M~FAXR`^{Zm6 zn-q8J%wc$N)%)g{oro{#7AnT`yESRfpnl#su@9=KqzySl!Y|E*hX%j{VZ7_ZLcI%q zn=nYvi;{g4!fJqzc%()%+er-|@&T7m_-saud3_tc?IAJ*AF!w-{{pMB-wGRd6Y^{D zzJQcoxK~repn+%Z4xRfe15(rD>k82HARVH=&y}xrWY8S8eLlXe$t_OL9gOk-ydrGG@dYSiVv;FHt|n;3 zfb7t8v7Q*#k7wbjNsX8w@7%;XCJb?wr^fgOK>hgr$0IfVXx5yEYq8s4V;{KRK>rr* z>;#5yakMtnGJvvTNuTXAYX$mblY)H~__snaGF{f&H$PuLWA)B-PVj9a`nhg8rz(v)r&`W9ErJFom>0{J%F0> zzyIAhxgQuNj+YeVj{A$}e0crxT~%d0raLEtaX^7qF+RL`bzns{&rK(UX~U#r;mJL3 zgMBU2W2Ghx+;K6bV*C~w7S2##E0en7YuOSJC*IT<4Bs{v8G*}=z%ABV>kPsGGfNQA zQG=AO)7Il%bd-lv=?x1_Oia9Svo=ct*ht*ap_(^BE_(&$^WXn9kxCekG)aU8ZmwOw ze*UOP6Q~$xOIJHg#Q^b zQyY*P)g}y|r7{x+W)pHG$iEhjTd&kG9IpWo60hOo$?crM@NHX>0UZived|--hHkwn z;@=uWO2BY;IORj2Chm}=TJW>N~u3lI8 zwgN#P365F*C_z!cB&_FsKLWVZbO3OhE~ zoF|zhoWt;KW06t*Krne%7y$;MDG7jdZ{Xh=MM_6Z{hI6V&R+PFXDWen$QBmj*|@m4 z%U5df&}fDav_l?fec&R}S2e*h*WT|Re`L*>LlZ|p7vE9hFckx?n{;k*dL&;yyq7z6 z%GryZYTzJrYU{GEUp~YBjvYMyk8L}R#}VC9Dh75Y%kst=xal-LA1W-)$N=x0M5&9E zc*hw-l~oMFH#pa}rBFwN8vIU$Oha`3>*!(i8}UuEXdBuxtlYT6sA|FhMWpod$MiTk z%ZdA+Uwb3KWuHECmPcx+8N$etKw-hcg`dCvP4f`3{MV(+u!(DCe#9{L9XKGryh+u} z%FN`Mjvj7q1a=ttQXPga4s*$qn}4az$lZ&_8IC#zxS6g?b{9-X{2;~#Lq_@hiMpv?_YlYxAw;Se$!TH&LlRMBnv=143CI7 zeo~r83Ez7M4jzJ^t>hAj9?cucr4Jcx(<#iDIa8BRXaF3z?6|?!a}0J52( zCgbp`e0C3ZIty&`qw5xZ`S@NK+rR%IF|L*0+jbhKjl2D=VgMp$*PbxMC3-dN& zKsR#7tazWWpqkX)k~f`k$b){+Ic&Hh_pZh^-&PyKEZ)YM4Bz6goke6+2vG3e)0P@W zN*}VPYSoR8Ko$^R|DXT<-_d8^hVFZg$8;Z+qsgNH1|nYx*m`>R{)2>{z}t4zs8RC9 zsL@<7kWG*{k`9~TA^f8>XGClepg-LPdFwR`_=uI~7N@7<(e(=mxYq2)9t~i&Kq4n` zFo+^V+75f%#o78qw)f|Eufys3_@3gaY4^;j2s@4zo_Pd|yhn|sn z>6S1_lSjF_y3&gQslX2&I!rSVlwZAhlbf5Tww8F5Q*3)m`fRd?!66}TibsF{st&CF_UpebcRs-s zE+<{PLE4|SVssC1(Sb%K*+e>f{`}CPLx0bw>i>CMwXvU1bEl?UhE1GD&f@)Q-mKZ| z7*Ct9N5$OY^eiAjgP>xh`P<}nIyym~j*>ixiJHMc#W;OXOedtH6Nf{T+hA|Iw)#<5oqKM96!NR3l3z9sHgkQZWyExT&WBkU1a5gB8~Jga;`^N@QF9*&*lTphpPEP?q@ND9) zqibMjT$-I;dH*IEi2zixWTxIu8e)5>7!R+WNARX&5^4GO?#i>?u#K$nddsRp{Jduj zts^hQDHs*do98aw2FQ9ug`Yp5lVB6q#R(nIxN(S#!Yd!4W8g)*|KaC^qk_p>?H5}1 z@Q-F1Nf}|J-oB%hRx#dx_z1u#H4}!?d|TYy+%#9q!NXEp3E>q@umE)f2=kgm6B~^5 z_kej6a3Xqx>>yJsZ|H0+A7apbDA=Uio)F z{w@6TwWeI=fi4_5auneqKYsp#1c5bNGN+n{Jjpd4KNSLd%^#t_pMPD_bUYK^!M3ei zt(=;ym$9qm7AFHh0fFa;p>rI=tlmYb2Dw^IgIpo@*#WyW4t`9<+d;*+xM#D26E9*U zDZbjdU9i~P-QCq*b{ITh!T{Q>;&Y)A(^_7#h(~H*E37uG*eMO)qTFc&B4gIMcW=J` zf_v?bd!M8CvQ!KrYWvMxqdAGNbc<{R(cei)Nos3Gtv+JN5QLu(AD+U#5j2{gN~ud} z4%P(A=^10#bR%c6PgRtn`oc8;8 zkc-zowve^ND7d(|D8A`Yf!^5(tmOwd{WVMS1O0q>;m z*ni+4R8IDd;DSZCgjpaIc>DeXXQ(*HJA?|tQsX3GziPR~$xTtHdVJ5389Kz#Vuuas zyy;}fj>)VW+*HFS|N^5|=XU?Avw`bkxjxBRKans$SN*~}a{NsE^)^Yi1v znV}^JV#80LJ$wDeO)=;XDku9!Fs#$;!YmUC95{4{bDs(nPV(+4e{IDYMs9I(FBBY~ zXB@**1i89eM1)+3;+69_4of)TzzK%M;C6r2&iGtAg1{D zZ0q=c{=E4Q9z6y=m1r^N!AM`dW-ZOT%rZ>@P9R)NCFIL69|gg|$SqFa=+)DQ+p?z4^a^{=>>2ckl{huub<7Sq8dw%q8&$Ujh~6(9>^md?pO} zs0Qb5XFR)js%Ouhb?02;C?+QM|Z+dhhvL^4?zVIAY-N%$C$K;BeJL9Xupd9q1ZF__U4ghY-hAnzd%TGG=q$P!`{ zEdBccgo-_|^^=D#932@7hbq}0%-o#1^Pu@V3Y|=aT2aozlQ-UPIPc(ZLc}4 z$cWrqm3{I3j8m#17@CBI-se4O0T{ccSqhUY;s0uf2oK-Bqf{;EuXE?l^kR^gLqbC( z48%N?Q{d+9JAjdtQ%|i1wxqG+#G`B{8SVhciEuUWGyBMf&G z*%bYZaFlXnc!K6Qn?eIPJXAftTQdv){-%-+V5KH%loOkfsVQ>J&Q}FgF&B=gcjN(~VC4fOz=GFp({Ep25DBsbw3t1OB(`HWN z7$@{ZfWr__FW9qoE|@$&(L$CDqtL2FbKnrl=>RvXv60@YT!3NvgWXZ z{$M+kcP^>ffAAp9&CD``0;f)&(JMGWZOkUXAW7dv4Z3R82j3Zv2qq<*4U2%Fm+Wuyd$mz>e)OuQ%ZQ8Fv$IThTJ1FdeZ{lk*F@M0KToR$xjK%-Ns_0i&ge9czaO)u^%TJL z0oY2!!2kL4*X2WH5|3YtJJ%K{?WYG7V`8+AACHbfaR(${pqHguxkbB9p=FN*Hd|5Y zzj$}R(gTiRxj}2rc_oa-c)fgl+k1Gb4G(*0p1Io{Gb9J!C9L#5fFi{in>{-VC{ka( z|I?9a)&Z3m&;bbFKo&o039yQq?%9CSmGBeuP?G|;@80X(n+pg|alw0ZZ72U+RAWk| zxns_itucU(E`VI^-uUAO;0mNbF-Y@WUm2a$9<$NcBVRD^VZ^z3eEs6)nZxCeoM>Tv zRFky?z;p3h;D-ziX1)Gu=i*{xNpI{z-|4H6@ESSkLbu&^0Oy1vV;MVF{J{2#9@Z^Z z*{`gnOOKxE^FqrWIABPQzl9()!=f>F*hkv4cOTZwrc>8^=9RH$3WikCD_d>S`Rg@p z?zwq+a;{?5Xj0(KyZ2BV+4IOai-@l9{@s=gXS&>vkAj2Eku~$>>_xK%y2;14ujNls zj~Sgb$J}Teh*pg6g7|*_>c!ro*=kQZJ#qkJ&5%>=Ten11;PhBuq+8Pa7acj|M0MI| zPU}XyZf<@HN*%#DcR%-;z1k8`Ed^n(oxBjyd|r$9b@Y#E-J?${*IsRUd!g)>HrrCL z-?jX*q8(Yj`LCTwH(;Yf@Noip9!aUD_>3w8(jgh#z?AV5wvWL*7ze1LVERdp8uv zk5AlnlZVPLF>CBc0ob7`?+eobuY=RuR@5&X+ zzkaLHJ(n$C!C0B}DZi4l63%AxL;u3PUJ<|Z1ceT9!mLj=e`I-w$mnDllZ6??K6Y98 z&Z-Yz#%w+*##%yvHt(R}3X9JG#_aQ-N=!_oXJ1~1^#rK^6*-Jq$w`6JXU^&h<&exm zw+?LzlIsL*?JLT9bnSv}+efM&TxXG@6yCh@kwe8evUZXEc%#{~0tKp*I$?(pGjikP ze$LdfJn5ORgd|y^HF?5>u^A5^+yk%}SsTDuL!g#qH7XuDMfSGD6$ zn;g31uB|$6K>Z+ZtXIr%&|%Eju@9d-o4@CLclctTTyF%20CKgXgvK_fp9R@V zVG~ziYo<%B-6((*T1cdYS-`*B=jcF*N#HYWfZ@wtdgY4vm?3+%tVZ~`xB#lX>1u*R zGRBNmWDAnYW-VHZIbjJCvq=F4U++otEk3?Ai&D~^e&lNAi%O6_Xi52@x#%>+3 zWS=D@N53e^q(~0wEaA%QK&uw+Rmk**6&s(BAn9Ckh>UeKdojz_ zPyk_ov2k${3UeOL8tMZqTyPizP`7Z$efP3bapaIA$JQ@4<%L5jfTT{Fmj3wu9d;$8 zP|f9jM-*-*nyz=?dm>@)Yif-75KjOR>Hq|A3%$h@3C46%>kuU^2 z0Y0;XH%M8f-djLz30`-R6`AO8aiIMO6_q~Imsq^LGcq#vpSc*n?zDXT0qg#1)|?gG z2S4iCd?@PcLG27Ya@VX~i{wqCH57Hum>AO7EZC3&$Zxfyw6r@PB(*p-2m?fDFh9S7mHg_FUBEn4 z9QOBbe;?mas8u;Jqj`;NA@b`laFvE2&i5%1((1EiIgb z{Pm16K(~#IjKs$$7>=Y{wZrbirYZ6?{z_r%K5a^!FW%5d2oe4s}X-v_8pISj-A@Pm?CqW>g z=6cw=ZM!1RF)M9C0T?^@QvqW3NBDU#UUPB^cz4iB{{E~Qn2B#)eDRX@4X6N7XzcsE z-k%XV9W*;wj&Ksiv(8-UJ9oXWe?Z#Iydmq) zv&ZR{I*XohdD)nv5fvSM;bLtHHe}YAIB6234?EQ(mWsJOWfSSZ?qvE5?R1UeN(k=j z!g$%mQ@a*TdHw9M+8wbmf*tjSsA6EJy)1W(0XJh!iaDSGEJyFEo*x00myJ@#B8sO~ z3+)U|STI(P4$VH6f}H#@M_)3ogKzMPu&V zZ0t{pYy?uEaLE!8#!wST1ewIun2%X+Lkb|KW8lDn9Mg?JV=P{p@iz&78vO$0Ae94#UOPHtIds}EhpG1#dR`AHG{-axTU5dU)P z%wao8>M_B6c-9Qsj1M26IXgLtzF|rknh3k#S2x=9vGC+A4cU4NiU17VCQq62>dhOG zhroRQ4zmm*-N`2)lJ^M`kgAt4ML zDV8+(hO;%mS2{e653kC1wt?}C2l4fgocm5&$>4hkaQ2zG9D7ib+jxaVSz~|*Tz1$iDiOgQKA9z&8#|2Q)ypZ!JM75e z5p>R`tx73+bdjv z-IM%zjhxQ8CnM*pg6CE0WTC^zgy6LrwqyC_^o&lq;Re;4J@9~ zfxRXD*JNnoP%&r*(xnS4^ATC4D0J`{A_+zVWAsW)r+X92Uj9L_h8ttui1PNHS|E5{ zVW(?CKC~EP{fJi~IY{W18$8=<*4)Kb*LLuZpb0K1a~i=RAl7f#2-7OG3?v5!+Nykl z#2SQ{vA-FHL`Ks5$1FR50*ea@CG)O$I4-n5qQl?{#TXI{9A~zdG&mJQ#8ias*hy3j znBWht$mS;_M23UYR{_9L!jS12zFsgZnr>7^+R;svk`%GOfa!7=# zd5_P9%|gzRyoQbl*?i3aBgGz+Z~it*h>#D$D>&TRydD*mev2z$nl~_#dbyK_Ar=|dCDFXIB@8Y;#^27i?fP%$PULz5ASQNu!z)<^Lc^2%nd+xo3K?>lD=0F-F{Q&aZ#@tIzvcUwke(Lp6A z;b&FTkJVs?fy1O z)Jf$c8^;pptWa3ktjRoUa|%G{lSyY35Zs}5Yp59K%GWwzJKctS515LuydYfq@r^(E zH-c<907+NS7XUtgwsdtvA!B~LS93mF1M)O2LWZUgZT_IlHK^JS9Xc?UD1EA3r!LfW zwMAqU0_QjIl^zPutI;!SJg*Sbk-OPIC*%^SIhN705KkxBOd}0+6^uzhUAGV$v-4=E z0Rj-}BYf}tg^O@@+Ol<9P*4!5XB0H;;6TAu<4b0}{U`vr&!hWCMnx%(0cLRnsD=`r z>EJ_b0U-ksV%VL*QA)rB-oEnbt;-FLjGjF@(u`WI40XdYh}WZr!9Z{do;f^gRUC;z zCLlwRch#O(%Pf8Y;@GT==?LHXSO`UrO$h>+q1E62u;at~OARE-`u^!2e2R}TfC@1$ zY{*J6eDCb}^E}DH$ueNu!EyHE=P!zU$*iD_xs=e~09?(^iVE}0g!08R;+gKD# z*h7PIfd_FC6=Qe7^jA+GUOKRYoe{~wQkC;|{5Ej~22S{btN>7MSzT>K&z{Wb(MZ4gaTXTD1Yio(&m=35FFur>s6y0j;IR;-H*uEVW7Mo}* zn$!p@d(_&Eb8s-Jy zAuu9yvKMD)21pPv=bt}+A#dIBjZ5l%NJ!Ov@6zc8M@E`%FjaK#*jDj%mQ>88dz}`{y@|DAwqQuL zlS}Z{Te_HJbxNiMbv&;|8IS3REV~asE`Y8B%rJD@ZCxXgHx>fhGqSwmQbY91L3wYS zHT^T!GuQ%>t|E3@K5?*Il<(XH6Gm`wb-s0Z3uX=01KSQhD>GBV$IL@VQebIOF=JJb zQ`@$0$9BrLEFIb3MD_(fsViEomg!mTAhdh&v^US6fSAr;#eg#{5X<4R1v2VNqE|~0 z4(}#MHbxL%`_`*AwdSAB!2;+97~Ie@F77KkGz1~D=%NYb|jND z?SAfR+fZ`nTHOh0H^b9uP*I$v8?j>6H9Z)=(H7+L1$le8EMVdIML|~!NC2Y7_@OAKpOE43VZiNE0gW0Q%X$PtMo&=Bjo#1I) z4&cYFVehrrypTQ{E?Lu+-fP3kA9rx`plL{#!PS9YUWaHF3w&$wCE)8TgS?ltQ#yp! znV6V}9&nOv(ZHVAtJgJ9hYn_y=IsatzW?)+4Jj$EmKM#M0l7|%d(icWRzuvJft(bO z6aZ6#rI_wbM>)+OaIXYY5%}#64w{w>6}r;JJzF5Zs{PHjG$s{;e$uFctjI5#)pYLM zIl#|vbd((KEMkE3dA^ZD38s_hgJ-;oIbA<@fY(LU+W zt1&Bg))+*9m%g~dKqur97(x6e=6d@G92j6($R0&bSyia01b_)o4_!l(=((fI_yCXt zp+jfnjKZL)P0G+O#4@(L*z9Q0VvUGn!r9D%T`2%flU@~SWf6^v<`|Ol+6gg;J}8?v zUQ*924dW_>ahS*fM5Nq7?5A9=YRh27K3?H`J^;EoreMqv<=jawyn6V z8{jsn!2?6A2@xk;rn&%I2|pq(R<%oXdX2_WQHgZkUcfe||KPthX}$qaDVQ+wk3Wn~ z9A48|QU=V{Je*mv4K~yK=d4M~7zg(N!6q_itzt6+m2kWAo4-RMIu-lrHFkj-6Tl>T zczDocvu)Yc)m81*s7DCEm%qQ+l^L3yb5daBNEY-lnM7=2t8q3&93Yhj01Sao2V-@S00U@F$Tih+H(7Y}cP@~~n6w|wQOU^SvOn)*0CfDtSt%?M(>EJ&A2 z6$a2bY&d|yEz!fIHwuXeC_13XLfMsb&cDeo*&sR$3rs$9rLnCo@h$;{d&gwv!b1QZ zBDljEcVBwgLNxlwX+E=8(UofDK2ulx(X2Un>*)eS28n`^63`aM*u!L7G|c4SoGje| z&5D;Tr`LvBd9Yh2MMk%0Y38ld2e)ME0Z^)T2ZC+_8^n<{3;6NC=>cFz3;wIf{Unm8 z-c<}_ak_o>h?p$k?Tcqf9ZQe45tk3FUdY~yrdL$&-o0(XU~2n7%s4x#G<|oJv9Bd@ z76srrpbpizs9Jr-@z=YqJSHiGydvU)R-I96tXYrLv9VKgfdpIQdX$u56Nsvs#OVHk zLP#J-&M3iVA zLN@{O67ZljTPil#k)2+7{{|t;*Uum8*HLPJ@thB@Uy9>-S5*loTg72FzDgjX5Z?pj zdPW$9+AA-qS4-RjCJc+JxZ6YX6LuNx;q7_#`VH*2OK!wC#Dec19v8CdiW&=5tdHDV zwd~r*n~y6qenWfW7Q#o>|4K*00Hr3!Ql2o79+ zjMOssE(FI*Ms^-GE(Gp<>-HUS0M9Bb;SS2aHGLMj z{|3#|floE_?A!Yve(tW=1JNdq2XG~Z!?Xj64`pP{yZ`Xfx^?Soyj7!z>6Kz~DImm; zkDevM^CANXSF}h)W%pszXv)xKBxLtg#GF@~5<~UuJQ_&L_2w-r-?X>@%zqtB0r<1g zOGT|buvd5FyfeV|p_^PivJaN>}N|?0o$CArG8Zm?95z0wg>iZaXbLgEuS}` z9@)4fZw*~^_8&fSl>UUk zNM2OEM7NTAF%E&_+H1^wO}C;EM_-?Q@$L1ychja%uNfW^h0iEfivf`{bGiniA#z&& znRDlW(KKSjh?)-5XIqJ0TLaHa5~GL5@W>zp&Uf^WQ6o{;AtSufvp8qOa5GIKIFLys z>&-lL1`0q&R$DoAJ+?PD%pRqSM*#^6h7Y)*UaZ(;z{3jn+E*-Ko6}UPM->CU!SEIX zlN84Tt_5k>L{tn|uOJ%42ud;?5S4k(cJ}<+=!?UvH=!Kqu zd;uVyq6g-+>ow}`0d9(W#v0-f)srH;08>K72RdTk1wv17~Lx>i3j#7Xw&sJy;X#4^A_$YGc3va zfNG5i4)%OS$HYj!4anLv3-wC@I47{@j=b`t0;I{H8A4>|!pX0nJwh^ZWBDU+)zh1o zXv);Dih-T{x0O%Hcwo*z2t4EQ8`CMo?29<_=&tJag=H}J%!_hMl z9;lbG3%2R}Z8-(SZ{NLt`n)n@%$VN-D9ReoD-1&d&nt8rKZ<9Bp1C_(bnHsrYr4>~ zvumHk@s{cs!`cV8PYHfm^sOajFePj}(i3f#or(g9iAjQTkmG-KGqtLMpJ@bQD;S%Z{Cp0q&}pzZ;8kvu*M zkeF}-kPm+8aNlknRPpX4D@s@RMp|0hm8;k2F_7}*D_7;|etPuaN>f`qq-M=r9@Dv{Y3wNUAheXc9CBKicpA>Wthw_wHla0137hdMkNcSm`}U zWBx<9=32&P15lS{=UyojG0!2{HSlBfXF-O-fl<=r}%!^Ty9)|o= z^tQ~$x36|Bn#z8PMspUMZ;+3);Tr)mAP8eqZrYFmst%O0b%lK@HeY!}HeAaP%xqoJJ&7Z{snTJTF~n-l}yEPanDzm&3{VUDb2)_;`g8#)x1> z&G85Iabc_<$tgxAIG8XH#eh8`G6uSE_1g9L_;@xGL-07~)+;?KnA-7I)3c#0e)!-I zn7wk%#?8o-jWO>(a4;m~HwJr9XuwhYF=Hx^?;sMLT8pun>`SIJz!{|#V_dc*&- zVh6Qqp$umv{~(d1go7{cg^NOlcf}tZrS!U8f%_o{kquZO9~Ej^cJ1DK(o)TBAHuPN z)|^Y6o_GDmO>yK$j~^$VR{{qfn;pLMDQV1KsLn7rU)enE?c6MdX|&Cdx8yObNl?xb;xHbAocCv z&e-c#@T33@ zSe!SPUNh{nn6?Q(ucc+>h%{GxL11gBf!&a>A+1B~4sF}M0~*STl_k1ha>X&Xbae-& zA6s^WZod;UZQ;HHhs3S;_a8pO-K%z7zW#pmwljFU+9|}3`{rzt!t;`Tef|8^A=v{r zT<{sij;5Fu7kaCrN}TP1vY9Kc04fAiVMK3bWREchlD7uF-fIc=XM8IWPf-g zBz%AQXGPDn5`jcFRL!V{GyM(8z$%|$!Te)_3Q_SK1yJP$QpKZ>7E$R4) zlZx|YRys2U;J1LeW4txw)R>WJ2+GjKTNJl|L~7v6*71%~xZ}-J2LK@@nGt+)8^}ed zixke&7(yTWaw0kk9G;JFD8$a8vEk98=iKR&WU25MdiLxk@tgt7lmQh3K^Cwnu>Cfn z*Tlxgvf~9*N8YSi`~H5&({bv|8M1f)ut0)41m+9pD;TLOUdVYnqXyWyaLPp%S_bD8LIY47UMSJCT$aU+|bVw*DxmnmLPHU^dZ1#gEGa=oX$b0zETW-9?9?|hX8&bK0Ianj?(!H7Sz#(g2U9dk7#aBm#eYOw_8FYG@lp9 zhvJ1H+wbQTQSkHe162nYyZOL_Sunl;Wt0r^6A0}rO!jHhl1pP%TwnEdf?L>)G zZR0V>JuK17Tc6nF8H0f~pp4>Ni8w$By5Xxr&_?_|KPJRl)@$R3(1~L+YAl->Iqdm5v5KeUH3Sh_tm20HG za%cd9Z%9tzyHpoz8aZ+#JaWnEQY+lPdvDkRV3?(UArL^u?|PndW2ta%G)AAP5-^efoI@Vw%AeA~7G zF&U;(%ra0Z=$SIh4U__J-o5Ai;_BY9O|c9lM2>Av=-_x2LxgHa353^cj-!PJgI!*%$kNpfwAMpbFSM7VSNezlw+IIPksNdQ}{q7jU7-Bq1x#&kTSMt z96T5YJTK!G*quXU&GWn0cg)q7Aw|+B9N~~q1Hmkhu3y+ZGg)#LhyA*B;9NO8&BW+G zIcJ+SEA#n_Dl(gD1sGU&?%EAYtGoxz8rVMO&0hdW5WukS*|%@Z*l}!oF3;oGstxoP zm+15XSsNiNU>WD}ywZGLn>WD5TI<%zuvef1zDv)Xm4XPV&7)c0ASiJ8>NU<4?$)U- z)D1;!bMmB)S25rngn&UZ0J`A#!N^&wgKLl&>+OqY*88f#u>t+yrxq_iE80_Y*&qUr z!A#_rOEiw*!-oUFoSsm%GA!ehr?8?P7<>}x1#jKCOZSXTu#KBG1JH2fM{A?v>$)UwvBMB@v>R-Kn1CF6<+eZ`}FkwJ(fQ5pdP_;7RHNwKe4DdsE zCfU|b+(gz&ef zP=H1NyTke^@m4JJ^Hk6 z+YVv{&kMUS{!qXn{-AR~G{7?oq6d-@?x{U{_CzP(y5j9{-?i)3ZP>Vp(~hq>NCz}9 zMFwMWHic98?&1_22(6M3#K9^?S?-vsht*L7)%YZm!92Kf7CB6kx>94w473-dygJ48j6pPeGCIz=z{B}AuJ2PtKL2*-BKVEfvq#}Pfd>3 zm>NJMD9uhcMogLxa993w-&Vj>(v@oEnNb5ZQ}``gzJkn)SlC@rp=+xO=$dN2{RrPH zT(U$GzQ@BGky{qbSu!xF7<>2a4-R%vE>y`l$BiEk1TCbCHDn)xHA< zBy=_p8zlue0Y)HPL>L((zDa5RhzB&V@xF3YFreDMf2)yJa{52Ic7Z4NoEj%=ko9T) z47&sW6Cno^GBff|N^cj9=mvN9o{I6muyN=zj$;D^kp7anHU?LvmRlBnQ^*PBFlI~N z2+&x^Pn@vEj!*aI$TDp7kPB)bnK1pB$b^zb+lUY0ucEdRB=zmuw%s&OceXn?JHcPq zz=tuSLI_N&oc@SngX0iClQdfr3LwH|>+CdL){t?beI<)Qez(;FYdX+8?2{VCOZrLM8j~X+hV*my;9WrbYK?~?x7y$B&kopEufGvix z+34D>+ZCBMr?wc(`o=*4-~!2+fMU&n?i~s9(Ja8w07P!KfmN}SZCNAeWOH&N16T>SeTg?^~3jo$nQU7i`}re4HRvwBn*tti7CN_qf6Aadn8V0V# zB?Li>!0;ODr@pQlG0Bx0j z!(8Nk*sDLabs0%csz`Yt6C&l4!?>kAZUp=;5T|_J1bcLDk3RF`2W#dBA3tG&;(W;~ zVNd{{k*p~8A-1-l$Y}CR?D+tPO3?)ip1O+*3N(9=H-Kg_bLK2Wsmo9C)DQ$M>`KAo z*RY<#b1!?eL0(-v0%La4Gsb8_*2~v`S<`4J0EbCzPBK;qeJZ4%t0IHK_cIaz304dl zbQQY>aR-P;W)Kr9#`vHco#DfNfAJh7xv&x;iv5^2KRd{+BR%!NO*BAkCn#<#KWFmLqEy>9u+zcLV&O*mQn+ z>oRgW(6`f7#;zAEzk2i7>biwyW5`qB#~$CbRI{a1H5e1ZLckVRMQK?Xd-@d5!bg{} zRW4a?;-QO+3*zh~tP;Ha-h+pVw}5zpG%@gn9~Tz~pV-;6vn2Q8JR}HOu;Z^;yH;=7 zDbBmtuNg?XqqMABch#(0h-W`^q&5M)BJs`2CPD$=@c8@tE55Mu%C7BN7bFXr{;;!j za?7%7$131ktBd0SNfmL;|NLY{b;0LWaFj9><$=LKzrbEl{o2hTPeGij$9K168qbTQ zi?Ft8jD5(?9oovLp00_EijqKc@V_i@tOEa`d($k#L=Kb>kzs4P+7{qn0A|a^ zK>@hWF&2#ErS|RBWp}}JXbNgbcWUel;eN>103dEQ(cnh4ajJ0@WB1}|7@lE?qc(W{ zdQqMN!u`^L9WZC`U+5$)zSZc%+cmht>xJbzeo&QjP z898wPh*FZdmK@@vR5QOGd!p&Hh#zOLEXl3KL&Tc{$B9Iv!-&A2%a1T{_~K$es1dgkv)bmYVP1{ywsH zA)6-7c@}Ay-c&w=wL+0mlS=qaRlSrV0kS7o^DNx{hYd?6x8N)Q#$-onDU1jRi_pby zu|E%QSUBZEY8XJHf?E`ARe=YWVe7fBVcV*)C@!&?2D`SKo4Xpdu?Y!{(uSW0n#;g! z&~Pb`m!Ge;kmU6d1G+JIAkfQ^##)mUmG^JrE1l5~;}i@lFt6-dG?meYaSBFrI9XZa znhQ(K(RGWyd=M-(FCN}DtSd1F>3~xp&6muILpZv&4PcoaiNgWOL|O=FNZ zG%QTbKh4Pe^d_%?1 zYhEFv1$ZoSr;tzzm@|r`9w8 zbYa}kp^^orc?emCJuc07z|_>#%U7=A1q$#Lxkm z%GkAruYy7Zaf#i$q@fTS~hP6ByGa_ z;Dvkh^g*6g_u|1V#pKkaE46~?xclPK9mpoNHtc%DP#jp1jegk87-t1b&Bf!Qr3OHY zW%=V7jh*%sl&srl1^0WfYfY#qZ0tD3iw3q=fb&b1ndTv)&ya|mqh1u3nB`Na&#(=bDJiKo-+pY+ zoX{M+E(+}2y<77=B@H^XX*oZ^0vFS>rK=Fit$8D)a6Pl5#DI!X?YLX;@$IW~WowLm z*u!WJCo5}UJ*q7=8)1kM9~0?6VAOD0xxg405GJvuhNr-1^I*?`WHuEG_==#7znW8Q zWdm4gfoIMDK~fwfDq)rD(W3_m35298UbgJh=P$rl1TZg{wl20D6BB#%*fIJO2!3Bk z*b3D{S3hE7JW+Obj$Q~~12-a(I(v z23vOKQ`nt@Z!jJNNp(ZK2T5jAa)_O)dWi^zZw9OelELsCV!+Tlkg5;L1)lN#!$*28 z=J4-bw|>0@Y6<<|yPfc4{sLkEOUud~8Ttp=Bv|}Ee}NVW?S`@U2$#7vYuB++i%n)| zQh<{JcxABmcwSPm4IqZt9v4tCs&#|_z3ddZt>McGE{zC5V}4c$`n!AKn2-feCrlP; zFR|1>cr{!!MaVu_l;H6Nzpprp2C6M4cg4yQ&NX9?W_$PV@7q^9$A^5OVv9aICkIIY zp>gnYc(j~5H(Qc177Kf={!Aa}3SawxC^4Ys=o+x3F~0X8E+H>aU}RH5T656n-G`6% zm^HJ{CQAXhHEMeA({C$ua5Y+0J-!EP0%5|Og_88pi+eVM#ofDf+F0g3C?=3N=Xb3K zggfU=CCwz3nx8*^39`?S1z*y$;}0=xBz}cC25}{z3_KY$L+lWkpf;xttA{VaH;&QFwx<9WfA;)& zytZt4fqgtQFijW^Tfj~2MrY2REbF}-U(|@9c>k&jk%NYn0_2u@|LO&K5MeMU_Cfd2I~XTvk3bTH z-k;c9EQ;?b5d+}-MmVZs0eO_1aQoup=Pw0?OEf*c6rTu{aMQ)k70}mdi}{L`D-rZp zJJmhLt8rdDQ&U=1;FIWB>2 zg3D=2e*N?jsmzV_X1}Wd@W_ca3`YWllaSbXcuH%gTk6=pog;*vN`1$MCpL@3&@N^Pm zDE|KZ2`Tf8@oMnZt4DTW05rLfsT@wK#yYgqRfsf!lXF?_7@q!Nzo6q{vSJ3cZPkK3 zmF?QJzI5p_O$6sG!}F(N?_OhmR)hjzs@PBhc)J*l0;NN5f^U57gDoQl5J-lwq^qeR zYW0CZp%Ia>-abBR4J7r@lAs1cV!HR#@MOULSXp_wW1?)FbA_0rs$U9VS2;K&guH8- z1#EvLSloHo8rr~efmk^_AdKd~t>wImG^>uG5YVpf{dJ1-^P5~N763(cV$)Jc9Gb{* z`ZA1;CF$Q*huCmCwxJODaE&Fa%8d4GrztYpwm}v=nhwrihS3?G7zO}I=w*yO9AJhF z95_%HL?TnxUylpREz2^KAXO6JZ zQvjb*aAKriG|h74!0yFNXID5@Az>d#hqyUFTj&N7O!F7ft_&N^!OsC>_2&5#$@IN` z_Sk^amx6S#owpUX>=3a6moQ`Im1#o;0I8TgW#F9fe~^%(p&Wkx`uDc&+o5_e%)#u( zCub4h0P}~Nn;V?3hy_IQ%^w^Rip?nOrs9KY(c;CrLjTY>CN3#;)I>l307Aw(Eb zieLi@Ub19tY6XlrHZHDg=T3~Lp-h=M&Za;C?2f_wJ;Qm#|P~3!_8W<)9jOG{;ZhHUn8R^9R``_h5<<>wNiVwSHLNqi2!{&IJ zVq(M!7!+KHjYX_X4DY9D%Yc^=Hfp5Qs5T8ZtV-B?fy9VFKg9*9w-N?)Fm1?F{2|!{ zKKNmPNJtv7Yp(#ta`*m&`1p95)oYeR!=p0BXQq#zMRuhin=o4F2)I%E_U%!?A0sr6 zegud}fDOVk`9+nWt(!lS0!~N)xOrn+m0q`+WiR(mONZAA4w%T1I`;1`pYe3Y%n;ay zx>b#Kg?%m2kCf)IJmpmxVSnx0hCL_=g`u+uc>tOEk>*)QoP#T}ZKA4(5i1xcQsNr( zK*ng11iXco#}vZB>LmbNLVw#Ho;Z0bH7(74TR7TU(xg(EJL81j53_KYj1LCLv0JwHSj3yJN8&tdHIRnlIKkV`m9K?VqK9pyEJUo#6LCKv91Y8$B=4Thwesa5 z&(XdE2jm24G&N73KL>+N9zL8OmQ%ilb=5!xp#Pw-=(=33asU4Pk*OB)-Q0$1G>fz8 zJO~7bUX7zm`!;*GZxBfYrVZ3ty}VSAI4=ZbA;_K5ym5LjNBbqo-nr5J4z4eh%oIN6 zkFGB;&>?*Z@U`xoKW3ABf&f23+7WS(C>S&GBWG4%9~U+LL+Y`C-*9ail6llTglFv8 zbLZjm1mIchI1wT^Z2_VO$_qld;SFU*TWHR&*}%yu0M!^qJzcLGcFs%7%B~%&(EBOA zB{LPa4-f=lAP7Bx#zC`do^sJ}pLuZu<_zhL-?H(sG;J&I-y*RLJYC7#h&Gx>*Dn}@ zJ)t`!5i8;dVfxV<^CI@PFv%PGo#yQHaC5tHOF+JDf76Cx0!CD9YtVu3M zHo&geu@ff%|Jwwo#(d;POaUzEkkC-QuTp3~SIyM1gptCMesI-%F@^$oxdt|BuqCxH zVbI*jKBCCLzl9@1#Yw?7*MSu|#_Y@D2*J|foeR|omKtmN5qeAW7b8~0u|Yn<$(GPT zS0O9LvrD_yn)8B9c=Pj>yq;LhBSwzIhm9uP9Mb@f?qqCc!K6TAq5$?+;qRySJ?i7q zK0n?|lM^mV9Go55=hd^v2K{nV{R)ySIZ=Iyybudz1(}$Fhu1EyNVm%RAnusK8y2dN z=CiOH6eM|_E?-X;2BOgs(9OO??d(W@4^4L|%omu_+xH*H9nFGB0iKvaXeID;;#~7B zTefP`wq2(#EJe}aBtW>r z0&LvCb{XB9IL;LlhayT*TqLibJu(J|QjqN9+pCL&&WeY_h9v`(qYlr67H?k!RtSHdoM55O zsL72TxG87clHq>z9d(rjDBXjl0P;n8rkx8X>$+Cb7-DOFoafxg-s@(M`tq^nvmco7 z1{}lCGvdCxa_maMnI|VV7hC!bWnDRVoIFxv;2@tT&tDd;+$>6jNi*hWOvoIWF?IZu zY(*I%uQa8GgQwNJozqg_$gyLHPNIbZPq|~8mXpH!f$xEfE{GpAx7uJ04iDL(7#=9$ zy^=$T2}2?~@?!f#DoHNkJQSgHzkGZT`ro~9+*n+pc(39VzeNeyeCsO<{sS#?L7=NDnV8ZAp5fk(w1PW=aw*V^x zpmae%go+^Xhu+KS_65T%@czZX7NrGYuS}ejAK$<4s!n@Bx8y0$j`8f-nahI|XfOy{ zaKIX9(6```8rY%IB_kw_r_5ZCoH9c43dj#lsnMVpk~w%?6o8F2F)>O07HHPM(h)PD zYd+Kgofe0s$=K9VFkujp0TaoRVY@z%2n0p5MJ@3^q{gYALn(wmEMC z*_C?r^wH{ZQ9Lq&ZnI>#Z`8oR7XlaNfvBfbJ}zoJ3wljJoD%D88b9r2UBV^ zomFQ(DJX!=mX#%|j6o&1cWyT;+LLCFj54-*V8WO?q}HpJND5MzKXf3PF*;E@MWA%? zL@;DnllZkb)pr3*Es@olRCK@NJ68YtSKO8Q_tcIOHo&9e@TNrccWJNfTMO2NSTTj0`qWTVjU~FjCuN2 zn+90&0>*TBw8}2jmLLM^NJ-wOcQpt<2uR;Cca(vCsxR>s{D-4z#)(jor+06N%i!6A z+a=@m0ji+G+@XUl?wvUCDG*JARHRL6)mizlc9j|%w^pp%v=bXvrZwEkX)-Tw#1ufj z&e5aO<#K_i20;e^T93;v_Rq5iHkS1a?&VLsV^9k?YO%sPuq%F`>SF9{SI;}>$y6o|2 z_LCaZG8avoy;!tym{P+Yb7%J1m?&`Y@Zp|4d+|sLc^k-%Ap^RBVT!Dk_REz^ikh0p z-V5XPF=Vmx;uN2~%jRNxO(Z@dzAFl6aI$nsGhqA@027P~9>3@J3EM>9zkffyYh!-G zU?LYS&sL2Opsxw#4r}c-WYhki(wEeo}+BiJMZxVH0ZJsNqro8J(t1 zn`Rj52T4m~2ldE~9zX+wC`t`{+XJGI!GRS|!S1jyVerL+WrV`OzXiIKVq)>#TT8)QiW0|J9vKX9`D!=0x}7SAq(YeE?e9xos;V5!eN&7|U0zG{Z5-JnAi& zQbRAr%=RV)>`DP-r3?xVX7fG9*_O?ldAoHO7wD!aFHk8MzV)ZZfbAnUX26ZJN5yAH zCX1u%7O_Qx+S$cPUfFd4Om-H{MTgHH-dQs<4I_lF7pG|+>J^qs|FfgC)YXbSYcK@&>e43J(k<(Edsp|JpVdU@#WLU18Wx} znh!N_qgs|)o1IFnx4ihl5d*sMU`fd(EV5VIaI%_USDaE~Yw7+w_n*wpE#edtl4hpV zXo5@2d}J#rFm~K{Imgpm)2U6%us)q92lqr2c`=nMP>mbY_0^~&1A*oNSgMED|H9({ zW8-4QMgy?qVpntOdjGDRlu-5Lpq-B4yk` zBKpC;e^phMH&(5^T79)O1Q_f!A?@f;{Owz{0Q+4_(}#$MaJyxjTIMBq0TP7YctIXq zUNEJGm2VS|)EJ(UI(Oc3ei^0>r<0`e2EE$aDdNUFQ9ppI|w$eKq2~i3AZGfK@`>p@t+{+&#Lsvqrg)2o6(f zSot>bNDa@yzH&jJtHzWXR!)<7c@w07J){QVpD=uM@7NZm0e~U`c0<$@BrdxPQv;E< z-Nb{|xN~qNXzyv6WL@tm*(U{0Bc@wj#01d>g%R9-A8wAY)A@H1$dgQry3Z~Ss z@@?Xg8dl;^LB5z$!^&wgFK>bru&dOdxhrhS1G;yJ8sM7d(|vkqFOkC+jtqPIvhwkb zKlLVTtu|pOW3ac1=zkJM5ad$O!Mm%($}?H z2dk2bV$9)vJCE?~A$bE{Z2I$W5hMhpP5jgBp*!r$2Dw4|6F(R*rWudxAcBYe6K^Ku1R zZ;(f)f!*45Yu^gsz3lt)oP}=DyGxtl7FW^17&qd%%9I*bu2@rQSV=(ha+3mfq5zN7 zaB0^HTpBzx)w^4N*S4IH;5@9AvkkU{!2dh7Z3+1${#v(a)~e=b1G%6!jCQS>`}OQN zG02@3Ql`|f(^8alYf23XLCiyw0!~5!eyKq?=Zr9qxPdNxUD|T(@2hcSC$5JH#+RdOnHj?@ zZXMd%!j9lz;nJx?JJ0Uz69>5x&n~&7pleL2Ved65_HRlJ$I#ili%9{!6fi6`vZMPS zTvv!J6+eIdLW&BJug;F}NcVSxqY?J6V0UmZ|L4D5+g8m3y#`DllQubG04))C%BIxN zyT**QH>HL#x|vs*6tFi1j7bf|T)(b-in0Cp=O4t=DKc9~kPLsf=>A;?cW)1Sdi{zJ z_-G-TFTkVA&_S+Kh717yEl|@HhpkyTDWX4*crtyctX#UL)Uc9(=H(^@>_h>*QUlEP z-sN-RV362o!`uu_HY+xm749+GuSe{FuKv9`_UYONu2A-qBgnD`In~dlZJRdY{{~75h=*$iIF4 zDkiE>WUV}v@KBl@>^{o3N5UZ2h`ycS<2txU2M83mj;*`4YXz}F+-t>edswS~d)qcc z@Q7>s*6tl!V=D|-1@!6&yF3ip=nZ`;`abatiKmSzH5{{a9UwI_bC&uCg==b#NXY1z zM>g+bQlLRlfJbV8Kkr$Q|K;Nc@gb@kJ8Hvdmx%rFBcWm?Y z^fIM}UFXs4yzx1yK@*TJ_v+=5nwqwL!^Ve?pER;%W|PPH{PpkboSY6FI?zOOk}^J@F8(Q` zn>2qW1sW>_kQp3{e0J6x&q0H%eD8|?zrC|yv*P9g@V{vb#oE&1?(Xizp}4y(i@Uo+ zad&rjcNSl4acN8Yz1#Fl(~(SO?!C*h49`AoCX>lcPLgwSeDak0w{DDSRmCrkO?&Ml zq#Ei%KtZ~7@4jpIp70VY&ft-w$MWXQr-CT8mD8tB&+RL%VvKNJUor$vojJ>eEnoip z(K>Y5vu7L9xJ=q30Rd*zzJgJtbYGCqnJd?TxVRIiPJhXpcHM>z88T$>1-DPtc)`L& zU-C+Yb5BbU;L5so{ralas>R|o;jb3}$ELkcD&+k>7T^_qR;*ZY^_n$bAnUPb@4nB4 zWUx|j9EXn_O-raFoXZyofmd(d&X_qXfAp9OJ7OeOd9VNH;7fb7z;H&ys!D-KDM+qR ze0({yILrFK2NPD}wle&d*dT`3HLW%yJCz<*1q&8JkyN8*&F{X8lqCT#?c0AKZSP(&yUty@ z=%Fg!La)Ee@C{!7_<@oqD{uB6v*pPBL)M=%WzO<#hK%AbQ>ILrGiH$9pe6+(37Gu4 zy$$E?OIV$7j%f@6u*v1hm9y_>driiS8SB=qH-5sT-Fx>ZK7RK6<(rqU-(iUR;?OXra$lH`np<^RtD)h^VdM_l*5Bjw+i@w3-0m_D*; z`TsO?%8+7d(5Fp{Zhc0y>DaeU{pR@!6#eQe-4e^Srck$DJ#`{sIfOtehd|Pcm;L(p z$C6y##`ZFJta^=_iYY6mV7*X7EHq*c(td=88WM!AG z-S(|plJv~#l)+-HShecsh7CQ@qwGp86e?8c*ol*=d_x8v-tZA4)X6%Q2^3@5KYd%& zm-HfT=%jT^f1T8+o~4b+W1rT|WIv+NuxYyt8I1DFbNU`XeHM7);fEmvQW63PE(#Vb z=y<-=%7%>^A3J_Zk_JuT&b@~?WvJh3%7luFX`m;Q!=CbOKwSDeXudqT$8@MOrAq_N zPPljf!HAI~%|R_!0ihzA4o%OW@2e69X5rYasVg2=2S#HcNWNG9(MuOET`;7J`qsSM zr*%^c$>6bP_x?>PmC&!XT$j*&G?G$Wfy_JO8{IAbj)WmjQdHO8-gSE*OpJvlgwIHezr+-x*TGh8fVlg@t7F=ry$O zFFy~gU5EyGe=uSz2e?Ux3D7q4F9R;xqyMOCp4NFCWy(hG*H9x+?;Q9eEKqNnH@@)w(*;KMwa_xf0wy)Fg zNr*nWB(VzDZ{BX*x((|kp=wg-(X%HS6aBAzMsH7^K4UWLP8D{~4gHoDZ&j)>rd{2s-5N!* z^jjBB0YncTJsmJ)B7~z?mmd8aTA5t98ayvNrrw0iR3^GElNZ&O`XrnW+>a=G-DnV5j0#DDJi;2GlfifckZDNHxM(j;Rp>h_W4zlB`5Ij-bPi zivrXH%Oew3Yi7Ld#1`{n?dL1w;o`t0>Y%{{emE9R-GSt`Y_J6Fn+DZS3H z8Fw>0IMC^kJRMwwr|?t7vEtp|H7{%;Db1n`8$Qw#+Ok2hV#O|By>{)!P4(~2-FpOM z7XgY>&$UN05~5T!1c^d zBh(sH7+V)ie)aO@&CBP;x2>VRN^NCQoO_ZC;;WFI>P6DCdk-F9-BhVkB_e5~ds?z| z*;}nhO0y!PMvqaU8n}#@5&K@uv&)w+k24ysg7Jd}O`kDyJT6}pHQt1z-68i@t4v3NwJS*?0?LV2*w2sVow`^(qK98(Ja z;i+mey9lYq>d8Z%Bt9UEF{(84J(J~IZ>lkSj)w_E3d1w}xwHfUu))oQ1T048&0oN+ zuW8d}xpU`+BABb59S;}DYc5~8u40}jmaksBNmM1r-*v0}E<-xI8}E!>O>bX1%W5V) zd$MR~SMy{0Nm@26o?S~ZzABPEGwvJM8!wqLzDM1Ey;MdtudrwHhQRR0!s^nMt6jQw zEm^W;BoRp5md3LlIVX%suim|}CPns@GN-R+uU?)5qd_E8WBK?v)MvvQmG--xvSv!} zIW}&0DFdkRSH1)YJV<;*wjII{k(irMQG|i=+<^falqpj-Fq$&?5R&9KqZ25%M!_G1 z^Z4kNl}_#6@aLZ&|N85%>*r5#Irn>VQ?mVln)xf`|3U9QQ6b+CaeoWq`Zp*g9pq8y zZ8GC>Hfl6_%vh2IlV2}J zXVx%oVPL8ODIeD+VD`!ESv=T$AcoK{Mvw`+{SqL6h61w|(nBLdCUB7D494g&Pu{$a zSSX5>1REiemEZ9f%$9l0%rPI{y@6i*_2-}a*DSzqIweVf-`^s*77{kiG_e+|SJWZH z$eaOfZ(P0@7~n*Y+_7s{wQAJ_y{J>S?z#<|l3u(f8jNNzDf|lF2P-~g__y!ejqX|I zu$asxFxBw84b=99@_FYbO93fmi8cUGvW5d%U7fX7`fBg^A|{L(WFUJbN@J# zV`A8bSha!imHCH{o+P#K@=3Q3IA_kB>({S;^CD^Ckk0C1Ooe4EY`@Q-3%knOb`=!& zt2k9rTfdi^sr3&LD zpjK2)H)k8xaKVTjkGa+0 zP%vc3umEC{qPenmukxQDLaB;sAY~$^7JP&T)I@8vX!(aXDYIwIqGw4j-N0p1f9KwV z#*Le>qsXH%Fn-XDo43`kaM;ug>65=g2~xj70}@OS|b!EW8VbGk8h%9AG#JcUWTHTD}s0F4G(Z|DLt ztK!9r3!FOrJ$7cU7&)~r>_bJNn`z@Z~5wux2w#p_j5hBhme-NYQxGHe{>Y8U=d zr~`bR-&i;9R4F&sP?piEk5H3j9gSj9jGS%t)L{=F{9|br7~1DAUcn%iozSXP>mx^x z+xt0udAM(I3E`hxo0!)B_~VcL2Mmy#)-Muh-n@m$@C4PsXm-=w@$q$h z*g^T-La3;4CNe*OW5fgaopz3UuefUQLkA)Ym7L6T`J|tojnMG!Y8gpnH+vkag5sI zS^_!HhYG>(+Y)MZR=?KQFPw`UwkJ-VsadmT_3G8hdjb>Z*x|kdhfL7v>9gm=hGDOc zpD=-23MN>XOmj+qaKMO(0k|hhNu1z`&+=fferY&3S4o7l7I~EKjRDFLg3o<{w zZ(B^YWB3zYI&n~r6SD3J4Xg!Z`>^nZLjcwGij}LdY2n1_Ig8AhGsCK*6gzY7JZcW$ zcHz?HPMtg3iGsdn=+I%$U%pboUbR{^&rM4M0)RN8ohVjrSvW;t@5x;noIiRn@zK*> zz5004P{+aN{UJlU@>T^wj7Wo9x6MoE_)%+Ai5Xbs{NJlii=$grIka_cR6u&*;1TG> zxbYM9qQ$lAH#!2)Qb{5_u~+f*(Qh!`LQo19E(|q+loTymEN8A22n5waAt&+vqW4q-LDXA3c6DYV>G$6VLOjHo!=pRkUT{ zG`!~B;Nz=)$Ijiodi6#;<@uFisEy5Aw>E3mOx;eNWmww;cI)1cLT=i3wWY?;hHAsI*m{PJ`K9W;Ti36J9q6aS+bPo_`v3)#fJSCXHz;uy?*3J z{%nf3P&cx>UcPz*b4^cN`av#D|IYZ!yYk+qPXWrUTl6r7K?8NRn{_ z9NMs?#O<*tKrf2t$gIvbg79eSwOE?d=(kz+_v}CVP$?&^|rwz?;dWw=Pv( zVh%(jn82hCbsjyqC(hux!@DQ6t0{J1p6_)!FEMN)qBtJju<}cQ!1|3F3l}cpwt+#6 zX#F@-oGf`Zktqqt>_2$0Nt0w_7{C7rOQ?wmgh8*{cr5i(r%r$ACrX|n;ySct^}P5_ zH?LgMx8JdI4~l-vkjx+R<;>QwME3qQeWHarg~@_sLSNcf$Xz&lCasawS133tY^QKLpC-$Fi+#Cm2N)&rThoS-e+w#fm=0v7C^-_jsPRAXLz`1n&uzxe%ueGnHk_R}d2$W*?P=$C{!zKR9aSUS2lSvC%CSVl-Oxd+rj4ugmySRJd=3Cn2}0^IO7Zr)6o zS-B_G0{1sOGPq(no+IL5A3J_x^_sN=CUtD!S=qL2+dKFE5u!Rmn6TS0GB6_=ilz=& zly~ph7b6U2-tE1Fgi$Rjbgi7H7#ai*oNb?hwI;_;S)2b{Z)D%jV_N?mQ~l@CC-!VP zv|*`wCmh+l!huaIl3u(*q_cPb!MK6(CUJT*XUyc@^*vlXviF@^H_Rs+)0Sn+ zma~Gx=@~7XX1^hQVxvla7Sr4b6DM-#(R^ZmHE>}3t=o6tiz`;F$Xi5_=*=TxJqXA) zV&q7vTbVX}hSSWfby24pD<{TdWILrx1C>lz%9vhT$6at6-_mm@!l3iseU*7(S?D^PW}nil0D-zG>#zlP6Bj zU$Ce{$4*2qv3%wD2q7LmY)Jo~%gAw3nA@r0wWEhUCzxUlE?&NBXkdW&)NRZ4?c0y* zhuCT86krxiOmo%Vu+!Lg;J~&WJL=W5x*frQ)|+RG5%%uW$L%#7SmK>gE0eYvm|Bp4&!`#Sz^hk9_6xmGQ>OwquPR-JQkWdwiKuQ%sI?Qj>~TR<3&f+=uPilgCf*CM3iZm?K7xcAJQ$o_o7} z6T%Mf+_g*YG;+A02e&uV)ZnHxdCHXICr%>W(lp~0t{;JeIYSw-28kBc7+k;T%)Tv6 z?6(P-&Xq&%0ZjoZrv>2lN7R}U)L|hlK>%C(!9#|)*%MMPEot4(2q#f+=xz=4^;lR* z8(lkKiN?^eQzv^5Cc+kV8{=shQ*5T`eBY{tj;D{1L5DXjd;a{zlBLUmp~j?Hok+CG z2vQIvk~inU!$e|E5|q1L)qk=<4X<15*pvy+9{3C4_3Gto1Y#OEME(l>l*Ts00vS9^ z)op`R6X6e%D6z+oEXmM_YBPPgRjXFm1WI#UePi(!^NLy?yuLEG?qC4cGmUcY(w#~&Z>C)|t{(A@gjxoeN%1Zf6?EVm6d zQAdv*7Y7y>i5W9zVmc+?niMKmu1pqe{@l!Q-8$i?Po6rxdhJ@shxy=rwREEzC?>9) zI&xyyMpfHo*@}T5P2{U2u}T9-GMs{h0J-xTHFix>z&%Z)!f-nvzUt9D;`%4mk#b-Z z^w#p?S8(9+b+TwoTq6}7p+foN(*EkC(-^GcPPr%L@N4C%bMwvX=IB%!F= zZ=F7SVf2`Bep8eCg$6PZ)XGDK4m)(@7!d+n{akZloBDTrnhikpe*66ol7s+Ex9LQ& zzL{AxKLHBD-LO^IW>cq46R~HLEj>1Eu3e{&uZ>D$upd@ZhUU1kbGREc>{7MO7>EIj z@uA<9@@#LX8Uz42v}py_#N_ES^xW}9K8PpdIVu{2R6|8;pLH3lT3qDZxMt)eM0JZb zi$O3qdH1sb6H&8a6bO@jtF|Fw>*J@-L1M37zx(}xQ3oH>GU3RlOq_i8_C3o;G>_yD21ZvJsZtHtiVd?yCp~-0>TFvy)fX)=Z%mdhlMNYC4GVJnOdoIDx`pc5ZN(ua zZdSGOI7D9H)F6Gb1JJLve1M}jW$N_zAAV2Hp!Zjdaovm8H~YpzGWa`Jsw^QvNZ9x8 z-Mbg=Uh3G#u2{LcLIqbFHn&xaRy}@*gs?bw!Nc1fDnJ(RWTKl)GX9Jyv!+s<-o5+! znrXA<&4tf3=2An34CUtUYwOY;@hLJxzvj4nNW3*SxvSXrhmRbMq9{^QjRk`{iGWe> z@Xwt(%$y4NZHXa=$y$U|!;a-XyBZR(YV>PFY48=d$JZGYjX6-$rcbxWPY7l$A0WCl z=JYRKya3(BTB34$_Ci52lBq_;$}f|i!QiMkP%WcyS+sa*6w!#uiFRuPRG}T0u3S?` zD9bONy+DPLOmzSH3&Nq9l>8(rg=^PuxpBvC6TwcK;FHx=+F=Wb=$!$iO`tIGkM?x}Q zzJ5pS2|Xr!uxsCy(&Yu!xK^)m;sKq%!=^3Ue9;ReS4if2^yoRVL+9zmORX$Wcypm* z2a1+BTD0V*f<@=ltQS9EAWj5^k(%59h3y>i-tXT3H!9e@= z10?dd490D!ZuNxD^P9tkO@)@6NdCbhr@@#!OL}hE;r7R!yLThM5{C%ZKG-%^XT5mp zm^W|#addk1@}(tUl#1=6RSv0!eOc33&6>6A$eN^XGqud7jkV&N1MqTRjbz~JxNNQ$iBmpWMD-Q{U9xWCj@td6@YTH43|T-7YL{6Ydg^xYHO%d zv-FJmgXmS3?QMU&bmc0UkuBfy2n%fJx@ey!H8NLV($gn1dNzv|Y0&f&QVsj!rkNTT zVWhhn`9Ic)u~vL@D29(1X-S|Q%v#=Z+!(y$A@ZywelOwE9TAjUB?h|4@R8-~Wim;L zPp|#l>`Li!H{*wMId|&~%s+m@BomQK{`B7t%bpuP;#z~Iw}y;L7&rNPyDnEsm9tO^ z=f|ow$9DTCIWNMH%z;=lfLSkFj%&+TNs@sf0poX@S}f`tH)-m*ruGK-fm$|<=8>3b zSZD-`oE9HHNE4h{AQO_yj2Sx?4?(vvK;wMr`qlXgs`2>Y{Yf3`YEXR?Ul~#jJb%*+ zF8x9#g78Npm15U%!-+M?z!89CuPVUN5>B5n!>_fx{j4GHYS_r=qOP7VStibgA%4R| zmaDbEnSfOH)r;3RdJVYNqHW?)T@>+i7cNz)>K%HqT*l0c@)o@Ow?5sOC}>|@s8G2@ z*?*%)b}U)uc*Sb#3l?ed{g3JWhruEy$>GDvyaqD!r_WruCmnFySqc4DUu#acS2~(DT)= zOa9}&VaHu$<@oU1KL%GIOiUT=ZPc23Yd7Crvr!*KeA)7qnKOG>>=)0FacTZS0Vsw1 zF~o(8NU9;6GUnQZo+4C3~Op%h8X^$6knZ@w9wGtZ@xWmF{Zw|ufhnWled$EsYa z^qlgQFPE<1*u%l1C7XPoRX-j(=O8W@MoTej+P z#f@7D906b5(ilZN!drq)`_kEUsb-XcD~g08q#F9w|LoophY-UIx0A(binZ<=W`F*I zh0^I;#y0nRg6!>KUZ6g5MaZ`1Hci8Nf*K{X*eR}VMx*d$v`mGszm8S6|2fh&%*f^i7LtFbex@~GNc+7(1nlY5IAz|II(vuJ4!ynWsqx0zk4HmONtGVwt$mm zk8K{fb584~&0ADB&_6X5+*5(bS(_Bvwrl_5>NSr&soLG(K&#w#GlOh_l9&0Dvc%sr$U5@KP&7X*k=ps_?v z0g^$=SCM=f4Y*@$bIsY&yy6;War8KI_FTJm?fAr(bDaM4_3z(br4+L4sR7p`Lr8`` zBhruQzr{6A#oocn7fY7iP`bjUGR`Ut!#?*GDN!_o568($l`8u+VAg|6z8yAvgnqp| z-x97_v#ET&!nGVnR1J#(HNp7SSD&IWVX}x(uQ}$Mwrug7DGgGZYSb>cVZn5hfrYvJ zG>iMmUmZGpL}Rmuhg3|t4D5U1EC52{qsP8d59kjX;YWyQEhv$IF!E&FZ>g6b`c>v? zw)&`1qa?8q1rrUpM0EB7(e_ALuKC66>CS4!HarT@!0g}t0`(tlwGFS2|XV0ClRjZZ- z;Esx+4>?_=EbhGP{;XR|)8}X-~e$woAx%#M*EnCI!qeVR}x1uP(dTiacja}-u zTiRob3%_jXP<=$B0k_5N$WS4kVpL;L-6E&=Z)d0>)lk>#vn!uEb53QLrrC|At@dr%TD^L8AdIjb#{tdwEw2_XTI>lElLjYFp3x}g z_)&tNGdz<;kI?GFQ9Uh@L$ILhj2uFMAlDKnL3T@l+tI>BzslQDs-hZ0>KD6k?4LMt zA=OYG;O3*U&vKK? z!md4ge*XDqwV%{OH3;>8^~_N@)R1aOP<&nmHZXjIJh}El?84Z>n3Fx3JY{}U52z=? zUPd`6?GHWU_K45*S5pZS!)CHQ!RYX?FhqBjW>crnko`Conth+u5Sgb;vr9GVwrh}# ztPnOHIdbIvox8Vt^yQ~d7B5{eeFn!V*elDFDGP^X0fl%ZXcZ=Ej<00p$LvkxWSKNqouYNmV^Wqs5 zJ>Ix+T`rBL5b8BlpndW((VV!JYu1Zvn|%{Tr3U>Vwt@kS(lx)%<&D^Gf^$bj0vBTv zw}%e(s7AtP&z?OUJ9dkZ!M*tMqXCockljI{bw4?dj6x8al3VAWoN5pe z@&4_9-4CyyKQ+Ba6WqoPeZvRD#i>&c%bySeq?@sy6j_6=&`_w$4QIs2k==XraND$& z`p5&-S~}#hXRlr&1l;wTw}{nXZ=kP1aU&T}LewBuW*e0Rl>nAOP;kWlWhiU1J4@B4hZ75o`bwY2CbeQ<%4{Ter^g zqxMHQ7yY)8Zy`n`mqZ6`Kh9wLapT9kaRIUiw*q$|vM<@Y6*ZX3nMf+KchE<`0E5OK+Ogtn+821~c@JzzBU@82)ij>62DGc{j{ zSBCMNVX@V)X7UuH3SY5um7WW*?`O59fBymaF3Aqn0#OagI-xe!ls_TWnB2Mk(?^Mn z{PpYCJD1KH`f~|2GL<3Kh#xdaoqJgRBoH`#_8c->&8cCVX*QvF#bH5Ci(g(~)t={1 zcs77qVILJZZjbDrMCTf4$X94NRm=k-@~a<5=%I}`CFa^m2h0GTI&E6en`v8G@q>5pikRG6x=5}_ri=^E$906d{7sTG8X{Pk$9R8B5QTCfF;I)2^S!DprxP*hf5T-sne!mqhevLWH$MI1KSrzpTs6ZSBG0ZE}kh2*3(1rsm7!S#!7 znLlyGxB+$&V5ynauhq-v&l9d(oZY{*<&}I4sfJ~VQ|)6DZ5~X$-3XT}VsW5BASee$ zP>~#sNWSGJ29LwZvIGW+q)!bBk_U}gc6JnmYPCg+7P5_D0j6W-tT}4dY(nM+AV5E5 z&3gX)`M>`70~~IM!0pWvy7hUNa9d98`M!f!T(W8W`>kR2*uM#fUy>nUNWxY-VWsB8 zsk2q8xTbyKTl`fqRl0QPlAMvfzy(0RQW~>cP64KRNiSYn&N%m|IdkVlqP8Pe6^4IM z2TRX95*Va?`}P5LI4sYs*>m)h6>mMM#-gEJAKbpRa$>wh`)-A~aqS*GxVv%o7$S$b zwV~dSY77}V)DDoaCdD8yciw!>{?V&5h$VR8QnKwFG0X#8cmiyA$4@$U>4M68*6i5< z;`TUpC@M9s@hZe#y?SLqL1)jNZQZ(cu3Wh^dLp$4wT$cc!NW%dZshW;zA`Tp9Aih@ zj{o9w<%aKBdE@71FAg42XY}&eiK}HRd46c#AQ;JD`rvJ1aH)iYd>rwE1``iW100kQ zn>K9{IuUhVYMHm5ew}XDr+W43BYmc>VhI$!pBf;Ey;?>_$t2lzGGugV4c5t{5oEkLQ;weLVwTSK1_^;=mcd7oW5u1D-wD^-8IWCe09IUNeG&z`?pzKZ@s zUvC4G3^6qf&ji)L{A||jxq1)*{2o1eynFXfosnaig_EFjE12aDGpn zKEt&^wh2(+{v#|pEZ6`6?3_7sgWZl`F-XZII*f#B3~OBG;KpTd-@U(o|K5<6)jbKp z$Y$lox2@sXOf)d08pDPUw?HO*Oc@ApG!WEzE)jIP%rDZQDRZpr-lr=i84nQAE0S?HYjTFf^T#!>|{85RTI2 zaKZRJDanFS-(0>5De*-V^o=7V8O)JDHwf<5uG`=l%^rJ(D_5>qX5{vG`0!yn04+7_ z2X!xzryko6%TbL=eo4nzRb0=uZQl-GqmIF_ELjXOS{yp?cd*RP@zEloLb$YU`pBeb zPm^PcE?U&RR#8J*VBXA-YCxZST?5!qP4Cs>-py;Ghh~i% zcB`&aPneSlOG`tlfjd~rAj$AoR0xosPk)=W$fnw~X``B;uivoIey!sg$rY0Ye76 z9a&fm)!o$>)fm#G{Fy^L!5*TAie*dns1XyA0R=In8f4p1u~}G70SLfgvRyUDBvYnL zQZ@xAj$V(WAqIwAi*2m#_6W<^;rnt440eJ73=%A%0g-$KtSp_^sZ-~|g$s`O>g36j z=wjrzDO0c$4pbG1a~FPmZ}nLaWB%>&lWTPw>8XIPw<$w1pw!o{IWSF*3n44fgD+pc z90NA}TEKd<%CNUYzf@0XRPsxL-e=C5Wl5zZq8gH<*s{9}A5|8^?(S+zH7e&@H+RCD zH*aMRmCBUtRpTE&ZVQ_bmB+Y-W%Uao-V(D>U4^im0uUHCeu92!Fz04-atv`G%(ReaKBZ@27Derek_ray@1SW_Uze)23l^*Wa3Mr ze)})sC{^yxz@cyNKd=u>)cl_G{6?eZzKDXoG2yCYr8&s}l|h2lVN*7lDG@a{Z{F-S zBTfCohYwLav3#CJ3rM}zu3N93O%Watgs-lCfHM34`upySSu+hY1pt~p2*7a$WTeZ zJ-;p?-+hyAQ=JBvHf?$Ez?Ed+)2ELdC24_M0aeJusk3CbLSiZ!dVixuN=Qg(-n_Zn zlpX8wmzgqUiX((QDnkiQ8>qy8?m=H9(~ zzy0=`UmTkyb7u7N_F;&ckMG{!YS+b$9C+8`OFnYkyK6V3bjuf)LBb}6fv`xOsiq9G z79SrE5ZtDtsek_bIjI%p>YKzI!){QV2<}cq&XL~+E^x{$j^r>e<0njjQwY|ls>Q&e zW8lDeO+SWI11D3_N%e9i`o)rDBu5%~k{n+vq#7#XO(o^^8#iiBBClGsY-us!K#=R0 z*hRA^-Cp6!ibE@^!)Wm=Za);QdP6x9XAsj(4Vu!tdjI}COoyjjU0pRIkc$oj5DqTq z=gyt8kB5j=30-=6lLi-uLE%gO$BUOYn*1U<2|zL!6)c!uB*m=;9}T=P!2I@EnA8v} ztX8dBa))r29y4Z)3SP%D_b3v3nTK(f{o4y%Fc7e)j^v!Um8({hS-{@dutu^Nc%z%R zyZWLUwaS<1Un_=!skw1&U%q%QFr*>X7&~r!D#55}ei(4pdb^<9x$~%-8GyhPM8$!Q zPPS~_M#?73BIzlfic;=d$%;%>eX{jCIY>~LIdwPVz8?aFfS8il{i## zQxV2+{rdH!N5QtuvY?hn2pIuG0&@ZK7b(=KTle6h!z!wQ9>FuJZG4p_i-7`S%hs)i zr`4Ql)TvN>KrBfHF-ce#36RSd&s%`+_=sj!ei9a93V|6jXE`o`tRx@3IsgLTpb+=9 zhwY6qspay+6$qR2z-i0u-KI>9VQwaS3`0*;h67rsPMs{X0DBxiejL`rl7SBO3SgWz zZQ7G3PwYKMN;p3Lc{hGo0Ft5ll7IZ|w}dXeA}1Nl4#*(Afj*MY1!YI$#!U!tO87pU zgZAy)XP>@d&FRyp=~e)oU5z$GhJu0fl}Es_;1)~7vV5M8q*B5$Rvt0*hG-8xztS|2 zECx>BzT906sYaEO1qReC5EbJn$4=%C?T(MR00@>^L>=j0*T`^j!o*1ujA0>m5P1CL zsXjzTzI^$m?H@>f(4c=KV`%oR{#9Juz}t84atk6ea^wU^|68$mYZw|7tiqMm5Pdy+ z_6(7TT}cG7kg+ddL%30sT@Jz5<;#~nHSEC%2hNG-&Ys=bz4wNKMg9F1D!Q{OEW{21WWRE}N6E_BbLNU)M}Es4#@C^+H%4e9 zlzqg)jh0%({wuMrG0d_73~$}KCDD{y0o=Z9*)pQaTZRqxKvd%Pm0^7V!XcMFyBbmrOGJ^V5DU>s^U6hqr{3KgSLen58~@OdYD}6uC3dJX>{&qI z-u(yq3l-sgL};nVb1HGI!m=H+D}EY-lSp)YnuC*Kuk^}UiEut~D{RJX87j6$j*cgrU)kT6ldNv2Mljv)sQ6ee5Otqms>r6Hm)=F3G04?!swaQh_n z*W=!$2c39}(8&#n-MxFauS;sqe*OBreEHJtL-Trc0UiHNZi2EH>AlH-KUEt~lJWNK z+XV|2Y}~lfuNkunE__ltckayYVh5rD$23cQtCl@g;n*j@at7F_YAPi-?#MI02o^&P z3=&{eq!rkI@E{sSlMN7cs*y}Gs+L~3aM6MFOGh*L(_V@ zHmsc7sh;JPd^DsQ+;Y=4(*ESLBZG?8%0K;o7rjkGdj`y+LF>9XYWf@wEfFeUb8290vk}L>?C!76Z{1 z$Errnn!ZM&Hb%FIDWmKmid2IbBb}-j_B6HXU$elt0bQ4j>MaR`W5JMWOq)LAljGGi zJb=W?$*PiSOld$U5t3yU{()YAF6JN1X zo>u~_e+{<{*3ldXq0zf|`3kZi!w=n>2^Ir^5&;C<+IZG;NaN!NS$c>H)xeLVX{Dkl zDF%8ubi~yvIJHO9!S%fJaTrpK=`&`gVWj=Zr-q4|{#;-f@44~p4cO19Fr;M&(>!$e zNF)r4{U=gMjky`s%9Shc-@mVhs<2D}A=12g^UQ5@B|cOOSmcU;dvuQ6L!*U2K6IqzNAcS5oSh6ZW?4n^A3)r zK~rf+HD=D5E%8rSh%N*?qfUVjeTk{#<-sZw-S)5lPr>USRk~ zj~;2zm;M#vcML}*Is&V}v!FWBf37lAQ?~-L#i=r_8b)ph2^O(XWQ3RO}ykviGq%e3;^Tp=#9S;={0>xkOg z1P3~{A@Bv^FJx~NklPdL&9Sk)l1sSf0qmS9%c0zP9;`|BOn-gj=DAkwc=Y>sq+pRH z6DN8877c3Gu5BNu-x^3TAsh*lt{2dGb~|a3_n0jUD%V1!QX<10E>3PzAlcZYfF_;$ zfD}KPd=g0;UsR(*)xzXs5v(ILv(a}#5T7K>BPxXk!MMcWY4GYw+Qh(>8}8_dNn1c3jTebxXZBtHc?ZjPF2wn z1Zc;O9gdA1E0JHB_$N-w`qQy86+S$DdTr>a!+8t%r5Cj4t0(&p5>ZOO*~D8ULXogt z%oKMI7#3`w9B1vT($gK%lBH4XIuQHhDN_j4wtCH4X~-J+hD-YxtcXcP5N{PeM8_ppsimd<5dn^V^?CcvS6^+< zk?T~Q21kpP3_vfEKgpBt;f76OBuG0we~|{r!So|{dyD1*{RKXNo(dhe9@Kga%skf= zlXZ0!D8mjAUG3QM6B^5E%O|Px(U58s{eM;_W>K+hsU9^78FCGQn;B9KGJ&diDJ(|? z0y}o@(jQ?i&m~HfaNN=`%Vh53Hf0$}!kxRmqA@#m{+U+l!v#xFV_g9BKyE66GA|R& z8xBPU5yEr44+7vxzLKMID-`%9eL!OIe<{|TxeMj&3^UTA$Csa&7qF*A))$rNE8<77 zymAAJtXDZlcmYx=q4*|@v${Z^Y1xo!$XtGv%a-a@BZi5YB$Y9w8t7Op*eQIB90Kjy zcaWRkv4Hr(al>;cpbqu{U^;FO*6P?pnykdt%MpzB%3wJlz=~?ZAOS;j#kU>(5{1b= zHcL&TZ!<+gHExWXr2a0^$SwUlK4MO$eq~aISore7FzM4Ie;*DeVj-|9A^HJVDXs)* zV|)9e8db`c>|MhUdbij1Z&AQn2(~{wWA}5NMP$AI_H*XADg9S@OM81rW#lJ$N%-`pK=xy zjvhT~>EH1Y{j&O%XE{PWh+F^Yj2wq2EAiA2M(LzdBB&Gs+rXPA6@G{|U(QrhU>D(< z(KnWfnJgs6kZRzAZ^u+&O(YOlzH+5zCx}<7^%P1yRC^*4g5`Hng$EAEoC*(1Bts&h zo+ngkfcJ_Urn1x{s7LC8PS!Fizlv{5w>&<5`qV^yzwD>%!KlWC_Few8d5b{)3_%nN zUq3q#G&T3`-SdPGDk{9>rcIxYL5O96KI=zJFFu2`Z_|C%Wwn3A-^kZSz8 zc!>p5g^v+Jpk>Qn^jm`5nqud3Ek)nEMI?pAeV0=Td2&LM$JFIdv71c>ucAG|B%)5 zcWDq^UqAauJZsRcc#ae9k5K0+Y}(|w@uFDSu~Vm0r_T%*odveLV^z%aH7k_614}n=tSgh;@VA5lUp?mTRcjh45d8d34}Q-|TJ zj4zC5U@;n`fgLNSfYcO{p^BOfsYchzc^q+j>?#eZ#?ocW+|XB89{>Ua;^Hhc!t#jl z`N`8~jy;nE7V|>6*}{Sa0-m`T1gJ@rX2)Y{Y;#MuICmgcvVUS&Lrw}JzKT9^^dPT< zr!55IochC$zNp605~bfH+*XJ5WdETP)oQ7otjTWVvVo&S09#`9rz0tol*Do(?2mqP zYFHLD^*qAB_U+pb!IWi4hE$__l~hVKmMvfIh{3|jU=Z*$o*|yOW6wk&QR5w1wpsWH z1WY79pdgU8YWYKK^R8XHIsy=$E|{gRK%4L1zn?#UzO=t0pDb~14gLFevO6WG^Jjv-iK_wL;$(c?j?j_dV#RkFL_G8}z! z4XH-YYWZTvRyg)-$ZLdD!x4uEt0eWR{e)U-hL0Fw=^O{}rOTFUqI`c|hb4BSH4jK7 zf}#`K92JJ+v1O2?XA10wfC_^oM5OQ&lO@r{=FOW0BK76pccgH!GmV-#;(u9*!s6MX zBck))U%tFPa;zryNcHp?Ec?yzk<8%1(0<^rNJlO_Vu%ysI3!t#9MUlgW$gAi1~J z?!yHNO9J6g$dfN|^S0!1e*E}g?S`Wz$~d(7zpFT}dS>>p#1LcC%6a81DBS&+@ zDwyQha&v&SEaGSVXh=0Y^SVZpeAF(u?bm6C_iXdry)+1^hKj=@EMxfO3G;jRAIM)h zaPSaD>B06tZUy85km8YGouuSf-1#FXaGv&Q0{$AoIAXx7SFh@^oZDMrei0X5@lYTKKttGwWCE#=&8V+1&bNXv!lmP)vTv)Dc;V`n$2?u(tts_%`v+5 zkmfaO)Cn>~kTcYsaFU79k#WkNNOHAa&t)Y5sE53XNy_lmhICJaO-=D9#L zSh94fL}FnfLI@B8K@W3wi}(o)bP4ht42$v=W>Hjg+_^-?7dY~9822<3Ix{yf)m``CAhm2B)A55w?Tsj zhhV`%a8Gb|*WeJ`-5ut1_TJy!xjgG!{cFt{n(FD&x2v9d<*BCmN&^YBWbU$tl&>bk z+D)Jwv#wB^0?6)Bavq@sQEC?6T7YcG=5tn_A?5XaM7;Xogb9TpCUBCPy;WSMv~gCP zP(MIPBK+N4apeT5neJ>4GuzqqNpC;;QBQ~WouC&RzUj6ExiRKDQ+!U(Q~eJcEG^ta zYY4l3knN$Gs1G0P99fNyr)U>ZD8XV+jQ&aqjxkyL1f|3tOvv~Z&MKWZB;Ps6QK<|o z_n;Hds}GlcwACWb4#u;D758^8L7H>IH6=E$lIhD0I##b#fn!wsuTm?zoP_7y6Z71h z*%9Q!XiSd!9?N=^_(x9dq5wJ>Yapf@2#r-mZpPQe===!L@^xM{fjXwr{Rj zn~(3X_MBNj1YBYLBaegQ@;2)}KRh9uW`nMz4hC?=ZxadYAe~Et?Y9koE(S=ePXsPKV@<-PgK~XDf@d z`E^Ks`KLz+*3vg2?zkk39-`^^RNw6}ogF?577hI!wQOpMJsUWPGUjU)tlSQYsT$xk zPhKCV^;5se^+=^`O(Lj0Wz+(edJaFJsFX8IX}%X?BM9^NY#onGiRzsvn&xN6!aY#=N+#^MhRCQq3%y}JH0wtCfSfe6^T+zY56$h zS+D#3n!P->`RfFwK&N4^=mzWGyFdBpy`-xXZjYDo`a*Zt3G(l99~*v?#c&GcDZTL< z8k6|6(g8MthfiSpWVn0KtyKB@p+otTEaGV9Mz6E`l?F9tTGvOK9_Ao zXK}6rS=sgRlp)t4fOLzIJf|LoMw3!yZj|tv)p|vC3bYIdU|9z|1PLkntJC3OI4#F71@ZL#Po88d#KN49Zr|yk z_Hx+xmol48N-^yDBcMyN&l1{Tx)AylvT{w4Ra5xTT1j3|5y-IG1+fJXq(v^(u9dVo(KKml%u`)XmO*v;kK&W*c1hfkKrFm>6EWyz1aifKc9vE zMCgCY4RnCp=^2-zSd1aTC85cxlk0S@^&-Gqp<)G!AcV4f2+ zbv?Ata>oRS#F{;(R&TwE8$%L^9&i7&fQ)*S<1O)#OMr;NPhCMP@$6`IWeOm5W}|k& zz;u?E%=P|JBY%H3)z@~Yncm6y34L3$puC6gaCeT#r|5k)5LzR~QI?fGM|DA2QPd2$rGE0W1ty!Y*0q6%yh%6Pf6z=k%YNnqT6M^EcJ<+P zB&w0pWr__33_2y?x=UN^3w3?UL*L2R?B68|Z$z+rQ>NEYxkpTC9jKczM3{H4s!cWaRjF9I z&#&aGjqytHK=_893SuW~8ZlZ|NRqX~+3U;o!|_A(elt(+etF)3G(KFLY@;hLzE1;2 z%;*$Vv;Wg;PwfsPvE%El3b8GlB~Osx6epl6K3;gE-W81pQSvg6C6AN{n{PtxcX0Wh zy~_zUGEVFYw;j8D%nRY+Rpvp6wTg7k7_vvMeGTKg8+vCY4j7IhVm)tr_dg8UdYL|1 zar61U2GgFxl#vCI2cS$jJQ%pGskzz5x3D+E1$(WVghQbvVv_rOeUoH^Db5ENDdrFu zw@0m$uV$t+;Nby9SY(&@x~W4HbO`ZJIjD2|hdXOJgvvcM9q$$U;)DrS{{uZCQw2TW)-J(NX&JMr0t;Jf>_#K6ckpGT%hw}29eTW=ql zq|jJk)mrOpyF~aP0%|G=j~}c}!o1@eIbPk94D3CUDzEo~P>{--X!R1nQwLCv@rwDU z@_3%E9DFZ6-r$}LNg|wZMXfnM`yC%+D(U?AqM&C1)W)PUewCn7sFYdQY?vrVTp_%l?pMpt_;U>SvGEEhK$jNmGQZ4=+#=PHhDwvemgL)piHYG zk*7I(u@PT%`2OzQcqXLl5X|%?4%oEAq~}XTFBK6t(y+5T0|s>2^G2ey=l7KfSfxhF zf5&t1Yn@@3DH;PVX*@+OJ$Vrj^70#g1@oxgmq>uig zC&43L7n@=C)p`vMG#w~$xDU!t#J+5Kgw&VMGDMY!GEv(Xttb9@k4e6ARm4~{0s1f&#{EhTjcR1jY?t$~W7S`9Ksp2vx8)8reF;I_ zBv{3gE6D;>G>$yNoy!74@RxX-;zl~1Cjao*>`$C^aGxafC4_ZN;77~9Q;3P%iW-CR zaK+9*O}tU((gUvg26#iJ#Ryr0@!1NZZ}y}0U=V|-nmEm#L(Vdn_i1L{ z#xndpPg~h3hzA(8$O)2ghQQAe!Dfo5&)H_*p>ZwdCMdmPqoX+=)S^FRBA;^^@c_N! z`eQYM0&w7GSFf&>1C`F0F~Xn|bNl>~?30b}S4k7KppwC%9t2d9*)K*CN^kWW$o6(S zCHH4wG60b|M z|NWPL;vnvq+rb3NlY-yBrSGtJ&qC<3tY?nzzOwEx(Y1opylP}}B#@2F(&i`B?h9}2 zbfgz{ym75SCIL?3i}R%h%k73PoCTM`04Rl+^)DQ-uK1i9QpXKlG8@+Rx(N2jbbySb zeS+WX)!XHG(0+$oXtKq_tv2;Ihx4JbKphxKlN?MlhYlWO`Som9i=ACc(&$<%j0gemB6dhz)?M%F(s zn`w*q>NrjWO&JeO|479q6n+d7ZTDN9-U7&}ikE4qNARaX_KH${343bd5^ZjaE+u*W zTP;Q%uL+9Cc4WZNc7`{b}DdFaIX7aPqj)wy@V+;Dq z3@%7mn5Js33U!F1BS2)LIjFcLK*!Y9IpNjHnMd5pgJWn#1=_LdjGOHXKn zH0D4$HY!i**XGsoypV-Wgqu?Q9^lQKE?YeKQ#jW$K<1hxdideu-D<19@9v8C1WrL0 zpu^fGM?--o>wLEgJN|IFgHp|zuofI2qV@%F&@d+WF^-7zArz|spoA^9Nf5X@bq2wV zDg?l&E!1-J=T^Q~9tO)Caagbeb`VsdR}Rb3;sEO5;_kE6Hrog)YiTX#q#s5J%oz_) z4l(I;()W7PuE9$0hLcnzIJ_*f=i`dcc3m49xR9b^=gGSX1h%=kgEdxvc`N)<53~+o z^r(_7uw_z#Rd5jJUij#x(i<$g@RT)GwpjL+mEUtfIg4v?8tC|S#*R48(^bx(pGG&N z<1k*!a4kLal^UP63da~2q=RQVAc3;za9@QE7NH~d{dP)c69$nrC!A46P1s?8%FC%S z&nfJ@Rzpj)4WJXsM7E*IUqpJ&XLb;)^tTR zd8yc|Ue>C2rV_2_&MN=R1YlT(!Hc&*#D~T#g=81CQ+l8ElDT0mn%IeQmf#O` z^;Aj>L{t$t*g5+J<64Sef5`$ZN7I4`QVQT`;QYAeDh;ALdwbdQYot{``OnKc>_pC}{HX)*IX#qNSPpH!S#2oW|B;781-TD@Hb0ZSI87==&8n&Qf#36=C(`p>-? z;RGDmtw6~Jj{2shBDy40%*%q;<~5Gz?kTf@gg5c5@cEXeIi2}|!?EuKEM-D62)Wb9 zb9_xl0Of@Fz==#$aw8{18&+vvCa$5QZibjy?Gez3&WC>ykGJr)xVPFr3Wv)uB6t_r zy@dPi8!fS7^7?rsu%8Xp5O#lz`EH-NW^f_5WVRWL)SQfwG>-ZPYeZHtnCi`Ru*ieQ zBEITR(X&GCY(aU!X8V)QB{*(P%67x4%&$op_hDvFH1$=~AGL-dA$#i6qF9noy6Cow zWPv@=v{_=TsrKK6DKrNJh!VR>)Q*&fSG=ZJJ7J0?cG~~^u+>hQc(+W3Em}<7AS4v> zWp5OT1a5wlzY;y=GTZ;D(GUo9EWko6H~fiwi4BmP^0Q?G#4vJ!*T|Cbm2MCv2_=k@^YO8tZ@ zZl>$w#oyTI3nX5{g|IoY5t-J%ix4;=@d{TZ$hg>^w}3HZ>m7mw1%pcN6xm3_n$=|c z%ZCA*FoA{_xNlF35&~OCZ)XHYMM5E*X@GaQ!4HtIZTwM28N-I%(0W|r5A4z!JadGBsN-5! zc+$vxY(&5tD^i({rkAs3Wgl^4vxy}idIRAGKhgLzRjbC1OQUtX(A-aOGXklDyU zS$c$Y4cs`{9!)Y4-2j+5xvX~=`zPlylAwg>m>iK(ZN>##FHcgeH~FzyQTmnu z@M8MWBe?eId}X%yat9L~rHhOWIH$_RTs&~;PLN%*;bZ}msh9M&QX60?L`}2WOEBLg zVIv#Q#}#`MYu^M%v`o9HWfo^&iS9L@Ed(3p^fdRA1W~^&n<-JM_YnUroK)i8D;^qO zM>qy){kp_O#1=dfA7nazxVTKgZa4+`zrJ41rqeJBUHG{X z;XgiNZmeLU$EJj4aSSb2%Aug=G}_z{o^C&re+;F)(ZADNfYPn(>wTwyp>l};v8WXx z`a0+!cAPp8z>Si4TxFL&-SK>h!dv`CprLoRei~+k_K)q`O-6+uUZc;<&ou)g-KQl8 z{7eXePzg{%xzDrO_|&B>@1kk+Q^^RRk0nAk8Z5FlC*eR&k!s`%V)Vub*x$H2exNV6 z#_*6jS6&l0T*nk`Hr;6E(4V~1iNs9@0Y}_G(9DJjKm8SZ zdPL#H8D*~wpmJox%U{M&$;mGLL)QGZtDu2j_ow%%Iw2WuA?Xh!*9;|B)O4GplfiKi81yp19FZ* zoX!eA0*}AIh%0Q@bSYC{YYGj_I!Jl%o&E_DLQ^}%w$lK82aag=z76U4nMWLm)0;2a z94ZpDU2ErBkSLP>_g&-o& zkmsDy_3UMmbpd#c1i$?AN3nOHK=lZf&gJZ7GN-)^jCU4I$4-73nsSAO2>RNB(6S+l z2OVO$=3-}p9;I5v@{8bS>W#XgNd2;pJFA%SsE>Ar@56`UV@X6zMCMJtup*MRUBlMp z5{ACQ_f+XLAwO3wD&K17vYN6BDf*cc;J-Bo;<3B#eQs)tJfg!|M?K6*BirF|1Q+{f zS7$iHWH+}E4t$+_QDE8p@j!tu^9nJu%BT~CI$~_(T8*$oHS6qH3Uas-xyk^9C|?7! z4uOo?nq5wGN?dlmgb$g~{9hDJc}|xbCaBO-g-C+8u@~{Jpec};M02g{p&=i>3Rn!k zf$s$<63R~P)o9KOeSS}3!229V@=Au>;=FDh&9_K*HRD8;efw#!!KZ4!5E)&SF$@o{ ziC;#!SUn+BegOyV(Y|-s^M#^+z=b<-6*{g1pzBx)hov07(fK2|y91CD<-^uoN2(^@ z2km|H7Y3{SVqq^Z~9n?-czH>1a_m~%uu{)T6;WU_xWVCa5zFklL*Xcl#l%;pDQB(C5$ zLJ+hhM0+o?C77*P;A+VhjN^_e{7NF+DL>`mvI(GO9ryI+ii@^by$Z5~u+FxZjt|a- z8b6C660UDTao(3RcN+6X&at%pKS*;eO3Kz`-$a7WtPnct^Av_m~SBS~*__{kb4G z-DQI|IJo~5)wFWmSj^diBDPGP$=n+VWXxtnUvY@Z$sgFDhs;gRI|3BCF17hkzG1R! zu5(F1+PJ?K{SweP;M7Z^r=^P4Dk;r_~v_!bqBd*uiZ*9nsOM5w@Eix_VKohfBKbrrzF~+y0F8G z{N6|yi8$~j+O&cp*?J8~y-{E3#Ad|YMPQ}xBf6dZI@yqjumD|>r86aX=fJ-AI5#9A zw96#khEM-})_ePABrofbgN!t@7xTo8rs756hPTOyd%?Gb5WJ+WAVrAh5RI-u*)&-b7G;Q)uoLF;p z=za82xSCc}gLhN=>7mMrw!`l*Fwi5V0N)EO%aQc|bv;>m_dLd|A`m!AO~)1Xh(=hf z&x}aw8ViM(p+uwOCxyfv-SN#R$A zdzsjxeXaSS^~u!t0U)d__Z`ivKh49FAiG}-ApqA-0EW3TGpJ&iu8Nh?54P?})r;oS z?;EJA=V?*wUzK;U_-Js5kwg3El|eo065_bUdP_AiAG2O8Nt@)*8o0&KPJ|=?vzF~1 zyqh#n;9Nl#6arm_=^!(XZk)IJpRu{zx~gAt8w_YUl-8s4jUKj0*F=`4w&4VfJczDAEv;anmO zDKWuzpRoVoHR5GF330kE(Ip#~%bM+weidKjXnKh%m(efLwvY#f!5M)%XFtN|YCxSB z+bfR>HH;@r+_(J-c{3yv*py(FqoYD@RBLB8AybY9m^^kC@;(xf)iB+OqQD~7Z1Vob z9ss=!>hOaaF?6>9IH#%Wvn|_>tE!8*Yt~N^>7)5gY5gACEEwh5%wHqzB54sZ=P~ve z>1+j2fPK_$lfay@Gx_YN;x^Ew*C~s_8v-a$R0!-WYo7@x$S#~HcFk9f!up!_L!Wf53lFV&AAd5S+e69JUirlCMeY%KL@*hy1L3`9i-MrOOJNYMB#P1O` z(?-bX-Y<^v<)yNR$EgK%4$qdon@IkF72A2T7hHo6%jwKXBjX;H9==u)yVtn7q#Bds zr3$^tuamC{N0b-eZSrPU`=x8fSdr;`Kz)Smy4ZsLCNB2j>G=NHD~usj1>EYY!ZvZ? zTCvo|=eeOd)_j}I%?-5d5hZn=_p`Qaq>=!=n=RP>DO$(Z_Q z^2?FZ+*5%_%yDjc49GT10FgS!&dyOw-XlglWh*w$*N!{H|u_ z1zdLL*6j_4&JR4lGKnP9=Cs$m*t>LJ2t5Jn!VB^6%G-wQf0~(Y8bp@A0GFgb3>9b! zp`=&;I{K4oW|)|`gY>m6TCnxYHhLFRDr!hJ;7uQRgz0T(ArcF>U6zXB-Rq`{;W4u8 z*#6pV6+3D_{6gDma(4)4o1$_%=BQfJNXY6bI`*ujU@`F&qGpKk7R;zs;X>@KL%@va zv{A!UyhTYsI!?zjTO9bZn%roH9X`N(O!buYM6}Z2FVQ@krbC2GN1iFwy)_qS)@I-k zQyIEn*Df6~1B0SSGahXw#9j+B>J)m|Q6d}IrO;Kh zV*4_eMR}#I#QB=kF%jFTGVgf3Im!8k(Kn>MGGPhDWLRjIux^oBI6mvxE`Qc&FF^&tz3bN}h`w@+bLY zijmYgLDRdV`C;+hnprnSLulBsib&Wa8uG9|xDh@Jp)myQV-NoQIUN4chx)&#FL12i z)!Qxa@<&&TX_6UZJ!`RG%g+M3c`_oCBtBCG1!}F5by0^t2k^4z@wUyEu8@t6X7?i# zkDa;9A0#4@Jq}Wwn&+XSHEuA`y#=FB^dl^=YK5Fv_NxU8&(Sl7Xjc0TZhQ;_(s5HY511dKZS)o?yyGn3!1|sf=AIg;aDa9Ck zb?fHshY}ZyDF{o1{!gxWbamTR8IAsGiKEpX113#Sue65frc=>lMcZ zD+gRQmWw32&;nlKyHP#oT~9Z!N_1`||8)2g%=I6_4c zgFrAj$S|^;@V$LP&O;=o5!c<82@-);>0Tt{R*#wj zz33*%hlB2301lf`r-DbeR4OvMKDYmy89D5;IFyvltj%mhu?&shAXs z2x#;_UiKitBz($EQg|F7yp7zCrD{9JCd34*FzwumqY|djpQdIEjTQw?)4=nDhMnfc zxU7V5k8*$#58i{8X3ey$Tv_QcBHiz35q|#7w1`O%&8XK3yvN}vM^SprvHi z)@7PwIYb0)>C7^$VlA(5;2Fh1X(@f}k(3;j_NQ&RJN@wGi=5tCg>RhAY*`O0;3|F0 z@AAujIo8!}E7h}_?8UgdAqN)*R)eA!?RKwJ&6G-_yDkWAB1aGER`&e>(L29d%aiv# z`$DlDVS8{rJ+G?R6Jr+={M#G0m^E_ zQ<3$djqkVPBG0b~_?aSpuIHciTFno-B*K6A?*2BTy+8MBLFc7a@&2Ktf4NKwxxNY# zES*TiC$}u4jm?o=X@Tta%FWAsQKnKKe!{qg9wZcgOKBp@SA{v?^)Q+)(;usn#tS)2 zt>~@mtR#9$e|-aAz6_jY6lr)%gYpYDlO5mP@UlWK=p~MtS*G(WwmSz#hJT`ugCInY z=#&#G%BTxxq(W)kCzkf-?%VZBs|6%zx^t(E>jWfi^-uNKcPd);!!y?U0?yq#rqZ#> z$bx_gC;d${+H**+%;yd)9u#trIN84<|L>cF`2Tl;5h3g=f(pnFa2a+mcXe~IFtPu8 z_sO+}h1m)xt%>(ca0?!NS3fjE{^}!qLvrMZ?L&%z})ahX?qv zIvK09wVj)V3-H&@#LWWmJ#aL)AY+xau>NG_M#js-OU5ea0Ni(S{Ck_s&BYzKtKn|y z=IsPr$l05G0{&?J^N)^-sf~r18yTy%wYi%W@GMZEqJ_gJ;F^bxi=CfLSQz=g`g%bh zw|Qn!OEp0tduNP9mL4wS)|5;U=G0Nhbn@slq8Aw;9nlL0<8_MS2q!p9MLIFb*3P!T zJ9(W{IHdgTtSy!nyNo}Pp90Q=Clse{`CZ4;IsJD-U$4s=8k&n#+-F-#vmdWDX8)L( zeUuc1{lCxudk+}XAjZVR^qSUCX%l|wla?O1M>(<@)mub$ZElE(ja^bf#KtEfQN{{E z$AO1N9!bHou4PJ}+&9YrZTMDrkBfhU0TL z2m4lJUZWp3xj8`tr4}@djC^K{3++G8fRtbW>%Q|#E=pkVR;9{z^+xmIsAZRdoZ~8~1YK(N|Aw?sGEf*GE!p|AItkz2 zZz@6AL&+}P(I4I&F*h!WzDPYIqKxEjs9ZQG_>Pl(Ziq!9^KDrQ)5eCHV|9``2_a$a z+mG~m3n}h~SXI$cfrt^nM|2;S$MLYCNoec0@8{3y+dc33`1WrSFT$dy-9JvqcKS%X z9zM$BAqsg%Ic31oF=?CQ;>ghHqc5>QM@@J0z1$};8o?9>uMGWGj0s@*uYcT)Cpz^^4m**-5f^Y+ppq3>||!v~~qWL9$C(s9AO#pOup>qXUz zwOjgi(1&N_cfS!%zh7rN-^{f|fts5b(ABsJc`&?DHj=#oHN8^4SOV=~doz+>JTwI!)om*X9nVy)Rlj_3K5#w>-actqqe<85RhDcDRlwta zi~Lu70ukTRL9ZI})x?WG^XxV^dG`G&ey8OpFm{8sPf9FoM|(ut^8USTX(=A7{&if3 z$S?0J%Oh;&QkXHXUrAw-7b|=lOYA2|a`2rrs?s_;Vaav~h>_BQ?1y0mP7Iq+WW zq2L_jSKY7Mn`^BPnjG%iCm+fpzhtYi;5EN`1a8DJwZS*#D)j%;3D| z>5&NuuVKrQx*8t7`{QX;#$4#K*!+>|MWcGBGBom^*1{s{?DhRNRP=p4E)vlYstQI= zXd=C8@!ba<5PUC{83F<; z|E?PRU$Kv{`(<8TtS?{Z?Q5`!o<@s=$21JCLwLx7LHQ$F>10RuG)JTljGt;Z71P>g z%Qch@r8VDVw#8X3aJ&>Sd_KTVqeH7Izgu;!YA&^*Vl4gauD14En9)2m?3pPQZOd53 zNAN+Bo-%;WnFP0GJs3q%JWf0BfL4wDU+IbvJw@uJj^ouHXwkGgzR@<4=v)~5N}uyN z<74dP(Z+M$d}cX#n~!ivc`JOG`H#noz){3xvsCk+l}}RIvMQa|7-8L9?omh$7*d~0 zO->x_8wiBuq8AE-7FAk}+}+qI=5!2N)&ia`rfFFevzQJvaykE7J942A&x2?SBJYNZ z?(gS?JgX$n)5g1KJL7S`lf-~Ajg|7i?=wEe%RTpwTNjso!s4Fj{!Kd!(SX_!%!Vxj z2Y~y|hCfZ1==`3Ejm*iem&*Yc={Vnex##|{7t>a8wHLyQpzX$G(y2D-frm(Xwmr5u zMd{IFLSurUF=Z8ujR$>$t}MP9^oK6IeNS8B8WIa`B$RtqO;N ziB)w;9q}a;%5}T=;j#VdgcJX{HrUb@j#qc1dCQ~yWU1;L?hmBlNw%KW?L%+g*Bpws z{}eHZ27N@j=s-Zcj*MsMMefKU+0)3v+5=_OyRLX7-Ih*%#ZcLD8z)Kkl9cH(!ZkN^ zJ<$PvA^Na$rP#BODoz{U-1tJfP(^5abWZS5%-1MtUi4ET_4liPdk;CdbG`cRPbDej zexPLSji4@M(6dXQclerIa;9$nISBCw_)@PKT5R)Kr082~jP9wHdF48yqE@@d3OM)$ znRYsA$I}_-b7ukYv$^Kxe^)A8*fhl6s!5U7&Vkj3q-I9cXYO3ES1`$oL<3MuDc#Wf zq_>aZMGdN@iq?g6&aZ3@w5o-XEs>Ama%YU%D@ws_4`$d0==yG()vtK}bOI;{hCmY=a6Rx!E-~2)qjIGSm5GO<+e$OJh z`=oo2JWg&%+_g$0T(W^3{WZo_j)B;BKg9_??cnoZq+h^FDSpZm6OxdHd+n%hcd-17NCqV9_ol}7 zzlAo@ki8_?c6&z}J<_r+xU2mYXi$(TIoXQ_6E*h_H+hI6(pP2Ne+D3e5c(h|k;(b* zmzIV6KQM=k2?p4uCNLFy6@ZaT`I7Pf%|M(I$iRvkOWvmdEZ$Wt`>&wMrvzTB$fcG8 zU$|u))c=AlTp-hGSzJxQX%V;&#PTu!iccP9{HxqYiv92ch3O=ebF#?0B8Gz}jGI?d z5sI*Xr#lKM(Z?dHXuU_;7E|u2%s-AdjQ-vl8J6O${sYYMX-DMuwMt+%1opqj zim4km?j}9T=28VJss)5@Y-bv6g>_LP|;W@spF&q)&4~-p15M0&t#0nu@?V z?L5wswSVP{ zclbnMlIe7-u4T+Lp=^Rv%I&|9(CUy~G{Aj${9g}$gu$E_p|R}u?MayGVt#Y&e^=SM zw})rsa#*Vo`+jqf5<_IO(JWTz)3hx7rL{tai`CRXmaK~0%7vWpE6pI zz&}x=!~$B##A17P`W+kXz7UTMIFXm(ukC)<2{QhN`ziq!C=icTjPbT-ysvE+OGla^ zude~&37tS>>d78)&c^i2&cE^@P788=F%xXCTkL*$Jzt;1>3BFX^gY(q*3i>4;H)Zd z&G#b-Ivg&o<#z?v#$R0Aq%MQxylZ|x`Jwgq@O|scbngv2_lURz&s zp6{Q9gsXiYRydHqQe<=5-mWaVmNGDWYWr07xbzS){_O;{Br;Z)kWJDAFuu7|l z#n=|g{{beUo8N^>E60$NY+uhm-gu8)8BxOkOtV)SYx`#4Z}2AuyNblz!M(ml673dDR6)6uvt1UZVQ`Ip2ebKRAu3Xb+xH0 ztiW8yggPUqgEmLueMakV5lH<&yDasAhlBZi-H&o))Csd9=Tv8kbK*OO&p9Fz6HLb^ zKV2k;^Zn>lV^xP~!WB1NdY?4(eDxFTQHw^83Ge(;87y z7c$A&{&>l_a_}?X4i)>ffH#h@W( z?KCly^8*}ny?zc#YC&Y}*iv2*PNuIUiAsZ!`mLV(mVGC7X+y;$o-#`!&lMI=RYjYZ z<@;8g$STEkVN@TU2X#q45s00gp9y=?7r67}c=?w!%$jk3PX6l_IIup}E zLF-+>Ur(FN@qR=Yjwcuo0?z$ec`td86S&U+#0jpNJ9P#;X-uN}dOsF@FKeoaqkOYU6lzBwpHIvFnw&eC&j#U-xAkb# zkL!16dq@S~o+cyKeCEUNmBe4>8pL+x70Zrm80-Z;pNr;&TE*M5y`J& z@Ty#bm3?0Xg|;TZuddBfLRci8vsVnlcZ+5PU@~Hmf$mH{2rO<|-ni!X zf<|+m`!Rh&al_}*{qQk-EgwAox_T!^zUi$GS%;aX_~(sP&4Q))0j8snZZFroaaU7vS=&ykTuXXsHAa4r5#(IH|;Z#Dv9x44$u|#cH@s1+C@0m2< zgOP#jCX$iFLoT?LA@nxkm0tOKk>=ke2?~}XAFOy4Z$tz`+3D-wuxLp{^xXYm=0I9s zP7|IO8?vyDR~t@>wX4|N=YO}P_lQscR}7Y&1#t4Vg;H{I3O6*#f&9ltdi0Ffhix^P zWlCd1XULJKOH(}V|CUtHyBD*zpGV&T9`K(4i_r>Sq4&b{Ksrdi0?ZfA$-lOW--DQO z9rwX&pdNH663IR_GH>Ut1Z`m>CB10D4oT11+84N9mtaz^pB4#I9hMLID^2D~WE77B z_i0xH&DDVZfJMI%^s;sOsC1haKJX3|_L$g5JqyVz=$=tU`t0XG_H})|xdCY7HNN+r zl4>Mo$%*Ry8YDPy=P~H%R0g7|E(lTHQ1@6B02kgr<9%$XuRScLj148P8!VG0gj~+E z{eu8<7Z4?7AZb()6U*nw*1#4dmBrBXmGtUaCubjn_BQc4o0tm{_s#n8lb^C|S91F` zhLlNS+y(2ZpH=rPG8f8Ak1y*5gxLEYQ}T!({QAKVSFwiizioXwR{X2j^gVZ+2-Axh z?6V@`PmUw&ov4-)b1T$6YX+_l0N5(Qne_fUYk-6RT+K_?vvK_}zsGn0hw{wKl|GXRca(f&=wRuzbB`P*gG4hShiK=M9-5ffhJ z-Ui;BWo08bXG%f#hq%zZIZD&hEtgoBV&>{eRv4 zf71Q`{bVwjCd!1X5Wo_yD`U1=A2`3!MV=_b0*`<&G^i5b7hs|5?ddCHy7qNf)>p>Y z6$PtXxhzZjVn9S+A(T?0rzT;FEa=(9yP?(8a7lKd5RIro_g7y9P3`t2RSktr16|&EUaGM| zf&IY+%-Ye9+8_KU{xCLePIj*EpCeKWv$3t$MZlC?eP^$=Lu&Ed5&D3WVxE4TgjY4Q zY4Wv85ytE!47z*B;s~uF` zr@Xr$>$hPXm9uxHf_;#`Oi{N7*&hH@lofG<1p-cczxw+yzLiu+UWS)d)wJ$$dLqr! z$Pp6}5?;OrpA!-Ie;Qi~yTZ#gSG;XB6s~yPfDN!HN;v9YdanX`YbQ3K7B5J7eq&Lj zIZ-D1Cha_P?Tjig zQjgShTIx&#?Y1=~Ln8I7p3H43050K!5e1X|_$%oAWeSB5TN#CTzVe@ySr+O|Ftr>P z8Qy%HlQ;F2b1XXbb=I1_qe#NJx))|6r_u@;vAF)ZBPwQ{ZEBbJG;y<0A4! zhNPh_)%kmd4C3|-lQ32UNB%KjwOI4W{GkkqM**{*O_-T3^kQ)Yvf!u;w)>u(G~<8+ zhTPk06@6A_k>V{l#=9J|To_`7%`qYyS~Waiv99pX1}0<+uFhexHVhqxvatq?jns19jRMdP|K`8B zsJflwIW0fXQWP9rwV9jMHiSbc#7S@-aWOUCRg3=}lqaUeXzEh~u>3ITH%@W|-oy|b zk}7jv7_-1#PlVq+ko76?*nfLip*EaK)AJc@nUz)+*y&9gwj7f#na=y}r$a9=@@ft& z*I7xrjEszDja%p%x@6q-`gH8n5AVfO?H!1=+#0EwGYeLJS2~lw9n?NF5S^W$d*^>W zW&UYo9g1H{#bLFT->50`xS1+OoOY{Ri|&0EH^hL^7{N2=aWDz|sh(eg_i?Y+;-x;Wc~&TJ|X`A74_o$H5~9<&`L- zezz3@>&?lC)KbP!8q>LIvSKygr9 zQBHy9wx5j^VcXPes^lLUBLKk=Ut&>W{(sne3%01bFK!qR5Clmn=|;L6hDIb6rMtVk z29Rz!S3C-|No*OKP zs=8`(k-eymU!=OaB#gwxo*?EsbNiwrTtd* zB^{ltXLT1HzI)q$Id$IH}Y()*9zjS%A(L7<5=Ox zX;o#ByJcrKz`9ZogJ>(9Np&EO_${s^6`EzBKF8Swr*^z`y&-^HcL8&(vAG`nZWqiK zL?PExtQl;CY;E^c;hxZkJ#z4MB~ab(M$hS)--leZ{ldVyj9%El&}inl5lpb^byNoMUt76dUkvk?5k1nYdPf|lB(iuTo`N$R<+&{c zfvN<{6k&`Xi#^hi8)fUk6X5xh+4TJm3X=Wygw`Gay5xKOvh$tDIm^h|$(B;WVA873 zE9CGumeQ5X`{`?QQ}S~YQ!~+fziZnnn`hD~I0_PT5xu@RhfvU`SR9%*mW?*|#_T2I zK5zJl@1Gt^{D~*zR0_mqSz=vC!{9)J7;pKiP#J*q=a*zh>|BZVKDJ$2&jq)1($gX` zSS(ZAICA(0RR_`$XzuI5{jmO6g_HBc+u5e6=_+vz&gX}rrk%Y#{kMCt%|NV4f&p8+ zYUy4p%L%FCs?>+wk*%k^ji|^y39IRCG*wB>zdyQ8lI)tFo1n~utbfK|R*FwX`i zmCVh}sek?YGdcMx4&^S~g(KyY4Up@*-OZ`ij;o4f>-kH0>3X){_Pb6^&HkI&A4N`` z{8V8+mhJAHbQ`m~Yle#~WqP-QZ~mrz=qGDh?;yWO#^nXh^0bi`n-Ih}_^3r}g4(*S zsRqeyGiMqZ+3i! zi+2{OXcW38K=(A*EQ+o-x9V)2s-@dfAE)-MPbk`ZjCW4sZBn(2QE7h{Q&YN!1Wqxi zE%J9~+N8qw4xON$_|9dzKh$rvpD*ddb~~TQ4SXh&{1JaZ0Q8+f1Yv-X(=<90&UP(^ z-7*e@#p})iz9h5T(dD2Xp(d$wPC0ZqYrV^Ioz;9gYj5Y9RaG5MiI*ddYImhAE=zzi zz8q0cO8i{?It$+IK0hR<)lNFLos$$l~mF#Vc*u*Y$aw1{`Vad*ECUe%O3d9g=D@-7 zhNZ`!f{ini%i2x)p+yoy@ZP<>HL%{e(uO2Kkn$*T&4$aOllTA4gLPqhn8&w%tFObt*JTEOVJLs(@KQ>dF`G=g z=XkZr$MYXJE+&qhGNQ3D+IMBl=Uy20kynY*?m|U8l7Ln4E`!{GD@>RBDlF55ZW<{A zpHU^h!UQNN?@{KNDNc0=4>`wU@A~KGFNIEp&-2N*#8C@Ts665XcNumI2Y+J1SJRNt zca*Ov%OTo*Wq)s|o}6ft@bA zQ)k#!?N)#uL}eW@>t0*srmbeMp|eze67Y zzN<0bQ9mwK#TnibrL^Noh*lYhB|I9<;L19M`^Te-H9)n{LejlzW9DbT$2GA^-xrMo zujk%9>piZmb7jDxQHd99w)vCne#@8o`v^DCl7QO+K)CloZ z>n5?Fx#hC?SDCA$!vp)T?pDT++V4qtE2@+i=Ur9)bzU@JL&>{z=#-qF=TN3C&$gcyUo6&5lYxi>Brd=)HXK+yHYhX1o-;fNkg zDB0gkrBOBn`r}UPhRer=Z)(1#{7>nL_~2|3cEM#qIqSgKx{zZKH*)j`FK60yya9M&&JhQ7-%** zeWV4P#~3(P3K%siFw|nJ`9!$g|1uXf{kSsOz=39B!X)>V`v z#`VASKTOQu{{y)hh5=V)#&aTzUe2FCe*i_v%Q&n4?X;PhZhfw)sRPE(bOyF8tGg|~ z*;jJ7gi3e6?@0EAlKXrFs=S8r#;J2fA<6=F6tg!9YKF9bQJ)jH%$Pg|Q`BDe_P_^t zbLWQPZp2FIB7;Dbzef2ZB#!T!ZC+i{9qAf%U)#1i{2OL#3*za+i0x@fj?M{GKuI<2 zqZt11ZU?I6iJ9!r!}J@>?36}`>806B{GRX`xVqTgOEf+FB(ATp@J=#WzJxAF*^Jhu z9B(M2R~lOJ?=vgU)=7h2DD?mZl$6~Kg(ytAFikz}YzyHr_cq&6yl@D_;v@{ zs>>5I!Dr2I5=6tuCWtC6^?qjK;vvT^bpTWsAms^aoY>tnj1<3ZC%~4p1rIH*AB6&2 zLWZK!F%`Nn*`5mj7o_7G-MSaLM73xZh7)#c$4ap%%28c4e1dt~Z-b#WU=u%>d!S9& z``-~OMorn}7&Zw#n;|;ww zl~^*DFQJLct&{V9|29L2RBamLZMHZ0X8$@+7pf_K%eT5A^eO9= z>EeD}tan-DkO9A287b#6wp zHcvNnR`Pz&;f&E2WP8){hPA%P9@>Aq1oK{dT1`~fdzg^KEYqruK%K8~pEMi1qW>S$ zGJphs`kI4(8TGPnuAj{N7|3{^{>A#aOdEz?C7ChfG1Wy1iPvo`N=8ncB98JJ;f;$v z*|dnzd5@e(E@m`~5-g}^P+^fG2=AS?9@6tdYlMjQynO(L4{w?O;5j1KJ2y@;GF)M| zqaN0`EoB9X-c4)z7tQMWzKJE?TK#h!qxh*v9Viwra+-i;?2lGp{xD0RhN-uE$WB)l z-mt#%eiH7+1N*+tI#gTzJi8bY-km;*A33MBmXhnK;H@REdIcm6HPA2}+zuVgXb*T6 z;CxKctk)LiQbzV%)%NwZJw#6dh14YP2)gomA+mnCr#q2Me|k^S+E_Z5dvjU+1Ju3! zZW4{nOEGOm&y$05a}Gozg<$#LBN0&;^o63O%GEFlM)thY)cE5*TiUv9PH@(CWEWlQ zs`xfKDn9p1oTS+T3VTlWe^2CVyAnVSA)M4_OWU!>#`-+l=0YY)cb)(2GhT zpctFIa|;%oAhvZEe$hY4p#vf2gB--paVUm0OMg`%P^I?tm3_8Ub4E0^pj6EcakkXc ze5hcB(aLd_gn3@mD+A10Kq+d})7KL`?R<_x*u^a>NlUS|=`Ofd*^GU?cNCj3>|m5W z+ha1lqCEhfi0J+9&SWLF{g-SW+q)=p3ZdJ%4)K#0IcmoU7CUaxS+6&fO;qw$ECwdV z0?jVC(&_50ioy5FvW>9*a9*tMmnAE#MHn27!`*vd&!X*x)aULGBG zL?PfMHfjCO*-ymrRm7PQJ(OlKM4zs?qP~oJjjMSCoO^`cXD}xv4N41N!d9x=wpO?v zSI6~R*b|+w8AuTB4J|Z{^D7~u&+%yypUA}iikFN?D@AZQqBu+TOy$dxI?`~J4Ay=i zKMTaoCfr(YP)#N-x&OlN@Dt}HbhDort~yzGs6{+P?$0Hmi=)1@lFis)a|Bl1$jCWK4w=N3rYR7EL!}v>O zB?!8q6;dLR0SaeAO^<@L{K@;F%(0l0ZeCgY@<-WX&mn=x!7%)K%zEPDn~|@u2+4!F zWL>hz<`jq3Dg!=t+V9P7=wU=8W zX9Cq=bR=hCpK$lI^EG*myKjya`)@+Ys}ge#w)f4S(4SkHt4ms1o6SU zF)|0Z0f98@*RgYE#>OqvXtL4a9qL_m_2-vn!Z_8BWRqZIC(?-!k*2UptPJXU-^o(de~c-(ivM=e@HW#1YJlrH&>>U zw#b?L9xbi@RrhhqfiE0gbj|PA{*R4QMDR<$J%#AnMAg5#V8w2u>hT`eI4Nf@zEE() zY93Og)jpMTgdfcmx?=-Bppi6U&AEz=)->t9e55Z}e|fE0_BUbAL?_dyoP;%-kOIvp zFs0w|XZKSt2U=3UeZz)CkFiYd`6Wh++}jBT*=H6$X{sCgmltL*K}g|bCXS^20Y~PF zziJZ#{~UXkJxVO?;ZJ(;eW23zO>M$G{qZ03xUGt~ok7mFp2y&E^6}~>odFvU%I?pL zQaS9X8cUUZ!^USmTk|31^G+pQO#V39MvK%nc3MnKYl?oSspgi@)6a_N2y>k8SXEL? zelq@-_~5`Nh}`1-4sJNxLO!4Pj=6#KZzRkNh1nWnT!=R(h!a+%2MA8eO=q=tT|Utk zBuIBGV!RFA8KloPsfo1Lqp-Kozr{;u-i1v_JP0f`R_~oBibcVZY1IM4d^erO=++Uu z=A=u10B;HC*yz@oiQ&wx~av>gie?Eko87 zO^YemAl~JRtI!qkmlZ}p6h6S!2Wl%Sy{9b_(HfPCOeJ3^rfotcSDV#iBAYMKI3@;p zxy5)L?)n!fytUh_gMa@)=kG}2-=Rd(E{&u;G;G zO)0CQVv*aa?9Rq_e~TQQS(~+7cs`_4@Z|v1v z$U-03A98IMnK)6>@u}9)gVDAr_nLma#D^eRxa>N8Z!9`H=z{8DkZ0Ku8Tou`jJl+< zuU!unD?sDg@TbDxMZo~;NiJ^=e5sr zW9L&^b+Z?QQa+_y9`vAxa0jz)DqE1%mGXn{@t81Eo_CV8!;|i2Is1Q<{B2koLI3hw zRf-}4(SpwHcZYlv%Cgfii-)S^4{p{atqwL11VeYu{*%?9T{(YqlKZb5v6I@~KQF_L zZoXszVS)~YU%ZRiqI5GbF!TvUstB{ zJ~nZ)9DB~7-&Yp!B&w$=1S6alZp;1qPaw(g8Ntl*0ybZLt`0rD8{sx^qs5#z`pi*X zx}W;4Zx+2GRj0bi<^fOttMGQtcM*AFSW(_Zwf7Q^X|YXshYPBP_pj83FbsihtTY_k zH}H~7&TmIwURjG=R)M*)R!za5exDrL43@DJ3&NbYC*p zPpKUZ$#lGKiywX`ji!wf=T_E~@@AP{_SqZ1GBi&*QLtfy51AzM-u`UI+uB)s|78d< zkq4JUW5Olv`{5wDj&lDu^&M5U|?B9a2;RuSZZm+Qkv z=S-F?>27 zi^&bHysF0w=rr;5i6{rLE-Y*oIc+m^V#xWX# z%4X2`e4qINJ0A|(!w%asaW#@n8?D(acl)=dMA%+A$)J;)z|-8l9>;{&*3_xO6|7W{N8xyy0|a{Z{0x zNBPGHFLal$J@qE5%tJeEl&a%A&#KB}jai9?tcZ`;+HH1Wbz-UlMLGwtUl?;hB#i~2 z&e?lPJ$9^B6CiHwGryovjuLBDei*%(w{-sNt6x9sXF&*#aP( zF3hupZ9zp6!9iZV-Q(_BN z8d>O5*Yh;pct%pZP=_;=xIpm4_qg1%rN8RV2iNJfY>)D-(G+`>ODO-PdKZ90ZD30R zk@UZ9xXbdsAPX-(%q~y5m=m31e_+v%u(z`T+EmdSO4l$WkCL-;L=D9NXTT6gtRu%< z*j&lR2G9_J9M}6fRE3?sX{wDyo^rT*v^>agX}8P@wb_SeL$?w1hK)Tp)RhW?vV_br z|Cu$PwxFr^dsJ=0#E}}um6Z$KaALV$1&G(|WqHT^YQiiF$+D4VK%kZESfuD)<92@T z<_2H2O*U|n!wxO1ayzw#cS2cO(2DY}%J^EAu;%(+ZTx^QiUJPjJ39EEm}b#PMBUns zDe(itNv-jPNp-h#Mv@k7nJ}+MY({amNig?n2V}WzHRmEP1%%LuY&bjHr`^lXvLxYqq2Ami z%!CXh?{0@^5aH3PcOE_{dvJ4eM)X*`qgDZf*TreD)P|EL;<3v1(%%z3JUeD@rD~pS z#D|}~=7{7h9*}d4%f3Q+1|~wv{XQVy#1t8gP(cKA?bf8TA7@K7y9rEylhzP_@vO1c z>wo^f-1qJw$M^fZZdVwRoBXSMCrSVc_XjZV(;xDzsa)2)Kae5c9lOURI|j+NgV2^v zh?_}{4-RDzILLq0zcZ?}K^2LWvX-==_dSvN6&Ve7bp7%p7`m}{4?b;svYWKL0z0q< zXPE)JsX*L+)|_ZVCcFdi%z600;l^*`Qy*lP7B>kIJcFK&Yx($i1UTOp!0R^x=N*6@ zxPhkauJ?;n?*z~wzAN`5 z8dawf4l!m{h;C zGqeA+*7ilVS64evO&&wHZb?EjjjR1V*fvq=GsKc?^ElzT(sMlm0B=SM>jzI-1;8;8 zgr=^E8(@Ls@VE!yJX@MyY2IFC$BW&jSiOOKUpK7X(?IoLL$I>ygE>!smKDb-lNhNp zog*4Q5KDrlVu(Q05DO(ccnn2gJfu;NWk8tPzyki&qIJbit`lPHDA+9haYKzhn()EM zlnM(c?88JTsT-k0uimtAd}yNPi`RpZ3_FDpFk2MkOg#XLjHJ|YkbP9qo;62yIcEM0 zy6udd-qPPEPbVGartItTQ02Y?6T%*+e~U^dW$uOgqbcJeUF-u>4mhXBr747fC0}ry zssIkznx_R{$0@4ZRH&jhe==Q!Q;^3lrkuD z-Ub?5otkR`SYO^nMMxo5QLHak^|e>!{LX#}a}@Bu!S{$)PjxFX61$MP@*+#JAVtBLDS zrtwH`9rBn9td=-7J7mjNR^}y~dj?>3YwQyha_2jIxqp$-re1CNB9ykis=)3F@4!_S z7Dvv6I$kJ)=74QwUPLGbye+rMQ|`608{CW8B>;iO04KQO@p)IheK$eFM?SBz4uiIv zVAVE6*@*yaEzsUt7Achg1=8KE|8fyN9V6koju-$_X-1l_$GPDT_o(7{fDcjn@8AVd zMv@0Ugd#DoUHgi6`uq16hZKH}HrnvaTFz1QbEedVI~rCdoR2A1CWI$d2}%oiUf`N z0!G;d)8tHFK-7}uxqH_R^X&rcGgpT*B}B|yB;GSz?U%8hJArU>Rq`25mz;=%V+?$} z{ajD18HRAO_|7d4haz&MWWMe-tOOqb$XDeUP#;IMA}0C)dvOpY#aGfGrEi@ZEnn~% zWH?7!2?y#q*~;>~%O{E({z0DPv8hwLW{Si&v23gqPnaBUKz?ST0lUJAFuS1EPg>4YvX|R7r$4P zq7z<5HJJ!Tb%@DKI*O8qZKwU+Bmf?$fv#e&olf%C7O;nU^&#Nsy)H!GELNVLb(*Lwk>F6CR=N&OTp$V zypj0swKcAFO18GK*=s--f|=PdEq(2JK;{t}6@>+g+?WJ3e82_)x|``hxZ10mz4Urp zna(zF01($~zOuXAKEk8pD9u--Hs3JE22Jp>)X@T(7vV6!7LH3sM&>3lK#sh4?+BWZ zz~~?TnS`TmV{E;qSAFuMEZyqx7nn+CA<-2$#za(D<w`@#EHgs3KB)m^Hjw&Z2RPh}cb)28j}PIwryu81Up^B$hRR&H zd=gOjzyN2rQqwMmE!dq;#(+Oz3urQ>Jn}xvXZXufw~5&U9!bVTStl2htBxcnOFF6p z^3lY=d6Kv?3SK`ae~qUqNPxQ5=84ZvYnrb;zgYUQKSEpkzh5Nz z6Y@&(lou!48~FwEmw!+8V7}?Mdq7>U^~VVer7lmd-{b`}H+gL3DT-H!lgHow-XjQh z!TSd!pgHpK@(S}y5$BdVzG?#;jb}@4&2=Gk2iX$L%mpvWXAMeF33!n>9gr&9!;Wmt zCPR^hAzNiyKd?RO+hbIXn9=S1Nx4JCs>r3U3B?o;u*D9scrU8GZVvI7)O5TK3d}Pc z`+x=U5n~p8IG#g;!%DhtZ?v&|pVr!MAZLDO zfc|JRyr0b7>EE*imj>D!$d@c{8Yl`ODv$3#ym_`S{?6ZFC82R9rV57aeo19h=iRYX zp62pGe0r15r8A~iR*Z~t?WVbff0`QG#2Z;yYyydBVI=$)y$Uz}8gf3$lHhWTE zx#_A2PD9ab#dKa>pNn2aMa4K9OA9I2rNyO%-l13P)7^O*1THr-t-dUZqd~T!=AT_;xZ*w@6*gk6kTAi={4HoV zCcvwifq9R=cJqe8AUog>taM0u79kWB&*qO{?$`0TC-CJe z%?~xLKC2VfzPdBINi!r1Vh#kTl^CJ5*|#pxL&6sGnHpZOlN@klRsTTb%ddiQyQc{l z!`PK_nfz|7Tf}$;X6t4dGNeaM3kIB*9bcWZ;rr_(&{gB~lR7hRz7CaB*Wuf3vWTGa zJIEGRUkD#obuBJHANyjgd)6oJR(89Hiu?NrW`WHIV6OOT%a=TZ$`3!mwsX@SSuGd)+zo^+nnW%d0O<-fR-B|8N&X&sn~-Y21aOTt zDAB~i_h1f%{*w$rOGW8H*QmjI4ZFAt6~4d)o7OND`wOGAetM@Bv^}>AYJc98Z(R{# z$Of2l6%DLm<9NL3f&%cH+{rw*l4T9B*ixxZb@=ug`fk4%qaH^FHPjHhB$o>8m@db4z1aUn}eVDRI@d zNpRE1y3Yj@NB{H7BuJ)Sja;jh`r*Ga=v7PA_665Qv9#6fP6tU|SX@?uQjDjjj|q~{ zpA|C*^5Al~k3)90*4We2*1Z}Jg^Ckb+8e59JGl| zukuh5j+M@sl9z{#_$0dd;sP}X%2tWV25T15!WNI-(V2|#+3A>%lPh5P#hU9rQ~Q3; zdP&%hg*MaojYht-JqAzWQl9PYBuL;Sg)@qze*6a#+Go+i!1=teI7uK`ei%zNHw3lP zZF%eETpw^aLF>_GU6t3f zx)_pY13|V`OUFS^%UsGLWjuk1S-y`%PNTQId-@(%H+;P1YwWDCzBBI@j)PQ;NUt)B z3{ZevMu+}KKOAY3;(cdh<=^_)pYviG&c;(&&1W19rf@LK-JiQy67dAz-fi7*@!m#e z>kl3M(jnqNoSpl(<3>#u2TgtWbaIw1tUexOpVR@ke%$~qfS$`gX?^HsGKRqZI-tx6 zC$f%Ox;;;kl%=nD?f70V;3Ia*sWTN-R?F=%;bu?%pVpN z&`HStva?@@JWn*b_M2fr$a9ibfR64Xy^FP6Sv5b40R&qcV-km@Bm4fj++7)mn0S5~ z2Ixurpq?OMKvtL1rLM2r{VbBTN#n29pMSKR$f`n-C_9+Kfl$7WszO^t_!W~8^;>ZL z`sVqXd929z<7~Y;YrA##qPuW9IWZ~8ZQqwN#z*^rGUP?aC7D0^=jJ|whU{AXe;zf}M*W1bdGq~!K3WUyB3kuPj+Hfe8HP`(Z_xrHbM*=-B<-{v|y~ussjcJn@ z>A(5|zfjGcFs@4jfO4T;fTmS2I*>l=6!2YG-JkE@Ka-c7q`tF5&5$%J3&_6v?(BI_ z3hCDULG%_lG3G!aQ+DW<-wL!xicHdNZeQi(#{#EWAIHm*ZLGZWDNX8(1hRoQfr4^- z(%((xVZGQ*>~$oLOwF@L*c0!?5z4Q16Dii|j3`t266Lg!{mt0#{(Weo0^E6QIkC38Dh0hn$XsF^lq-R6dvJL=Vof|&VWcd%nXNa^z{1tYSyv92w@xS+Nz z-pX=?=xq`^UGK8^Slzrn5Z$rqv5GLGoIl$Z370;j;>toOm%q$SEG#cBor;`_`);{1 z@VBzHZtv}8*I=4(`QR?FnJTx>Om*-;zx|EI9^a$Kc;+v#amGa99~Oq>u_Y1iySHec z&CmOhLs57Gy1H~c+?R1%!JYVPQM3w=^aP0ueFPaW^Mxu?;op)g`Jq)pE{v2)SpdLI zB7UvE+&*Qyu%7H{LgE5>pV;XoQpcsn;gTCjwO#=?jipvX`IWeY>?_$=Zp`Q8B3%aZ zEZSdHj)j@s5BGrp_ZOF}=M^q!KlB<+ZeHp$>w5{*{tpmUmA5o;gg(bDcYTQd>b?1Y zz{268@1I61{6;gxnguSK@NTGa->5v&>)f!c$E;_6!YHFCkT%9IL1AIJp54BZE7~y z5B0u%n*jz*reI6e)>pFsp6s?op(RhhR;J_=vx3UAwOELfUt<>X2SUjgb9P$W+rf8t zV1Gx4<5vZhF~`CIY-<2W#dkYD?#EfjqZhW-uX!gcC6sI&*<5S zan0Qb*Lcn2F`Ib>- zP?A~3s#||QtLGpUbn*^+rhE2Yey9i*AMSd0qZTBSUEL6w)c>U@oF)g(JZ z65;byM1kIi%mT#@87+?QJl|$~@X{Dhcy7ZnO{$MZlfy702HAejuR>&jYCx$#LletKVLh2juOF>0jov4xK<8cs)Vp zG0zX$pw?QKR=#)Lk zd!wXSsAkMk_F3vGNkH;D9Mda2pbu*$j*A@NkYR3IS;86n%)^js0sl??+bI1y5z{Yo z{VI!#tys|z>_UqXej%_KHxpN5-D$Z0-apc44kqI@U(tb5bhRGd#Ar$yo4^^tF6qii zZVfqJUnbPLdSU@tmE9Sj!H}eL@-?@$kr}e>*!YTjSq?2P54X{1im5o!XR#{dRP~RU zsn!V7GInVV5x;|*yi@QVt|HlTz0wgcF^Oo(t^_S!N+EO)%1slEe^L6NP zDCE?wnOoEmOT2+f&c}Pk>Qg_e$I!q^UK)Cs*-33%c#HOtSzI81jTsR)qVQ#yeUxpB z|I|>|RLGza*ydbhWm5LKd;jAg*nJ-QX z8zTU8l{rdZxDGTHysh7ybb+>gt3UJzqWRikXIJmBYZMUF{>#08AqIys$ggr6?c zQEu1LV20>7L&O+EY&ha#=pAH2(>&t==nELM6e?lZ`Oi?BKB#mpcHN`gx{J5wE!HZk z+!6`Vd*r$GqyTy{Z=VNJcPP*<2T(f(2-!9J0vu+fk#6O4dGo2x7=CCs1l)X<1Z(t6 zr`666E3^^-KDu#HS?=fJQqz-m81$CI?zEzjGOwbu(?Y`H&raTzGz9_TIWQmVpYT`t zx@l#%;&NaDln;PqTB6O%nR6XT6;26$daCb0{R}f`!UnZeg=~a-pXzy@4SDZ}*l53l zd@jdDP55v|rDI%4OnYvS90~K(1dC-G{gAEqL z+g2wgggQTJTE%(y8M05Xdu!=kLoP+185f`tnf?lZzO%oLja5=ggqiFubs&NZx~me| zU(*Ze_ft!BG};ZY;Zc|BT=|U+Rb9Ri$c(&ny`rfJZD}wf{Q`2ku0J`l8 zzoB}gmw`j93z#s0CQjk^*Q@8k7e*(R$PFCy$aXWDna7R+mNMnp1f=kP;4R&_hDzyz zioo~pNH4e$oneqW)e?w3;!sn-Phbd9UR=M*H74z_O?LBH8?o^i3!b(rLBXg>BW}Pk z%7oZ)sN3(p`?=Z3XC*!}-^DtLA{i(ON}q!@STDZ|)lqiO%aEKw@#Q z-wjrQUxcm@6<~i&p{VKr^c_Iuu-R|8w}Tpn`%_t4GQm~O@J6=B>~0GXgZi4v)RlD345mf_eT{n0a`Ii@kmPE0QRM%4|!MJ`0!~BmnB;i31pn1|%yRlJ=txsye z?Khp|0pObjPJ#T{Sm{2Mp^UJ@M}tQR9ga}?>Wz&n+8z%98C;sxAr@%F$ISZGw_F!F zDQUi-hD|@8WKuWbedE`DmtoYJv7*l?W!N+hfC4_@ND|~YaoT(ua>+qUvgyIFRW`l7 zdaFbhWd2_JrX^y@zMXW53c{7@iK-4$DZB-moH=jlPl6IU=Ptr<9Td9{$g^NWU1Wz3 z6$*?$yzxWKS5b{0Qy#94hFO0TOPs71aO^4LKfc}w3JoQngr{^(`Lr_gZ;(&X%F0Ug zVNe+gXwtab`l-nUph zs#xXUiSFHZAFIx6d^J|{3)V)3Tor7!cg*3G?JgBG3Yzt2c{0m&sSdqUKv!ZIZ9K zBj01_UBOS&%pY~fPLA+yj!2_3Ebv^Zj=CjcKtPxfRwL3$ z%t2eNF{H)|>7M}sUBiH!5zYIlC_?idjDSZd&{O)v<_GntvY$)5N1aAI$cDo@iRg&J z_LxI9f^LqtTSJv&)`g~Lu~SeC89BT4c<*}&@eO|}yFG^L|8u7FQv>w$!3V8s45tqp zP4gP=HzYes|M1b^8DH^C{0VATQ!xav`v=7Bz1XK^pch_IsAg1mnq5DV3B2=b+jf^F zz)Dy|Mps5T36iVa&p{c1gExocfhJlnqLAg=wqho4SyKzy-03}a35g&fgxI=eVkD@i zwsh8HC+m4&Ul=?4Jw81_QaR;^XTd5P04#&7MO&kTTd4Jg_FN{$8)-`~=S6wn_lR65 znI1LhbA;Sp`rbSC`^*ei%q?&~I!S|9u0pB5AqI?ebq-iRGl|JGQ^i>$j1dA@{=t^Nv?8Z=-zvX-+s|x$%vq-toK9>Ee;jo>knhOu$tOw79=n*sPiDfj=6*Fq_)Mc~do4sltacI7tl<$;(W`!>okb?J)5Eirs zh{nJlP#T0rit}=T$$NFyd%7OWj(FN@B*3@g3iN3PGSw;l^=EMu>;a=mr1ni`d07&- z2KA823-?h+R9J6j>P}7*87LJcq&TP?1Ir+}_ZvD5ckO>@l9ZP!r|ROD=;Ce^N@Qo$ zE4z|L?NO~d8=~ZOEoNk4KgHJMaqFl{nAG35jKjfV9mixJ;$if2z3^6CE-tJkE89Dv7JBfI2(2JxA4{BvcHC7|LE6|vix7qe|N{z;Q5-KJJ+ZJ?>XfHxd zA$6GbAG*3-vbS%&nFY}HkrMMTd^uwtT(*L5(}RB)z_qx{9S;ftyR?{JJ@A{np?rAT zH7cL;)6F)4>urx-ARA z3Ov|_#(4>k_x+$Yv(dB<1yb~p{?rC;9oGVe_>7E7#3AK2A0x}Y3DhZ70;&Lbh$No0 z=tTm?(5y$CiNVSKNrJ zlZ(yNK(>BbhmQyE;%5wnQa`hk6@hPd)Jr9(y!uFUiRep%lz&1$Y;=8_eUssTlw1II z()ywyAbH{n?+D=%=I^OKyxlcF(l4$4`}ar|0Um0#5{F88jY&_DciMEsI%$9QZpc#R zohK^pU&aV12W6|(45Qf@d!N-9`EM|SE2m@f(7`n(xb_?XRc-fy4x`^bKK3h18e*r& z0pu^2%#y0;1=2VsG&}l;@B9y~AOYWo04_vQS&FYGwRAaUs`2m6ZkjTo#&fxtIkSF~ z3M$rLtE~#*AWe*A7#vO0H(nEkMaCgiIuC^_tX&i)$r{X67@QqB{xv2?GF**H6+lP7 zk&&iC(8O{G`3TKs-d8-J$Kc@tYouaqT*o$R*0F}@8CT7m_LONG4nLr?vNv{l?~6d^ zg|t~sWM)2;e<)C;mre4YAsKG_My9tCL&=0-o1P>++)y)=5K{)LBNgY)14`JfZWcERg`2mH=~DuZ)UA} z{SVZ0e2p2O-ovPyM6?6IH`EG(a)?f19j<8rJf4$I^Qi(HJ`VFVAJw{oO^DBbR0F#E zt%kY}{aabTtz->}55_!cjTHcwN;;cin7_2*cS z#G^In>a!#RcR&Ui=^r!N)1Zw?mIz~2Dzfs=On%rXSPpK$^N7)1>mFoJ#4~pNMfv~Od&{V* zySHmp5Tuj_MWhiBq@;7BbhmT~(kY#rQo2OCL%NZcMoPN7yOEIG`>cIG&;5+|J>!h? z;e0tC-alU$gR%L=+G}0wTJxIMoV)^tc#R5Lfa2H@`)geZP?o+(^@xK8pwz`!SRbCz z)6(-O(JYZHJbRZm{4M^EyBWF(-$a>#Wbj0&0cepxd<-KR!&?IY;<=%0uaSqaH3Q33 z<6#(KCnl%76Ce$u8gl^UUL>=>xzJByGvZA5>q-nt<|wIT6@d+iJ5Rsd1os7z9Z)vF zRs%kUZ1Qe74u(NiNc}j>xB4M*7UD%Zs0FnI!K)0L1Uu=Xd=hJ$6#^s-JeN@!I4>b4 z=yo?ldu@ccbDy&`AGmLWMCp|{B^U_su?I;bKxXcpWD$BNH5gv;9mI=Npeqtbfmh)m zp(cCk_X4~j7#qnzy&q!`?9a%bB@jcH_+LY)@}D96&k+89oP~NFr)YDme4D-CM>Bk+ zi~qSN&jGfCAg{&0 zl&N3)n9j9s$RBG^3aBFB1fxxw@;Eu?iO^Gp$M$c~fGBwp-h}4?hUH_6t&q_q>J@ri z^IXJYI92TzpUJ|Og>z0!E;|kj%`B{r;+ffm=B=Mm)gE=at{C|1w`Qk*L=F*s>-&7u zg&tN0j|ILeFS0E(kNaw&>v`9ULQ{QoE-kNsek1MnzJR6km=^6W1qCVUnH;4dn_m9w z``CSdhXT=22v9+uj8g}g#I}_6HzJ}RAAiT|no%uWp`oDx2Fabn82hy=kpeC5h~U8- zzWMZJXD%ASdUzL}BQzqyFYL~Ccll?5osXxZEM{TsxgwxdS%sY|YK!qxfk;D#XJwcc z2?CjHR~EK1yhO9o-^7lb;mzi{r2K^_s#f_1q|6=@c?FYuqw<;SLdn$dJa@%DTy>%Y zsLGXK?ZItb`Xv5M7E{I@L`@eo?Pd7xS7qz5Hd!p z)uwuo`ZV1$eX{}77!X(+@4QWOL^}La4MP`Ty9Kimsn??*3x)j?qc>BZrHGP+!gg(K z%q}~COxi`aRXGH9wQjmpddn0Fi_9JS2)Vu@h=SZa3&2}Q?{NzrOqu+{DoZUvmPOr; zj&0X^e<{zic)rOBb>B{N?M@j5ERVB}#X~YcB(c6nnveKXTbvVHC~$cC9dIq1s7yob>-?aeBeI5j}*u%q_yndoT=MiHO)(twR#p~{a@~V% z^la1kx#i$Za;@EX6`JOQpw`{7}6fTMfF2N6Nma%OJS5Kw51H!z9bFm7CL`hR9r%{fk*nh3n!7AxZs89x(aaDxbFm&a#C58d+g z(^Y-h_NVP34kst)`48unL!+=itElJ&lp=f{m>bF9xwX%v^fnQ5Cex{7fS{s(w`?CI zBNRQfl1M??H}oUYNyHys1jX?&-^Ed}ouM;pS41mvvE!k8014Xx4UXRONl{&q%b97g zIy97({r;?4l!H>U>f20F_Nph8leUpy9_DgIO-X%+j{W!81c0#tY1YS8kY?4l^esEk zxb5^GHcJGKzH{@lM?#3Vf4B?#r3#4|g-l5NetnM~U|<60$hdI=G`ZeqLJ*K4lfm~O4M1c3s4eOyX!xwtx6-z$dY^7D1B&$EU)v@!(Fbho9^iip#2aqG4mIaO z_219sCqnO^R3jjdNRNXN>2bE_+C4Y-mAIth(_#CWCC?)wT*$<#2-lGF?4Z|O{M&KJ z0DSlOc-eVd?@A^Z2!Z!=JcNFQNzW6P>{-GbwUzjdwlGjYbq0j?jmFn6EO#>q?+N{T z$jz&mVHpoE=OO+#L38Fjbmufvrhn&*70KNaVA9I&rYnej^Dy_{m;LWG9eWgVY%rsG zvW1!~;5qcP^~COWAyuKy2axi&M@LK zYTO;MipuBkzC->7199{lQAb~nan6?YoX!q7}~d?qUA$FBnQ4?#Lz zVkgSbwwo_}2WIKKMDBk-Ho$OL|CG^SiNg)M9llo7D2f{nTod{?3%VE439)X^6X@&C z@zY^NryWhXc%lL&ayrO%@y|a#dij6Nt6v8M1pGu!9`3MhwpVua4!HgEncgS4nuJEm_yCBb^hhxjnS7QR;<|cgp6owS!Sf)pPQ*_8)}z?ZEM_M{-9!E;5f+T zb+ga{OUn85YQ|h19{!ikVR>4|uDJ#%8MdV|^gp*P@j@pL7s)}Mk+Dd|q&B1;ccE!P z#l}Y;?cKW`q=O^t?QMY(sBQk=wvNt8h^ECr{jB3-fo4)-atvj$#ni>GvDW;jz|G=d z%m7$~5wP2$~L&7Rgrw^U?5r*+wx zK!K@=T~Osqe~v57t1EQY9ST&kY$v!X21`WZ-zDcxzHWff+yL#2M z`H*|L@n_-OnOB-!8c_Kdi$V)1O~CW8Yw?#eV#&&(|wXucd7N5lnEC z;4iA*2m9Y`2<@}&HaFg~hDr<~v5%QA2J_olidQ%5l_!aLDL)}Ebr>dD-h-t$PyBzs z^J_l3G$K-4?cUm7W8##G9M7mJNUV-0Mu_kR-2w#gageIVO)bStAe8BQix%b@=`}`OXHWx72M3KB!=X# zC?JejLH=F2|11IU-r?M$;w4@Le){EAB`-RU_**)TcY!JyRSa#q>vN3(<`fFxln<&8io8FCAs^*nyiSM=r> zUhb-qG$SNLmgkt7icbB3x>)Qp#$&_x3tUuvC-ds#59!mge%kuijVYTD70#;)AaN&BIUAlXBj;55FZOv(B=J_G5z{1p9XT7&2%}c>(*G-|??E>9Q$L zb6^=EoYW_ulFx_5Gl3@Zf$qhNdKn}X!d4tSD3Rl~aL?<=M<%z{^For&XOtabOVIPe|`(d}+8K<+i4* z35QnZn>b?fC`tHBST!UflVHe5$2^s3v-)Wzh*qgh znZ68~IEKqGxSIW)Jn|aDRs5IkAWDI?Nk%gS{_>unK=>KhKt@iw?69uXWNV@A0j_{l!c=tSmg!u{LT}7 zWeh@9z&Ip^UQbprv+$}IPLKD~o!VhS`T~A(*E9$%>pCqL%sh`pr&VY>1VooLYe(vD zus)>h@?EMGm$t7Ph;+<}gbzH@NC8nR`Ub9j6F}5O=}yam9R!VfpfsL60+s{Ecj-`j zUBO6@Hets^hKW!j+al00yi0RXF8+*cK?AOazxB`6r2liZ|BTyzX2^fm!hd4O|BunK z3-oqZ1JrXOoFUwqk<)DH5*EQGg@xV&d7@t6?RQ$6}QEF^C-j17#t{`G47E zVZeHzH53^%xaMFaE*e94U$_qsrtq-pR1xM2&Yf*R05c`oW(W_|N+@rV$pN&n$%wU^ z@hN87IgH+S@!6TG*TDA>zb;3r%N>eKK+CQmwY-1_(v&39%Oi4v27!+kaNbxEB*{`( zhDadj!R^AcZ^}O{=M|GC19@&}?wWKe*uTSOK?i zPfCED4~mvVhxza5$;G^?ggi6X(ve3^RYS2fWVl~BeU)LkyJi)FlNTKL$_ zKA>xEoFm;ew>hzR! zNWsJZNif^=t!j@uu0Xcy&DH_iMr%E;% zc?GyTqTSbb&3>+z+BI#&KGi!LFV673Ny4*L36cax=L}CVeYS_v-ru=-Va=RYI8%F9 zKI|eu#a!=vqq;wp-e?c=zt=zM;Nz+plt0@VDx_g6uPiiD&=a?gaCS`DnySX5Y)6^f z;+m)S%n?^e2mVa@LTh01IhZ*8L^O@}tE2SoQOI$+mRmDN$U9eCZ4D$x81c;Ohj{*WP3Y`%3QFGDd5X!5U0Osu2g=P2eZZz$QYcB&fkh_znwO!sqtod z%~UJ=(K1U@2d(x3O?k~VHlzNZfgT@#n#f-JE=)!|%cQ8H<~C5AnX<{d#--eJ&mBsH zNW;T*I7;yf;byu@{8{HH5;|@d@Nap9Une28Zv@|ykuFV79_onm=HSzQ@^OvQLw!Tc z-6NS#f~3ob?frK7&JKE}Bl>Xks{G&-5xQdh zS)j-%*C_CD5RRco9myYa%8EF;vLDpbRv&(zJ1g`M7O}UtHW>-TMQV9t+pEYxZC_LK zVQLaS#~)UA@7=My*e7SrC(%ZBi_qFBX{E=5-y{ve^9aQ#4*oELI(9US+h z7PS$sK6sgQ(WcLpvn~w4%>`cFbFfgSDX}1;1$9OVtewE9dv-kpJ&~j*J%5=Xj_xy^ zk5|UwmaoKLRP5%@B$Q-nQklchBNfYEmxuGEwuz5snmt_`ieyO2WtnRVm7e;X`&+Os zL_J3pwMTkFBHd;}+mGgZwnr+Xn*7V)v##b%>3098_V$BN_LvGV1abc}1Yo9!3v1m6 zly>tN4a}Cn(TpQw8JAS$!1rlHLS^{(c59LN;+!1|{lmG1Ju*^vM`F)!85y<5{lP*u zU1%Ns>N@>ydXx(QEtMr^enh5Y=V@l<$drjrDoV@K%<$qZvb-2a?&=HK)i|4MdL?bhp zb*-zdmVBx%bDxzdf249w7j9!E%z z9+Bm6{@%4PUGO@`vZO*zWM+Krb=o4?nYOh_5KZQ~1s%D=&1AWc_+qBt49yA36<8vH zEoElR0*0{}bvCm%*$;8n8s7D`(HB|Vdidm7+9bKPz#PK*k;9ArK}Alb>U zcsCvNr~BB2Qo!(LyV&45YWG$?2RhK*nt0f$0(teis)|EFp|d-NI!5w_nY z1n0!VUWIM=Xzo=$Vh)(>h zy2LI9o^k6_n*SmM_Ks#4_MnHbQ7+@H-Upb> zg0`^toO|$7M#lU9*Q+_$eJy&R4+FIP?DJc+91ZB!k8dJ1*$1N@3K)qngfMas=@JP% z+bQ}pI@K;kdBH!!X2lDBfeOQS`e@_HMMMRX1xu3oetn5n2r2#39Q2orzAO2lFG-|C zi#1W^NDcMN(-h3m@XnK7Z%~@Fddu*<8>Q4&^DO#7Xs;MvXmG~e^f}=N3>A>C*ha*` zNS?+hFd*>$PXO&eQFaDM7`;d)Qx_H)F=kTXamG&lPqN1He>cs`5Q)usu@FXzf zz;*s2zm1?M!ahyV)&(DrZV% zPKzrZySN=o#`3oC`!+rpmN~_LCl$aGp1SX5aJsRRo4*ON^?q9KMu>-&z^ro#jEJbG~v~DkAj_znhDLoIZF|mjSu}S~m z*d!8ZdW z>K>1A@+jI*=)U##&_>SFw!}`e)||bb;mrg#(zswAR7NS%qA3szkc-N{dk`W3gQDP* zmT)B2RNmyCpY8^VtWnJwZg&`$TUdKvS}%WpR%&3B(<-x?jS5^o0VZ#EttA+Jwe~RN zZcO>JioZ#aJvh=35I(aY`@)x3^ZHl9moOQ4ZWiIUFYFi_oGPyUdvFp04SzJUnj2_8 zL*NeFqR`Gn8;ihWciAv_8z`20uZ7T;WRk%DJo;d4gz?^2CZzvOi{thXu*uHQb7U4G ze;pLO#r{ib7I+O818>UV9c@7CNe+q34fIWMm5urbSwh_?_zvwafD*g>b*Yo!$T(ee zu5nc0T@92ZcMr^tTDV^pK2f&`FnA9i6h0WdJwbQOg8$huHfuRN{7F%3VJk$c7}#)7 z*rCi80gbSt2ay_-WBU;nmkelRUb zQA6WtNL`&Lp*G@Xr4bV(L!&_A>z^eDa^LcO1+Dx4PJGAU1k45je0Il)%kx1(X6=m( z3xl#vOq~>QZ_>^$uUuCA(8_e`j*1QL_j00yEm8H-?ga@7H&}eAbJzvn%s|>|ozLRY zj+)?Q0!JppG9htQF>^uWZqdUJaX=6A{a^UamJYUNi~sEL7=)k@12qkJhvKrN>B@iv z;d^eHcd5w*&Y7D#<8`Q=_iae4u+Mf{3`fV$WzWAtacfcU^3PzN$E1$yt8~XpSx$*Z zzv=UpO%k-Zg4)+IV2hs5utZTSPn{A`6DieRc`4cEP6_<&?O40U@}jg`W0blFU@EWk z7e^2i|JPtR3162(Mt$K-eGeH}2WC3lb(OiqK||;Y8*z+16sZ1!?dBG!k8J$6H4ZJx zptypyoYYuis^iqmoSZLE88@mmDn54eTQC9dj`Pr$vS1fcv);|XRU~t}=Cz#W5#^yCf+_1s~p;48vz#<=|WRy>yR6Z+sllT-!m*^_T`{AlRiKXgN&|0&)w)O;Jo?YCAvX6< zc)pS~zPZAksWCQ7_Evg6X8PR@zd)BO>r=TbssxiMR#s?Vn7VNH$2W}$@f}u5)_Ohu zw1_zNlI7pM@V^r^Bh=Og$34Um$i?MoNxe)?eZjd9&UYk`FRrE=DHCfLd*s3#e9DDp zZ1I(Sw^%HvQ*L#LHswCjX5PI#sJoSJkYkuaJ7DZCLooPUwE=xY)6=yd0Iy(6L=1Eu zw5%0&)4oc@ePru;_!TqRoJ5<+&_GMUD|;5pk-UEA&f#GdPxKds=8#-Jx{iTEKP2O` zg=$h9;S~`fI8k<<=C5cNM*DjQV(GTQgkS3*9mtoeScf$r5b=|f+n?Qe!19b_9>QkA zS~@^$MBS3fKivLMg7u2}tbw91QSrDg30$^ z^TQVHVC=v0g3mb$GVl}Ie!ystwg#uZEa~+NWV6*hqDr zfL>~X4`;lOfSKJkT%#7L<*1bJsGw zw)^H5X+XcG{BV#twU4{JWmR30yvA&poF$O?LdXyNq!#ZNBakUo(EQ0f=q2m~yR|YK z+S}jDTT_P2qHh#t!(!DH_Bfp5Ao=l2Zud{bW|x-%ST?ER9S(e}E&b8KX^#|8g-66! z3h*G-Iy`o>AcZ}T>LXw15=8-u)+MPV{4po#mM1m~#8hmVNr`-7ya=jWr_yCKx1E)Eqx(b+SA z@qOzs^qC-9NQ&+<56TN2Dwzc$46hQn>psKRI;W+qc4?3a=nSj6_J@Jvg6uipd{<*YMw5tq zUR(FGro{yt)^Qhhe9G&d8rDaC#u{kzY1hi&b`Gc*$J1do_D}rN5d+3nZ31v}6Wj%M z9FITcYO9?7*{3L~oHjvL8=cB?ms2+GAngw|AB8A0jof9(aUp*;nm#*LE!TP_`HJ2* ztC~;-9KK#DrDTc14`ypp?txQ4CxFxzQtGFBbD;JTh<2RQt3)Ae105YtAf@y5bDDsw zwnPaQgHs+Me1a0R<&+}DZ3BNxy%sONGZ*5^ODaR_Z}E*m#8sis=|`_8t==FF+1Z-w zUd&A^uU?z%Q>eaGeYleANOjL);dCR4$MDrxM{qZTT3X>`_z5ozmD%YRk;XtWw|Afa zXFAhobdJwLurXjj`r2D4vP99l`Y=itZp?DRHMoHNp zPU3J3Fskz%ziOWsD(Z9Q=W#2>h24f&%8^MF&nPVB zK#h3tb_?qLaQh=pht3M30mpfQbgmTqkiY(V zH(u+$>yvxwv*6JRgjJ*X*Q7XHeL_UE3ci^yUeQPmT-nW5ZLU1THnB&_{SqlOpBQ*X zaqz(}ek*?IC|#1=Bk}7(tqrNB%fU>{lc2Dh@6}OEx{1df1TGQ4gM844OqLR_+qyq{*h!&}HoHZ~c+GA6FFq z{IohmM7Ou>m$1_#BB(fS+iLRTA+?BYD^w!W3aD=n{xWQ;4xB#&`nmaD4N+wKmz3c@ zTn%`C)atzdo~7rzI*ub_$hjgmt~Zh2S3G+lhN_CZB{6UN*Sa(ve)R{wc`w5)*OpH8 za9`v%jdS-MhGeIpIxIetmv*ER_@SZ9RoXOJFk6>wM;7ZK-vuL2iuyh`SNDGnS-uSV zQfs$pDg+tj2yu3F*G((p4JkC|BTBUF+b|=J+4_`I{NciII2H(a3fhAbJ<7|IpHI5( zEbf>X_Px(2*r{21bYwAn?9P(;634JNU?>5`aN1R>hiNF7SdaUwCqU|7V3qm z)FNT?)S{dhzC%{y`(!hj%4ihFmdwU2_~&-s$Mrl$axj@aR;IT~&D^59w3~3=9a{y* z8$JA)l2Ud4aQ$9Cd@Hn;mq>k-z_732j}Yg9kJ!3_x<0|T`!U1`;iY5i#a6awbK3}8 z)T4REk;guxsDWrnfhZpi9+!75@(71XC8DbdG;J~4d7J@5V`E3Z*C~WNw!z+c1X4{! zG$K#LE;SdcYZVg{@^w#QqTWEmpWKII*CCZipTm_f^x&E+ZA45NK6e-*j(klYE?d5p zvZhS~=8#zfgZiWh=)UEfywbo3C1o|#cpHctxiE6lI}Kab@FEh^#c>^s9f1hh#9Xc7 zoEk_`nwE{Bib*N~Fowh|^)$lHYduonsA6|yD?}z*OOHAYMedF=klbS@tGKLjFYVaN zOi?j6KIxreO%`#|Ro2sj=2yuP?{_3nO@Y^p;!gosnpsN#>M){Hx!r%ZvMk?;n(<>% zE>uQZXByv+9itwmRcrD}zg{UPf4j9imw)SRcq_DRXz}mZ=P>>h9hxWO3;eB)Z}#C` zaZf`FDs5RZsb*s}_F4b(*rB;4$S@m7)O{d-UC$v0H3pg>oa>hRt zDr*tP@tWjO2?CmePBlNWpa2%*XXMjg+Ph0+&Q8XmD~2+Rci#Y`AZ}kLL-XTB;ti%` z`|tU!*{h0&T{@E=KvFS?xpM6aQi+$?Ht>Um=CI#so|k-Xp-Y!TfP2kA+~ghU$c{=z z&nQRjd9@aW<$3~2d9#}SUk34JmKqmf z=RuG)d3(`?H{;42A*bc+X?SSN+-D94%((Kn{ed;*+{lDNlLMb@kQhnhXv<)P9;v*_ zbBm?QsptGY#{$dWUmea>&+h|2VD*p~P^)|3daoLy`OOrM0SPHNL{EI(;AQ4vLaz(j zXuwIQ^3&*MtjEiQ?$I6Fdg0gf;ga^U!5nL*%O*rI^t?;#TjI`aH7JS3il~_~(O~gB z?g-A##ka21B3rk36R+}v-;QW$zZF@5G8#tZLjnI|^$OU`u+ae-;}WTXo8j1ciix`n z_QFWdktKD%CqLn^TboOZT+KPmbf@RrttVo4U3v|R2kYrG(VD~~EprGFhBq=ZK!hRX zz+P88dBs7ZB{&tc8*8`aZ}ai&53`g{$93B4+@VGMR9g2BuSd_IMWOj`n2-tRS0n)7 zyf%U_IDQm1DDQQ*PGNRI^!iyR8i5nfdivH4eJHo%?sQex%}u3oD5-mD=nf zw`ujEb@i^o?Cbv1C0YSy`5rop3Ke~Fl?A!bJWW4F0U|NqDM?Ej4z3p@OoLDs@7cq- znlSd>#d}X~+l5})@$6~8m!Jc7xkr6=}P_0KCTGHYbNV*62IIjXzh0EN~>AsGBrJn z_co(;opw@~52N^NKbtMLpYgWa10@$)ONS&^%o74fnZu(_nhlNHD?HRHjAs&C@YmWu z3Ywc&U;y*AP9(rlrN1{x!8(tL@-n$O-!&(qLtf1~I6MhV`eFU|K)QkP7Y%YOoydJI zQ^=Bd(MwNmM#h>Sd3jskR28yh#}7i(Ey`Ch!|5I{oP7-0$!KY5nXNWkb{dy|M$CkK zIV)ibl=@w0d*mMmX%jlrnl@HRG4q9{lN3(jh?JN-d0-UzjC1}rb*zU1dN<9p{OPwm z&+^aJyp$=siU|8l4Tyf4-v!Tt+xi7h#j^eS&GOyNR5A3=I6(4-fB%#&qMT>ASCwpE|$Ad zEdsnLqFagMZ*U%dGqzeO$|r1IEF4kup0YHTjY9hLpLb^omFH6c=K|SBQn+LSCFwC& zt?#9R?`6l-0w=47M#qB39Cp{%-%BEd4$n^`V!{(0jx)TiH$d6105~Q^p{a}UPCOk`=Y2eV7MbcHH zFV@y?FUl>79^6J%H2v{=0Szr@mx%;3LC=MR6}s`g^R;8YiQs+;7tYt_y7jq~)i*Sz zX)}S9)}NmP=>5Z7CLen7{AD~#v<6Oe@5t}46b0oVW_Y1e}^XPm*;scK1+LhhL`7mHJNvVJ5&2{f3;jN z+*U~Y<@aH%EB>t-&S4w$iMxEcABn71H0RfDbvPHLBacDVp{$rd@GA$uA-M@~A-=oD zfnJH8<19}1s^w{d6DC5gixOF_*Zm^K`FnMmLp+Z6j;Px7;e1_nkB~UBu+`n~K`yk5 zKB{O?PQEu{h<;+qA}3XWqxJ+pikQIceI)1n7Y%9wUGz#l4y()S?Q|Z&XN6XKnvL|3ywr9g$*e5+_<}|a5z|n(dF&u>{xM1TqHS^T7OIFrLy zo#OUsF**18caNgb%?YOP#rG9(pt+_m;7ymKcYe)wfXa}`ZbkiE!XybRzL~7X`K>1D zho<7Dh+n6;^MWJEMw8RyvYATNpy0l1YHr&>i+j{*$@QCRtkH%A7e|cJ$Bp`N%6s#M z9WQXEc)$@B@zIu%iy}tUIihyJ1N(havy5V+g<2;?qkyal3MZ5NyUA>Q=1ykut$crY@?716p>_ z{dtKm*+&%C#@v&s<+Bj^h>As3F_Pg8GK%&;T!j4clU>7Vr4L>WCxE`h%U?7ZYHojD zgRVsun`Md1Q&sD$!X1Z@NEUuU3*bZkHgWF5T2R0gXNhxttE{`T${%FB-m(X37~I8F z3}$7$<=hK~b+HpHbSiHWKVUQa;Ex8q(QQ|zyQ~*5`?Il?- zt0@#w*L+KGg4i4U7$7{)`?=Lub{($;XjN7o;ljho+-bEI@&crEl2xsYFAyzkF3ilr z2mH&(azT-McPA%`@W1q|0_Wdvn^!(BJgF2fpSLwyjWh2^nS`F16aJ_{XFVM)?S!gi zVq$DeprJ(VoA^}0DE3rzjL*6G)o_Cg>;$)e6<`|c)45qo6WhMCDbqfkY{4`Ja=J?U z`v+@VLyXLf!5&woc3!b_DmFJg&(R}&Co637Q1)p~`)REzPLSvZr=sVkF;)j3FYgRU zBRakooKpT|6?wv=_|gCpbK{T2Vi=r3RK|w-Sb~l5?R^h)b`Wne{ei*m^EY8ex6)6` zVD>Wjy=A24qyu>k&%SY7^z40o;&w{lEnITqxRqqK_tw*)_5n?l|m~>i$W)`Y3J%(F>#c zR3S;P_2M76xJ52!V}BXnK6qY0X6%nb9iG}fD#le*8gPw(@ia23_MWz0eHKcp_uj_d zqjgE7CuZ+GYA^05AX@Hbew3fkd$(PvT{#NbTE>H*Xg+gUoKr3IQ){p+c6Kqa*7xPY zNnqBJNvU}+s4fe+zXpe@esT}NyfbBCV#6quwf8~EQKX^T?I-Bvz3#_N%K>w%-{%)l zS1ROCji~L7re5tyjv0h~>rlaGW8QFnL|{3Dx+xm*PH=d^?z!s%Jvp>vxU8WT>Utj9 zxYLZ`WL|D zwb*cWL){kB-sJuH*6z&N)A&j#-QGWM4j; zq%9Ej`&K&jvG=g75%X>9xU2&FiyNRzzz{gn!3RrDI zXA|Q%LMJOiu8ZEwLVtztRzweK)T#V#kDH@(tMjo1L4)^C?wAYX9GR~dS#yTkr@vp2 z>h)A9sIegdc$UCHr2f-49LKSpsg=#GoeWl8nB7B9YNQnpO23YRK!y^mVBHj$(GwMr zT{O^PCtbEZQfbNdr|WpXO{fUU?dS6J^E?e(l`e0`MX*ju4k&_&Wq!3+lD=5mH-~E6 zeA^HGNE1EUDf%$Lv-s^6lTV;6g>d5gy>NkV2bf!EzvKVB@-W)X2yvtM*${ESRyBN^ zsfGQVBuYL&zh+WSn?b()^RlX_i1^Xq~6!hsnHZ6RI z*e9dakx1+TQJ3P48kOI6al5c|IBsZdE7{T-ll?%qHreko4NQ8eHeQ0PE%=6m#MUg$ z)8(c1jqUX)A?)8@Y=iU_Cgm&4Ri4H1NT|NejiwoJoH;&*!7}4+$N3&nf5S;34;@xb z!-oU=xhD~yC1Sj>q8xe^;I_%c*owWqgcC5l$h5Zv(a~u4~jDP7xK;4NUfS+ zXcp5dfJ2);#yvsA)=76~qyinp!1IEOTg>W$dlp~X-FnGQIzQqwm^F^&!h7cF1`jg( z$nEi_t~Ao0#~pwM(oGw#*_PJ=FR!W?Iq_yu2+0%L5-o!)*Z(H2cV`mN$peiz>U0JV z7*h@u7h>nLo|4&YEcpZ7EYjikHUI8A>1&Fw^1okEk9_s`n{jODLm1`A0=f!^D5iet z2||$;-x3%VJBHGO*0glGPUfG3a1tQ~iQ@L9{_^kn6*8$`!&kk0M#-BRXH_~To(QMs z9#l}M0c2mK)};uRA!r*seg7J?MNjL$_;eD+W4mB}PtNBuu;)_sJ+^kHDy8Uq1kJ#L zvF`0uimiT&8-{G#=wSfyJLK7FL-&Hc{9HtXbk=vb{gW;eiau`4*coH}pP4DP+&%Hs} z8Y(inm`>KJp4C+I!v9way0P4PBHs9h+LK z4bk}XYmpL^O%<(#-gy7lW_ZlEro%O+-I#t`^d^rmxEhhtHmfFC?8f+C!j46_k;O&c8LcbmRnOE4X~bv<@~@Q$LyUHsH*a*1ex?ToTS z){9bj`*2aTN0G8zv9TsskU5N+tLE~SDT)~?!iNq=0|HTIk7sHZyTh>XA*rwLRR<#! z+!5dL3qO+!MFYvF#u7ZG%OW36d`BHs{(uJ~(>d83 zSQ(l}?}|v}Y-@Ng|7FQ-ZuWQ4=Q`$?L@hOEed~2J8*$63v!t?I0Lx&sk?gMpK3y0X zV4`@;@sB`STdw1!xHF*=*&$DqZ5c;;?gw@DF5}SODcnPD4F%zLoU1+hZfUP9zu};g zU!SLbl7veke`F7_#r;Bs@32<=aoqFATaf739qDB4BFo|DdK9)_((a>$V5g;u3T~k;F*6AwanM zFa(QK-2`16xd{PycJwa8{7RGp7#g{OJ?GT=JnSE%Y=je6eEEl`|M}~G#sRqF1^#C~ z{2#S00DYHZ+j^niVe=0W;F17MA)qXzXLD$c(!IFl>H?IvE?rz4d<-=HF7P?`yl_76 zRU#}l=un9{;}W*G5l8s1tJ^1l|WI|JW&hrJyuR;Fpc@7+Z3114t<8)SB$lo&ygu+IWN+_PL^}=sJ`BD=RDW%Qv-ivs^A%At)bG0%5Dec*;DBP6WJ{kHd|8 zn22J>n30XpM;_#G^K$m4b=2C-zkjWxps0{_kJ#EWMs5!5bW(IK4Jtp)$CuL1uGRf8 z3+mjEs0>BKUKtF-2a@@ZJAZGVJLiu&cMj6JGfJg*rG6}4lG_m=J(<5o)7S`ZjhcjR# zCInF#*UyrYEe}>108Xy&jJ*RQptG<2FQ;l9P!)$TG*{x?2cfXD48PqQvw^Vp4{bJ; zQMz9mmIln@BTHohx2^2&l_4%-zq3iIHaRQVTi?Jw3f0~9FOPlNMQ+?KYii&h{ZnaT z64WD~h%kl3^?N1PcDR}@F361tpO`y95@*dChgbve{_K+6fMrk~yB;~UezCe;w6}3j4{4R zx+*?E+L@DQ(0J&&}x~%<>)V^D)#=mA5q{dAasfDd- zZ>Krh8ZRzL?^9TX?@*+F9E%NfPTg`_j1NY&j3e1mkBV-8)N$9A5- zbt>yTT@Gup956VJKMvHeFeC5MMlW)fNW*p{AwV9xYAb&6@nL(}=-^1?45!8OoEjOc zs6e>eEroeFq7+H9w9#yo7aOAT60x9OQdR&Nhq5Z;p2$x9%TJBAY>Apf)&$SZ>>NwV zk_^squ!i+Psr-X=PSempPtc4^G@0Hz6vjwjY06gi22j-I7s%-wu->82j$bsGiFVTU z%pKGoW^R^9?MrVhO5@xAGi)GX9L^7Y(_A@4Qp_?NT1+cb0ah6`ird8RBNQ#`uGdtt z(C1qdT5!HcQ*vdqOT3;|J$&Qea11KjH1$l$y#9tBQ~Fe0C{p*mr=@0l3ED5RUTPOF z01p7z?Xg{_=8wVy)5LtplnKsu3htT$Z6irxA<$(7h2d(uyRc%Dzr6C&>HXgj(=%MQ z&FwY4nYX_M6+R9H)LJ>z z*@4t3?*rqAq*AS#n2=*8tz2rj4v*4@zD1USoEDq?-r+2^gNH{>q*Xy z$gITu0F1;$aRkk8f~bziwiPt~@ofEudy)^SC+V6Y2fAtz5fKZFpE`qy{xA04vMY`z zY8wSY2$BR37Th7Y1s&X7fe+QfeH_g}*8^by%{E|C=vm*#-$_U`(&A8) zMNJVK=mIgtbAZLKRv0(y`o7Y{KvFIZmf3gvLqe}9O)w^%v23R8h8V-TS3rWPr7jKC zPc{Jwpo$^9Ooud~bIR;}S698GqvOg-bbe2hzCl&fJ`PI__6*NW!qivak={`tDl=B6 zs_UO`RPDQBZAYA_nO#$GCz3UZFs^e{18^||Ih&X6kJ7#4gQlsmYLQ_#Qd2tB-#0Q} z&cxQUD%9dvPNZA(9`Hlo(ctG!LJHyTz{-C$mWp_z2lF&$E84PSN-9lNL7*3ZyE+9BVAYu!4BLnk3$UYY58PNZ#`-m zM2jf1z2#*b$Y+L=?g5`vSg&gXjOP|KmZWHM^>R$K#~COzQe`?QDwYTn zslb+1RklB#G%IjhCTGkS?G@&;;b#BJ1oJqNjtsxu96J!!$2j_z`Gk?me`#oKU1W>i z$&1vd^iwe8wE+XDHbbHvf9pAj1@8bh?Of;dos`_iLC-fjw%;7C&dU>8$F}vg7xv!@ zN>*J&<|hE)OgSePyM+ne5Pmikn`a>;E&z_Tao~s-Z#=ez0Dv2tcy~Gd?y7A6<%cEm z*sMKY!H7gs8uB^G8S1f3niYK?%!OA*hA!LRSMX{wRZBCurY?06VnqvH;8yGBxv?M4 zyhB$;ucrL>v{7GM6IMjvzO68?FK&M&cMYW~E0To`Q|=ucaH5`}Qy4MiYwI>`)Dbk6(v8r#9oXsYW;rfEQME3mFMAf4|^taT2dv|l;E=&=|f?~QhQ*3)B+2y z)OV4dx}T~$EZT(WMXJf_zeFNX;tAIz=x{Xeg1}p)#wcnp(=cO8@8W$SB10MhCQ0c+ zK&;`dOWpW~_Lg6G5;a9(dkh`r8XU3$n|)T42RGU8Lfj_-eWZfx0ed$3mz(#^^;cVM zj$I|cd}d;pP6U_Okj06!eg^LsBsU9rhS~3wOfNrofp4*o!sEIlRsOkBZM(pn)gS{I z;~eq!FGO&-d~<|2Sy16ci6%*K*z}cr7@Z*uBoHW)ZiqxLkcc!cze`%|%rp`uYD9Fn-wHdcMyiUurD4-qHS?(YM|; zI~Djev(^|U#G&K;Mk%h3H8A$8czcsfnw4crgUdz^Kmuy~U5<|%C)Mj2g1!mmXB9~< z;Nh{GK?VmoBic6$*yoa(qRBW8gEkU^8fHA6{E%`@I{*A~#6bS|o$HR^cXZOdT9X>p z@W^6O+&@6o^ns5H^5Go}ovxAvvSX7N&_Q_vR%>nGl~X3kpTzi6*s_~MaLH|?O;fIZ zFX-S4TXfLEX%ap1M{O0@0$5-1s4Q=nr0+KU%{~-Nat!4^&@sE#-UIN4e_U2N-|G$f zJ_3MV53X??mKaoVg_x_?<$HzFA$o!iN}!76Xa6(iGhL3)4Z08U{#}teq&7pgi@aTx zIr~<4Zw$Z`VypQ+eM^X zp(jRpkwTelC+4wxX)oiD7r<3UOo7W?ywp{!(HB=SiC%f4RW9YjM!TQC@hPy;$#u~{ z095sldN0@e=tnS+3d_CcX#$~6RnR<%Ebl*lpI9$CVxVt;CLc?P9`+Gf!Eu354?#$_ znb^FYsE#_wVl3|h#rAI+x0SFiZ9dh+J-WHM!Ude1NDSNmVkuEbyG%jmTJLD*yTL;H zo-jVG`h&T=G`ItUg5SToz*2C3R?{ouCA+7mu1_%1o})W6NnqUzAnaM-{7F8XQN3xvn7 zRn%Fbr+;eyJ&OFvY1$A}Uvdec?Axz;ya81A$8^;-l;put`qfNRYuWB<)GQ<_*)ag} zRy-YEmi=enjd@3i$l%KgKMiE&O8_)-13bQ?YnqQajul#MIpa>a&U``};zW-#I)*|? z8;k@@TePu$`&>E=H`CTHa~v-hiADa2tY@7^YF_YXmU6Jij<(GRUZDO2mQOJH~c z0DC)+$W?d&(Z8<859-VD+4NuVV(s^H^di-B!9ku^@RmyY&wEs*cwUaJI6};_P(%CH z2>{R~43K2MeAq0f@Fu?Ohr`@&Aba-<9Xd=CDVuK9n!*fkSHW577xcG=khmXUlj_4~ zlOuh~a5=Kgyz8cHdp@>a^LjjnR6-@yXLXg@*tRQdf31(~2S3k?mA;Y6VciC(xn2;b zGY~}8aUU$fI`)S8hPq>LYkT#>05go$|7CB!OI+r-nQ8lLJ!)w%Z*4QEn%{@_X51PX zX)qDuRPHC{H{Udnv%QFwAZqj4f4Xfy13%%TJ07XSrSQm123ECX9S4W9nvNIL6@0rY(nr~uK~=wj z;vuU|J%|K6gQ3DzA{WVn!QZN~pY(^bz(6AVrn6MoECkcAXkYDRVy4Z{$*!dfOo~uq zAJ}TpUU}bN?s^N}P0Wf~9U?Ns4^shA9P^uRgw2_zwwWlj{66&b2(;z=+}G>fjS2*q z7)e8GU;UKwFb=1z7f|8`=y(+HLIEp6d*9=9m+oZx&TKymJn+$?|ttQ{C{bL~)`yzWWgQbbbSJaAa(#z~}DhjQ~_! z;S`<;eYJUbwbBN>(v#VnjCue!BwG)#1^_Ak^$P=##~;l96~@@IlE>JuQp6%!;otst z4u#Y(lztsrZO}g9d!n2$s9PUu|yUINSu;-E>*qCe#_T^N& zf0(Vyx<2=zl+&GDZKRd>2L3L=NHn`3wQb>%f1LWllsYvt*{k{M9){;S&7qdAgWSEXBuz=@NF& z5+AAn0nTtApWA}T+3G#KCH!{`>Dj!CTKj$)4ll9KvY}8k{Y@#2h-U9b466H1{#J_M zU*^1{{of%k@F?3`s6}}Qf|Bzl@`~cermYQiLU@w%C z>uPtRw$lSNmO>0_MCei98agcCrbp=9<8DwY0=zNo3}hsv>ny-7aVsQ~ca|6;S4<6c z%SkijG4#uJFx$u~I*FbG8&xp>XXqp3#XwyJ(j=nysJrlwLQwYIw#~L%s`aqP#OzTs z0e?s?%QM|JCEhbMrK502YFN^G5%CsZ2bs#Zf7-A%B9-VphS)eIHdT#m zn!)a9+$5Rw+CGSw=4$4mM~cAn4z-zBbu9_5L^oO8- zFB+mi9>4F>CX1YHI~q?EJ@pxVNV+&LPEv2Dq5|w2M3|fI{04zpqI?xmUG*6Ay>cYJ z3x(N$LL~TSf5hqm-;gCl5#SGrV3b0jW@E$#ES}7FuW-!2{r1`|E@UckiX5m+lzSom zzM+`pt}O&Byl#!4b~vQ&nNFa=?bXxJwjzyeb^JNOvXH@zkCeIsj~V^^0hKcSO^nx)FTnQJ3MPZokALL9TIsSUkf~udG?&1GQCYT zI9ScT)wMDF*JsK z?Cq>o=gfaq0m7jYLVXtKxdp#AwdXPvm8NoYbC`dwML#N@Z(8IGBDjb-)j3bk_BD+P zL&o3r_)?ZZxRuokuM7*V%DwtF0EI+4tiE2F1$;`V<$6bpEcDj)(VvZR!T)o0Purbj z$FN8}FH>%I>#L6>!e^;8Eg;)_f1}FF;s%>Tmj51bN>^q1#=VKCZeB*#^i@C$N~qp8Gs8iQ$h-n-bh~Gbe?tiy}Po zpUOMwqKG}+(Db$Jm%b|Z=|0zIQSWP%VWp3=!gBnt-a6hgo{ZV38F;>F@Onphl>>o! zq-HJ!FbUt!x9T}rN178fWU8Eei}OS+f`?hX?0OEneo{jh1&1QL z48#$b{1_zj{c{WVltBy8WebnCP<`?T>gEt77|4VLaunSiN81z_IkX(Eg*lv$@vmS2 zbY?nVCgAAk24GBD(3LOp%gb&1nmH5;hY#Rq>&L4}m{_GV-o0ly z6?b-wyKeRa=2J20dIQ}jMowWGoU0tisor~G-Jrmun;>*XcqeA_765xrhoxl$eHv|I zhEf4$IqX!!w(ECK8Zz2+(1wWLU{W7n{Y{e1phjM7dY#2zZw;X5FUR=y7E3FtvgwZq zTGyf*@dyN-3{$O#Ne`dS&~L`W$=Xw3FDe%HXukj}@Br5I^d&p_5dcb_+;<{-*^F}T zeRiBy0BWmRn3n~a{5BF|^hEoHkN#dYgTCMFG*0sK)Q#8-Emadqp zoV`P=+IX*@xUn)_dw1{b;^IH`n^c*c>&AC)wMn95le>*-W+hDG))VS)3XH#TpW|&D zm2OJ_T(lzvA)E4d_Tqw(TlKCyoVw30KVY=dkz8@bDSuEDCwzYlA*EQRPlf6u0N3Pm$@xt84d31qb0YpD|+M8?hTC(;E^Qnr| zWM^@Xw`zz7oaVlH@PA-Qz6bu*r;rApZAF40u6d99A>FpKzesCWfgBl6i*xulp{fLb zz|cIro!x)?=Z%#GN^VS{V)}$BzIht18eCO+iz06`{Wf^P-~|m0M&YatnhP^lZYM_W zaiv0S*a>`hqdZKDf>IR#V($d^eV$t|3ynigxeI*=mr7)~EFY(N`6{AFjn}?J-qdN` z*BvS%enTM(gnBz--h3Xo4MTa-=p!M^-uE18O+JUgiwCWV%c}9UR9c1i9p6CZmt1dg zOnbNFeZd3?c7$JO>RGTUYqKH71sSCI*sz5g^W6MH@oRq$FBrLvIzlB>e%#>NET}LO8Io zPA}ke$1o}ap{RP34AQKxr4ClT^+UpA_tV3>cV@g$uwT&=-S#^fC?XR^?2H)qnhX<=C31+qbRh7%OyN`% z(uSvrGDGDzS*y^FJ;J`ZvblgOf>^;clK`G=A@b7 zh`+-O^P47raCTZe{6K2Txz({XzdZ9tUh%wL>6Q~A(Mou~+ep>8dkL`B@Lo?VY1Uil zH8Ce39@aY37#M#;Hqb1)@P*y{{_Ci-+9;Lz=PUdKkXn{v#scrB1iiY)8c1K*ETO|! zGJL&mGM|r33QsvAbci_a(BBKMASGuwJt5Hqhs3SD>^AgMr2orM=O`gK%ar`|-K)7Z zKNyW^rpa<>*8k&I6lnejnfERUmxqM1LSVH-Ebo4c&|GAYU)e&TA!kbePaX+^yFz4- zC}>plH%AM07bhqeusK>BBSQQ!aCvR{0UCw@lrfcPX+jCq=KnTE@T_vcLBANTkQW&S z-F?$RS^QtC;4T*H%q2Kw0(qk!w-m_xN4pvH8gDM|2ZL4#U?YDJ{EfcA!44OmXp79O z00g8DJce+`GZMS4P0|lPp*xr(GCV!4H+@QV8}*f;WEM-mj>(Ryhv-u|J$uP|-`bF~ z69i~>$`IwKaUeMCe_*y!C%~uTMYL;b_C`*{q~++rt#k^18t;aeeQorH_#&U-=MO%=dj<8;85*}^AiQ_y zSrZ8$FsePd%e!Sno%ncYHC}h?ZJa$*9F9?=0Djq#tF3w}($5^UX=lR~2ZTdgfU|>A zjE{B7UjJb)iS!qlAYX<+g{oIxH#C|M?okeGKQqqW`nxf1NCvyZ6*1hG(>Q$Jr~I_% z(qi~iaQ0rToWt+%Jvv+VXS;>uI>u!3xd3m^OS<!O z?p8OwFi8l_4oeyDF;Q9!cFK~@@x8>CJnfS8rmw#n<&7jCnc$JuBpHGyM)X{^+mjCB z?_EgRA04_NnW(8C$^YHmYFXaCA*u*Kinrr{#1UpX5BP8~ZaH1&#Y;L*(?8y~t0&!` z7mc3G23WR)02i~wd$BtkjZs@qOhE7RML-K?Bicn(Y$u#Y|7|Nnf3*8-pLzdf1?Dc; z?^$rS*yJ{HIQkACJbTyG%JRYPt04jB!Xc}@7vj_P{YCXp8MPVj!+HRMmGYiw4t)-^ zE3}YHA`dhC@M{-*q)9VHP)aRD0N%|BO!1_sdwxRsp*wPcBv;Eg%WvW0a z(i0_!&>5UuXmJ&WsK5OVn%%n>Wty$vqIk7RQhi3E?}knIx{&xN&Yu!x$a^R^zu7RA zWm-Q_UZ6gnF!9Rk#3Y1=uZ5yj8%^!TOC=`15I@sHRd;!fzbUx-8sw8M0UlEb!spv< zb;7w!?Ml=1I?QwhbMDQKl-n{zfod`ikEY;j&QYELPKzjk9LK#B`w3>_HF`^R(L&&k zhrG;efW!ZiyLkcxu!Bkt{{vCG570pWr{O~%5UMiop451@B0(XGgCPfowG+l`5Irs( zVBY`=b2k6sucwH60g~gIXB1zRx-1B83m^=w?u(QHn?9AgDCJ_mS|=(1gc>Lfv)BC= za#l2|i^G1Mq#2Ma$)z2gZ$ZA-lZx8|*cX6)1@I`6K5ubR(nHR%G^P37uQvYq>t!|# zBMB2Bw_Tm4f`eQ}9202n0pT2{E##c3tWHNR3bC;ua8=T0bV~Q9Kaks;7l<;wUZw<1mk+cul!Gl)0CE{cfG|w#q0dnkC{HT(K&kRg z>c2?SCIaN^-2((5df+xnEyW7&A(x4wc^!mudkA+bP*SB@Lo)nTq5?o@;OnwCceapL zZpuXH18qm~RYr{hI%AuTjs-bO#Lp<|L&og?GnSCiH~Vk&^Fm)o|1j;(>)4f)C7`_; z%{@TsNAycbEU%XqaGS#aJM{l|=>PAm|34*g-uP~8=t=dSyzl}Ahp==#&RcpZ;(VH0 z5a8UJnz#X|2sIiC$x;U39+X_G}xnmLZt32ZU2e%I*tZuiRU+R z7v|~|JaPAD*H89isX&^oWs!v(iIT6K5>HwFy??IVAuQFMhlp zX}CIF1?n0b&d~@Ud~!peVfVJX3{1t{oz>i=OV!3tx4n*XD`0@@x`gDx6m_ zNC2~2GoSi$|Fj2+d{Lj~0Lkuk<6Dn8AgzC17zeS{7*BzP*ll@pTQ~Me^I`Q>D=uC# zYsTDkwU5(&USid-~em_?EsPYI7k6&ysb?bIj&mmQcLQA z68ZBp8Kj3Z5*^y{2bl~W8%O}2uci-v6IO22HW1Aw+G%`w6Lal>UA%7^v?D_I{092L zo61y~_NPd(f|J6nwx*bD)q`p*Z`zg^{8{|OWD(fJ6#Lnr=O0^1OMaTCBaq#WiwJS# zL&5>AGachZ{-mlpuH-8)oL2NpJ3T*T!0XbU8vSDx&p79gcN%V{Qeggd09w@hL?{_C z$~EXv;S@m#76d1)>z(SogyIMzgYM*66V3MTiR-W8>hgtwDpce-SFgL%0zwjBCowZY zHvpA8(HAYfM(CDEXNp|9!@A7Gk=uY>-UOm&(kIo|$mfZ?K((_Ng`F*32-4ycjx0e~Q| z#R+zFLwzJ^@+ZVytTO0}4kFaUr5Hv2<+{8F+9KbZ;b^((j)i-C7tE-6X&5w=z~gvP`_Xpn*IFVL>CqympWq?2#`0(|p;FsXh!&*N+!Z?n^DkJf!x8CUTkQ$x?hW znH?FtV`CxY#s`_z%IuZgu83ST=3JYBVykx#9E>ua61%93$}(g>Hv8J|9BW^SE7H+< zcM_AIK087i(V(3tlBc@T14MuCetEq{&i;{oFZXRpUD~w04kGmWlbhQ`U?4Uo?2m7W zkJRM0n3}RMHP)4f$_^9mT6JnD2)|m>T9aRez%bBhB$WVEeX0@OF_13SH`ni&V&9nq z4+IiY6ZdklpzQz|h;M5W-J9L1*lKC>hegj7vQ~=ldmC>oy-RqA31UpO|^YJpoBY$cauEgVgyg#IsEMbMqrQqkp;5 z?Lw0(#2qj(`U$H>W3)i1uQF@}ogz}k4ZP?CUh=Ac6o+4(!|?1SKMITg<;N3bj}Eno}QlZOO*YC z_hhm+FfFp|s1H|~o!cLhR7Z-7wVP~E$;E%<*e5-UVDAV`D2>N)yEg^Ox5u&JJ-fe8 z^ZXZ!rT&wcKqzH&lS1VmSi*9GN)OTyc_$bbCU6vXg1zhWfyp@M_%f??PfUJ4!FB{S zArGmpZ8W<~$_dObM!vs8Zy~Yf{U2GL1eEDk6N)P7&mfEs3mh;M@`Uc&6RK@bm>8@- z%|#?ONCI-0N3LKNY_E_jyw-_!MhCETT!_6b45t$Eo^WQEC zT?Z-;X(o_bqU|stGW?vx=?SMKkhC!jkF|=@5bV8;kK;k!QJdMcz{Vrd9m8A?&**K= zd0{$~)H#t@udLGeB7k;8S1?>ktM)Ovk-ug5Z(ob_VNUQoJWG2R)A(X?4Zz>e(&9r`Dai@W#d;e_CY37)qWO4?gc{$ z_SA+pi|7P(e%S!1$Z*prGh8;YK#%wBUQg)Oo|l>stLG-ex%F{!%=DZHo9U6`*=Wjr17{vMazQ99X;EnqO>BP`C1j3;e zz*nLlic4D09+t{`$nN6e2TdVR^>3o7t}w=WQRHKeq)#?0#9<8h%7URj5pYMo+wgx! z#}9EiI~XFVqa)+S;$3CHero zJ1LKtFYSLNNB!eaj?v`j#Yh6xY!%7=gNX+7@1RA! z6fak&Y7GLUu6;7zuP|T|#(2PHlg^(^6W7V}rVy0a`=4G}0u5Jc_7K~XeK27~$N#Tw zMY1r_h`6EkBV(2tZ4T-{acWgfcR4W=XZIk>1wBv_`o8IpDHGk7OKscmzQZn1%&_Z z1vn^BgUJvdOk50snlQ0bpk2`g=lc2$dZ3^NArSNha%XdN7h{1;us^n*UCVA)$U8XuZ`6ZKQN1zAc-oy^7 z=^ls(WEuyV!bp?-&J<~_cg2UVUKX_9J%|) zgodM}UU@tjWX1wN{S;BT-t|_i)pqxxf_orR_kDi;d&YO%4*)pN@hG`Fb-ievt_clQW}pcY69XgvoT$C#zs_)Hg+ zn2G%rPogDf7vW31mk$6G0g6hvXTW22*P<+w@I^;Hz+QAQJXe(U)dKYOLdafBZ%0_P zFbIu;K3%|!ApB`FYC|a`PWW^^Vx2lSJO}I>ZBM7V`a1!DDE=5BOw0SDs&EpksQfkL zO~S|tBaXpWM05khhpe8D7Rf!4&O#ivD(N!Xp@PJT`sg0!0Bs`7eXoIiWb5-2sT?K{ z*x%w_YZH7hvFky7sEDF+m@d<94g8@otS5SyV<^w2lf?-=h*2k0#oQA%RrYPZ#()Rx z2v8dl9IbKRn~d=T!eM_?>FGb=B!bpol+pS!c!i9r<9=MXJiWDI;|Fl$1X0m($(qpaQ1f_K)zyVZsBwKkE)>|xN z1eJE)T=vonqJmTf9>16RSkY*?QP&OY)me;n9u~$ve0ZPZ?ea1ts_>f&GnwbP@m0zJ znQ0W?KZZf0#?oq?^r=10!ROoxG28WD2zJ>&n)$8H73Z=wd0V2Ismi!7%UUYCyA_I^l*)vSIE2|DsqA> zD{D)kubx{V@Q`PYh-Sj_L5?fD{P@iwP>*4EdYUF;eRf`i?ioz}VT z0u!To?+y)WJcC>-4=G=lj4vxnhss9Hu%)_N8CEc3y+`X zDT@^FWWG?dGMW8F&dQ~rmx95^ATxum?r3@#CE!W^PDLdixRWj&*nHVDY|q{pjEY^Uw9W?MeRwXy|(u1ZiDn?n4uR2AA4K5LgKFYlW- zZ^#6dgPAY_W}%E{kB*NIPfrPPaFUaff|Y4v2=TmW@LX^$|J1|FI|NJwvT$*^?N0v) zTEtnnUSEAKwswq3tBWUbw)>y1ngeMI17A!%JkoAq zX6Ute*gfI|_^zDJZ`L=mNr3_gUN_qZ+uPfl`sd<~1lW-17`qn=Z^ZWT>-%UOK=Q zeUdOHsmjjLQd2W!#U?W|k&bKg_proznyhCJ}d>S>~c5+!~Bb#97Ka*e~4&ZA}G7BDP@ z8`(H^QhvWU-L6?d=X`1>N%5gVuM^i&-<_Qg`dZGen$sDSMtMotcW>dG#M2IW0Q@4b zvtA9~G?jgOmb|DLDp=JO3vRX%i@7d~&0;e{11xHW`k_P!@S0I2HC&Sr%!LE-Vv~zf?46q52LhHxlGX zpbRmMgpoa1kkpJ+2v`lC3YAwu1_+o2vRLy`+uO(T$i^yavUWMQ0W13-hwKQ9vi)FC z^%Gnzclxbv-V(`>IMWcu2Wdiv0GPGrusO1Z67j0(*d>NU^ZU@){^!F5d z7TIuDY)K~!8;F;v`FfY!xriwS1HO`ExTCGvHFC4IAOTl+z0Cjbe>v53==%CMx+5A{ z8QMG88R=Ox)emp8H#vbMCbwlcDEAo@zgAY^S}ZKq_T zXJACc#Lf=#h5zo?9?@4L%QsI8P8!0zU6nP`rpZ06^un`is9)$Ws;J=coPz zD=Z+wpBF|Ie0}}m;eF3{@`ZkAcA@nYR1q$Fl?@~U<^@8(!3 z1`Sx?fE=*5w?_&K{o12zY1vLJ6eyd*H|}GHDxl|)_mN$V87dO1Bi;Hddo-A)@LL{L`iXR;Rhn!-OAVM2?|wW`|}CF zo^gu^dfUkM-(3^^U^uK-7M<5SY7eHuLc@dv1(&O?MRD;zeHt{QluNF5KV9W^K5fMS zoCtBRgYNQ{%I0tspKnVn{BuZtQ8XDpk#%ZJ471&I(J{Bv)7_L@MaNY1|1`{05yRzS zPq$Alty}Ly%?GkmD}DPaZVRoWxMz0ihoK&EM99&ih4BZxzSq#urlh?>$-~nUV*Bu* z{qga5rP=K=q2YAJ`^=7)xl!Z4CX42EjJ5Op<#`JxODOhQaEQ%pb-mo}Atx7xm*SiZ zX2@%)%k#lF6vxxPr-+m>ZPb9Q1O(a7Xw4W#<|L135kj zL02F5kM8Sg;(eY*QOtD(;Hq>fb%<806nU-=YGHTZ1Q34vqmlY?)gs77yqAbXl(EM9 ztGl;fS!^J-8Tj@7oRZMvZsW!O-MN*4guDHsBz@I_ikQehL=W zH;mIK)!4Q3$;3Tjs+-Ga_priWBauiZ7q$H;-SW~dVY8hh{wZ_K;+A>+#tgd%9_)Y}}Q}xJk~;%*^9RJ|vuu55p_Xw>Oqc%fFRcf?LLaC39HKZ>@RR zlU-+eKi7F~X=*Fw*3FqM-P>lT=L*J<_)XaU^-p0dC3J=P5cGjipe=99ZwKms=1(FF znbzq-12TLuf0d%*kom(+PgVfaySWg_ zbB1Y!8J)et)BL#U`pX|nW#ufYtWhDF&9>)9Ffe0MjfRx|do~RCZ`Y3lkjdfx%FdLi z&I9-pW(wZ$yWttNa=AeCJ76P5emu87K?jdre;b|bR zyNXCJ1(PmIXg37g#^9LBad{QkyEUJ`(zH{e%8EmQz-;Lll7eP@gT`_og6?S&?2C5_iC%C>HSN$*(m-3HZpkp92A4kQNkCTT=e(r2Sc$ZCkq?}#n* z?)dYB`uVq@f1z~B-HM8dIU2DdX%iNndX@OtG_fba%Td&<=gDxffVQ28@zk$_)y9?c z+gm)s@zZv2o9oWsi#+zl&R(Z)(o`GW&=X=g2KsKJ*{s&|MpW8G{xrrytbFw3WTmzB`(JozInkTLdH)FWxuwHnB}$vz;m=GRwlrH% zX$;7O%X1TimM->GtRQRq7f${8s(EDV$WtPHpHjvo9#9HrRCk)FX_~t4Sw5r~`tRTj? znoq-fQrP|D;<6TWrqK8>QUwUO1F=zNe9Go(>RvwXTEt#hLMc(#WZbZ&!_XHaSD}B^ElG;1)`nZ4x zCZq@j{`!98jiieFrSYGTOa06ppIpf_UfW@>oi*(jHw&5k2-8Z?PcxtWs>YtVy|IXW z1$|J+!NTA#zI-7QM4=!z=as?GxcY*`c?bFo=3YMQ^Nn0xpyJzXfg>&Qg+?Q67G@4E z)uWZr2UkfzTJS4oWl%viz``MZM`@6L-(S4V-U(Y)@};(b=sD=Ly-uC-Tx!TzmY-LF z!FH*`$zkt?u2d7~lSyZHw3Q>Q(TCV~H%;z)Ka;cHcQz4a{?R7W7)wSM`~9i-Dwhy{ zp}kqv$xcs8O;H%7+d<0Pkw=20?-yZ1dpZv-H4$*2s3B@KpBosd#196;;$_pNxFtwT9f0Wp+pCw=$K!IxlRt6QR;~2f z`3`Tyj-XCX2PBqK_>aGPv(Gxnr+OE*4}CvOwv#Ch(XG^%UMjY8-8LSS>pi~wQRuxr zbb6dcB7jxS+o_>&laFpPsRi9{5KoDeq~Gviz=xrnmxW{ro-EdgwI*8px6i?*!Kk)9 zuF~ma&eupVq?BNwLZyoQuGH9wFjtirw4wdtur;vwcs-{pW9|EkvAhBc-&ZrM1S;Yu zszmxiAxUfNYHBE}`8NL}m60tWq9ClIJKW>(Lg`$3^X;_E07Q-f6NjG)s%cu&d^WHN z+VpSMWSfe-FOFzaMDFK`^8!pHp6`*SMq;kjd1J( z2RO*CKc!7EcS_SgKZh|IT%V9c5G)MjioL)5lrEC<(0MyT{H?Y$=07n8Er5u!C-H+U zcVW38$YyyNoKxZ;jqK%e{O`6`)8JEAybrk;$LjIM_#jLi*4ER@K71K;bUogzILIR+6oQe8+zWXRF zEIe<6w?a*n$|ZJx@l_gZLkoK7=~i&xU?KF%Iw0Rn50GuGvw@5M8qR$^6~Wx(-1sRH zD;1lAM#hx9jos03t`^%MuEMDk7R}`>`~ANde*O(X4UN>xcf~Z)>_4QKIFh`>isCH}MjT1TnfoAv&q= zOx!}X2oQ_+HwPWYWCGG%|z}y zr{*4H*4DR^&`-3MpD{GMgltXsnx_{TTZQvte+=NfE72y7!|ZPAR}RO~oWg_>rA>Lf z%FSl;Q!4I?5)(I^!P6T8yT*L?W&yW9#U# zq^&Z+UHAtD%&sfVSKH?XN=BXMI)>@XPv?z1O?C&gf`30(=<^#p6a~4F2rv6GW@)zY z{HMjrQ}f^0HrfQJTpC;Z@am6MQ(PUEkK}pToD%rRu2u?!b7=55mZ2Htm9OoI;;?jo zRcv`@eYaGaNc9mHlR)^%Zbh8ATgIS6t09<}yP5S+9#+zw3A_yftr6+f!TRe`<)G#h$BWO#?9NB>Y<-mJ0pMse&HAP`v_sPh-k0c)u*E8Dh;;sBI zkeU?0!sY;A4Xwr3 ztAj5yW3XsYUQI}#)6Dq#LvdVkrS4V4xBSKEUHWO({6}b4gYUQ@^+uTpR+%!tohqB%anPdl)_ix*ULl#x3 zurH+?cz>p}fvDMZZjk=B(1vp9uB?EKhwa0b@6Li%W7^0aJw6HaUqx!~fAe|`D1N;I z6Y3p-BqVcS8fEEUf3HV=GR$C>eDMA|e3nrp>wzdvd=TDjbCk@f@52U``~v0yQu;ZlZ7;pzfBPX_87^ZExeM}TF)3Z5;dpb z&RLwYFfQ8`=@&2Tt(SwiI0Jv1{FAmhic~l}+Sr4FPPRxGmU#oi62xAppn2={vJ?G% z08L`!O?_&lh@KXKJX1I5!u7e^m=n3+Hd|MR_T_z6E>;~ z#b$0JdkIKZ@Do1&tXHhbW?jM|-U}EPTiDF>(sTX-7JUV51#neY_2sso_88Q%QgvU& zb&EcR%h_eu@US#$D=AM=Bj#q);BnQGg&J3b*teWT^eDLRq$Y9%{udqr=uqJS7v36w zwZ_spcaXcAn&7%osOg%*MZURTFAe2MlyqsaecyWLWI?V_Wi_PPVu|C8&gT}*F*`xj zYvR9DtyHr&jM`ZDnG`bA%!=zT{+VwTP&DD#hFEAX^Nd1V$YGL3vPZ+g_!ZFGcbE_%;8t$AOtaB`}%}W(&Bxv8hZ^Na?06 zua^#3jQ6c5k;wstUI!YHhK-i6{nw&cH;Tfp&G{RlW>SGDf!NJd>(6dxbnLi6*=LUj(p4C>o-U6Py&gY(TgN&`G_>p(4(e%P}nacv_P1YWr9O3Mo!U2&WUYU!Z zi#8pmVbU!CrWS@6|EXBLE@lIhMjA8&^^o-fSbm6+pFVxU_1^6zh~dT+aT>_RwR^R&Qxw9;mlebMXIHJ8F( z%kVvX@V)obb%RTI!-b;d^3~_+-JR!+{&*?GmR*c2{qL@c^r8}aM?WwYvX!kc`|z;z z9;bq4VrDleJ#y?wj|7|G)!yo-qXm%AGW}9mKEZIjK)1>-S8f{9*1r@R5kQ8Cqa%%X zm?9ByyDevLWBJAlR3Kfe)9eqaXpVl}+Du6>I?RZJL*}Te{T(dYBCw>fp_SO|G?00} zevQJ%PT|oqZwXL#zCfH2L-@wo`?&?PH`yD?%tOj3 z+>1R5*URr)F%lyUJ^&yJm$q^AS%Oo5)>LKa0eIG)7pik7eFffcY<9xIU-$1fxHSxn zo9s|ID8H+j{2Knev9W>G<_70u%~o@i2xxz%ei&*^7LDgvmPfwC7+k*UjXMc9Tb%^& z1ZUr@{u!x-9f6bl*?CmqD7x18jIP3NVRh_crd+`s71Wslb3I{OIRnLm4;a*ys$4#2 zxD&bEW^k!q`tQ$pliRwMqbF(p4MMXMGmhPTQoru*?OADY9C9#Tpa$01I4d>(4+Yfy z5WvHt2hScZvW<}@ljcau{S@*IO+9jtDU?*yXo4^Jngi=`ODH>G>f|?G5f8bV#H`tl z5}a!3FN>+$h}!74=whLux7VWZw%Ryu$4`i#61dcU_@ph+{ArADVZ4boyE@#WT>N3A z2{FP36xVCU+Tjrpm|mhBd7&!z9x1sQFMNc4vg!2cm3`c>CQwV8vG6^n)JClcxR8z} zav6U9BG40%*v2DP5)9IG`hQ3|2gXX8ZVSh@ZQHh!iEZ1qZA_d@Y}>BEHzdc=s57p_#Fqgp}u)(Cc#C6sYmDKT0IO??uLQ) zzwaARu&V|aWhKZfVEWJ?eBKT9_}!hCT0e^ZLGCX&U{}o5(Bm(a z2~ZE?0~bYUN6+XJe2A^9A@QC#rU&Vs)Y%s-A2|{9Q;pkNXm@6T*(xV;kj-Tg z_aOD6`tNlXQ{BG4l#wK=(`WT09jR7qhTjBTiq$>>>Vs@%#>t8X_Eee}1S#lBZj*2# z-cPaAu~>c&U7Eyc06#oK0xxjTJ6)9V_+ zv>-=|VYqkFK_on0eCq-`2lfuca&y9mRiw(Ab(g~pDD+$*9oqV*%2ybcW@34>!Ccy+ z65D$MF)2{Ra;ygi!{Qlpd4M>1pfk=}8j1gV&~~(Tj~`&*=X1uTN?^FIjYlD83w|F)1>#QSba{(Tjr;IP^7!v_SEK@Rp`vAML&3HdECG#5Lp~YRyszL7 zwF&Iz7F@&_cF+zW1*X|~Ur|m$_DK@WlQS?^e*3IYVkuP! zv(8_fNr-0!6wPfLk|;(!s?8i%ww@cpzZfE6VPR3+iXg$k{hVfsdAi-T|5s^R0>LO+ zX{REq!~3u1gl!!$MNiXW(kwp$_zqF-%3c~N`|9fex>xj5xQqgj0{g1pl|v}+Uk#%< zxSnVQkVoWMb{Q#9VX?}B@$+A&*sxXdD0*rqN;oOTlx^Z$Ci1o!oQ4JcMF+gF(NDjFJLP6LcUzwP2w} z_kUNtC0cNT&rc>Ap7lFSoQ;JUTXA>RZ3VZSlbJvFhPW^NIp0%^>pv4Q;X;DU`!obU|kCv&32XGq_|a9jfI?;sgcm1t{_j8Az*6Qa`>YIDzQBvr)f5^4j0G_j3jwPxfL!z|*$k@HuDh(A6NMP}5{w))LXm z9boXdT%`^pGLh{_cyBib4O@260mafvaV%f179my$JNVf)LtR-_qz5|<{_K>D74!FI zbNsR(D>uyz?w>pdAQQF}z&MGQ0w3!g9f#!;^qn4-SqBAw1zFel3&rijUO$@_kM#d& zO3-^g(7ZZxLqq(2k)DlTF#}=e((9sHWB3sVpqG!VUxqt$!tADMwAA@M${$+kv%O{s zS0{4zpfdUf!Z8wm+j6{K34Gx74yUA3%-=x%yi|GKGS>uU;xJ z8H&KyLtWsH{$c2U3lIi;#^6(iOuAlW11VK*`Ot$8zybBZD3qibd0&aqnI&8qpE0zG zQ7Cue^A;M^>Rgdl!?TC7wWRfk&A8A)b)MRG5w}UTm<%VYIArw^cfq^G1Bht@I;~Km ztE(RX>Jw#UWiWE6SLpL=Q&GU_Mihuf#7N4?`R^_r3;mgHJ=$T=W2JTu9m4px2GA#x z`sNZCr0@3W84xjy)jnk}M)oqgr}yWEgXSMTN)eEdin#Wodo=bYRc`Wapv~}ALlf1& z>l{J9V}PKRmW}Ok9lq;4x-%2N4gfrn2%N)y{gR3o2*1#mTRlDuRq_mOeiPiXxAd44 z$wFPui|owblh8Hx@j*czfok&JWvvrLVKX?GD7OITtuS9Ct#c+qP*9V@q?>b*a1TQp z+w=k9;95E|+R@i76_^EnIQ;j0N^u}3%r3J7F8a|cu52_ENG?bs%z>Uh{H>^9hm)T! z0v_|cjdrlhX}~l21UNBprC-$B->}CrAtp`Dz(T4EQ*AWJvEbvADC<5_$oDGA+S2tRM^yg;9z9}d#3Xe`q7@RW%FlMj!4*%>Z#pLZ-aRVv7T6qL41-{D;Tq9xF=F zo>FNvL_=1#u9K-Me0~emvg`o18g6`IV&V7FIYy(wf0a!r$iIMYY?S?2Gw;t=rvqDH zV8P*2VV10oM%QhurAg=I(`~)xWwu>UG2ssd61^Zwu^#{g`WzT6Y=)HforrM)0QfSv z+GhzP^5OJi^aI|~s|M#6w9&9|SQDeae6IA;fU9FaAxxs`(d!X}Z{amYIk7M92ef}A zZWzsW@2=)cy-%qvjp9Rw{5De#lS|HIMn*Y+>3r|t&!*7)R>Y8czs||t_gW{=iUQlB zb^v!;ufmiayFRqzxQAi%|E{4gjIP;pSRkiTo#}4>(qK(?CvU3>@Kf z3w*N~Opo?LK8l^Z4$#llNPW_j&r`IWtrG;{gSDaIpLXgGW^q3I++A;+E5|Akk@;Ml z=!CPoLLl<#Z(WZT#G7%m@8ZjZzLb%qB3nqQK^4u$epN#x+ExDIP-?5=0NdiX8xq^w z)adEZ&e8oJwCq;OFSOB+TsGM+mR|oWP5!VLEkeV|7jdKJV8ksU5qdRA*jDE>7=ANQ z-E6Xm1HM9Fom>$IxklLZyA#~{xdJ?wiESE(HFP1dB8m9ZY@}t%<{u3u10Gb?<|?ML z@baV^Jd58_^CO^*i4ACDateJSVKvMO2o(6W#M)_G=K@fwFx~d}xRjwnY+Ew_e>*`i z+UskwN_=CH*<{+wwV)ye*k|JT>Ni%T;qPp9y8QC06J2wB50XKbfZGg$wuVO|3uasJ1a~+ud4C^%&D6qB>;F2^x)Y}=~O|Meas6@fU^ zG&N6Ob#&?-3s|y$b|Y510&T^8Uo%N+9ErssykY=-sRfpj^xC)<_~2b+^~g)^zccMl z!9Gen@%VxQrl(9S$9ROzPC`xQ4q~CrMCDO+-Uiy*2Eq(5JiF2NlB-F}~kB8m%y*r>u>x#Ja zV5DTUS1OnNV!v??Y^>KMLNj>4#p*|#D(`SjkirfUo*6_pD1Vj1nt{gC-SJMJojU%% zwz4`J6&;PUDMdMfe=y;`Du2BnZC-V@1_NB=0<)hcy)o3knl$PjS38oGZJnRe{j+|u zc0gY|C|Ej^+j{Qv?Lo{i89%SrNeDoXhg;z$qL~NIJ$%8)o_yP9YhT+rJrGNmQe7xi zoN{H;?!G!3;3npP5{T{*X{5o2qXozPrGaT-e4Wpm4{l&d`zw+Oy&we1Vo^`H79c}n z1rgL!84Eggn@1c_kop37?1nhUH#LyC1PzKU#NlDMq1V(zwpX zr6p_Xy>a=wd~WlNjtik05!jUZVjQ>L;nk~tfBm;GOVP@!D;HS67Tpt~S!Uls>=Aqi zG9KG{Tb5jS0w;3n(@;I4$?nzWU=_n7dAvk96nR=}3`(f*1$}?$nU#V%Kl0D*si}ck z)iQe#JLN;6vLa2oF@TppTJ1Q3(aY;f+7^_$RbOKxUu!_)VwaPU%lh&`ey5}qOLSHI z`VIeI%Ny{(02NF;Iu@c1n*%~h;-$p4{nfRfSGH&znVl=|oFz^l2pL2${KsVze zZh*IG&nH(ckXs$dVN684Drbk37kL4K0KZ<>BE7DPCZ>v0C`EtDEb7! ze=mU)+0Tp4vD)h7i}%6ARO)rHqq-ITf9c31~A0yYsRW0+dwM3AndjUDW~k~sBE zhI$mR{lG^eN@;1@%lK}LO95ZM+Cp`+@z*}>eipy=uxwwZSAEl;r)p&`aPTt}wi7Y( z@#*@C97s9K0Q4%b2SZTJi)wjGy%7NAMG|0Px`}!c)@vp4lijwW$t>31mRSBg z&GwBcO6v`BIrb%Yo%X=?=XL{Gh&@ zYmOoHLlVh)<=-~ief{(4_|)5~{`rH%{*@IzXn#9^S4IJGtDDNGAAY{;lr(pd!c#W$ zzAQYaQ!}NCGh<&Hde|U+$CSl;+ui1uaZ@cGNsOLZq#T@h=xfh7RVh=*{+5Npx;?%o zwua3J22}1H!Mx)!@Ti-A6NyFTFgI^=EUy7&K+o-R382Aoz1@{g!}lu-6Z7j#{7j`(4?*!jBTP;znS}4Y$7(tIX)C4|U}M=W+{vBADU_|s3*ul8S--SYiE?lSUBdIhztTwJdJ z)QkHX@dE%wOm8o(4tcB|49>u~IGXV!X~0|ib_kjD0=;@lPELLPUneu!k~DL_OMY3| z`kib=^zm8meobujT%xVsKdWb_%W0f6g$Ae0_|&UW3Fuv5 zhw!TPX}f+GCYm`54S0ledp*2?CGg|)<7QHTka`rl^RmF36Ed-xi?`q$8Dx^CN*;HG zxX>gc@c&quJ(h?yUt%SLqA1o%L+AsJNH|*7ljLrjhI}$nzl3V_-HEHhRN3 zPs)LNXWzY4VE9B4&x7M>zmJ#M4DO~%ownzzu*0m~{VjwcgYb10$GQCf>bp5b19uF{ ze+B_)<1;hvzKfBWoJW*0WwR^HM#DW_ZK>khfYxezuNubzzCsXoZ98{HVn10MVP^aT z=PghoF0gsW;}Q3MHHfo~v7#4=5piK~2q3#2TcDz_NdMq8y{nzaMaUhmiiGF-@s3m- ze7cLQHCJ;57+yTbNL$TYq6QR0C(!Lct@@*pjYJaEVSX8)dxf- zw8!G{LBG2`09=E5q}TFppMc*dTJ?dA+z`~Y)oL+Z>U-o@S}ylTMQ9`9tIe&oY^3n= zof;UM0L_b%WFWeqiv$KmBTYN)6U;n@9BdY=p{MX* zbT5R7##Sg)Qc8w;CvP+!3P|c1#TZi2Y2n|Z9`Xnr=IFcQNV?z5dH&BGKYgy-hqHZL zZLVwgwW+B9Gh}d^Jf_HXne#FFa1+Wch;}Ao(h;qDg>YJaJFj%o_Nca< zT6UEAy=WxRhQ2t-sL&J{B9VQg%L!l4TU{F-mt@apOPQ>F-_M>u10ne;(XSY4jTs!b zb_EE#ki;d-JUm&BT#9w60nJ7?pF>)t*C4DtF;bL?9_;LX3I31B)+w|T;{$bA;Eq`j zEL^>;IfaiE!IofL0ZzcQV8UlaK%<0#6kJzfvoiwO^ho}w^gmXw9A~p=$3T5a4(5V4 z@tsMV6y+t3^J+&{DCDW>tM2x*Gujk&%_r_ROSD^M1Skk?rth9GyjivNIx>e-G^i%& zP9h~1;&$@?9yJl=w=-@rm|Paw=b&4Gh{%FyfQx#5eXNL7Ff&A($ZmqV?F@Wg51w9{ zRcY5g`(S-29<_>~$sreJ8~+(BS%fQJ4L{Hd?7gxbu}Kn~l4%bX&EZgn4=)eC?t1kB zHqIyRLMJqjNRFoj#)=ud6jTjW3sF&hmFywQWus{`=$g@Vin?mQTnJ-wmgcW)ipRI3 z?W>sd-kFIBWlYl5epF$;nk3zf@AFw#XukB_`_`M)g5IlAcv}^p=WAL920&;xzpR?0 zc6b3J5rRYlwy5ouMP9(&t4H4S%IjF&LH~egM#7)NQP`6*faO{zXLo2{RYzx%dsqhW z6A=*sXlok^z-82|{?+m){Q%Tm)9ub{4=^f$noeUH{JqOAWpDWm+$Zt@h2&6<6`?!0 z0k0(dOcCrc<^tc-5nnTeG*bY@QQ|(avt3BsKmzIaS{J~CP=k#cZm$7Gcz7DiLL*9X!!n?qJ?N!CLUM0Q1(Z3o(SD6=Wg+chhXVYlB$>Z6sG!T9dun z!Oce*eC`^Ibn7C1#5buGlE<$+Rv2bu9j+$ihWs5ROvS=1t(14JX0Fz|g(PD@Nwfnv zenq~%-={Vz|E(3qM6k+o1>aZgnHC zN-tsM&}Y9&M{Tvf_NiplT{G}a;|d8A8Cg`F@0vJ!Iz1g^lt^+gZ$ux=NA7k|f1NF= znX=7Yd;9su&+~Hq$OnUP6fAhKO`A+ws#d%f1AU+d2WeaxVDyY*V?7xkotP#$1%>y+ zR(S$Sg^WaZv*jA!QTjXDj>vgat2LUdyxOhda!#-jJAi{b2wL=>c=YsqGsfA&cGJYJ zZ`eM$qGy_2V9a97T80p-@NW(oM-~qgFBQ=TbZL4iNA-rh>{IY0Zp}XoKak1Q@>Lm%%+5*Gk2xz|mo!3!Lf8@Drm|!oW!e z1Isr5TC$Hel(T)vzq5~g{NJjh08&{Huwj6hRmEM=_xC%2R`N~~2#I=SYs z79vTXzya28u0TBIr&wA%e>J=7_TPsKp=k)P_Lu@pl=jkusFG3g%BKh#E5|vT9r{(S zx8gx#l1?u~2@>e!)-A-kw_$&;js210gQ2()eAr-52lp!tcW;f86Bhe)Dw4)W2`;&B z?0pd3t@%o>jIfkiG=o$zYE*QZ`zTC4vL`jd5%4SZX;+1$iB(@`dVB!Ua3f+Ao~bNT zWv;rtgEE)=beB+I^oUF|FivR1!8Nn(W@`^D%7KbPxfRdToUL91OEpTmCfBP41pYO; zgD>3()~Pa%#h#woH3GGR1HiF+kUp*dlDTMOVUJ?6cw}l9zM2(6BT_LovL0c4g@?Dc5wdr?72c9);Yhq7??#o znKsx>dvjrQjho!@hrC7_WqVp7flrBNxA|A-O5|Zal|k(cZNg-oWP86;y7iUk;knx{ z4B%%K*V-KV$}o|km%$qOm)A=TL$yM3%Y^JZ50rv@#b3&1BC|~uixBleXI6W|N*cZ2 z(Nrry@>Q~7oP6{wp~b%j;Mf-pOseLH_A8FFfYq$9zX$a**>j5U+Z2;Fy`9rlO&~hm zX%?TO*EdZzw%-l#QA+RC|L}Xk{Xsp7=U-T#Im@;8E?Ad7?y4d(ePq4#iRVSZV{((q z`v5eSof~x%E_Z6+`D}10Qh*nu^Pyfgn|};dvuLuf6XES_!*`%8w)gvmvz2aHe=CrivF`8aw9z^0zgnaw6sb$~RZ^N{PP=LX zC9j{dlS~25T0J#ZzgSJpQdX**gNa3;XwIXd(wx|7=1Iu;>&XVWdTcAM3C<}_%$bBs zt;#O4ni}4p-bU5WV^amoD^;2p3cQPbjb3Z;_y9`5w_?czg7dI__*i+<;6!9b|0oue zl7kv{oBnzp=f`p#MA#1=_fM}m*dQY@YcJSE68OB}`+Z@{_>>e-oLG?0l)}Oyxqy0W z3t8JsfU3BK(5jO#XSv{>zs~o}%Hwfuj53g~rL!{VV-3?iHUjZ_mVli~s14yJYaN3$ zK=l`6w-h<=oyIN_0b{82#g9tkx#)qBTMGcj}k3ps!DArRy!Q zP?99cbUP{HdI+BgQFxS@4i(#gv}s7&ak~>u)Mm%kgYHhB2PXTX>UbepC;FqK;O2g5 zHLjE6!LhO6DGfxmPt@ix_a~@;&|fuE z={&rzel%jm&v;L^`dP|mglGiH}4Js9*1qrI*v^$03>?x^@Z8<7;XN z=H#?@4aQP$JwGW3wgO_b6&zFRu^HkFN66X>-2^%5&wq3EQwikL@^AYh6OZFJ*bsm$ z;OH3BzQ*zb=Idw23b4|~ojqlXA+xOUU}g#VJnPfODg}Y<4(99n==ECRW~>+~WM|dY z+_L$+WTd5|&a|@SO{dS>wn^A*zJtT;kK&cin9Pf)M24AvuSuCo@mN1vE;i%P&zp9g zDF#|19k?t#B@UW@O0Pc}{t(wGju0qu`g||4dJ5Sx*p90tLq1VxAdmH&Fa>t9#UWMJ zwL&|=Qx+C6MMUDk-8i;}*=sU;i`kXBIFo4q4P7v$AMQ-eV0s2MbaVVdQ9EmYeJi6W zHEvttV5QYFG@?#M-7kr|2PylPiXM}7R=b_tz^)h2dDhgb1ls0c)OpZC#EFv^-$2R0 zFcU65w0cKT?$FyHTzFl(#DGX`)cFe%GEvkAihjhp`n8QJV(gjlSSLTGaLzC+pHLG}*aX)p=|uAk-w?7NtG zEAo_2ELGS+LHQsP`_o|0mdhK`*s|_;Yj#>Z|L{gfda7DJJd+0Hi(RuS`Q7zHM>zmT4To#N9 z;fn!3v&gwkloClrXWRg@KLpV})e#7-BHc<- z(L(C?ZZ3uzW=4u{D?f1JQI}grg|G1Q3VMkQu7d2vMmEcjkybDmdA*`akCr~B$jCbi zrmplW5#Zpk-)@)hhSanUg|Sq~Y@H{6qe1fO&oJY0Ji?|YJ{2QQ^tuNUvA8;ts`9|)QzeGmrG=~=}rl?2&ml}S32!a$F=;0yjp+6np;df z{(8wcms=yFCnjKj%)B-8!~SkD{+{Xt*8U_gCp?V4Cv zI}7UH2tp7uhc4K6Yt^bjA{qZgj}xUhnYRAsn3LUtX~zsbtI*Q7xTLS(p&_(S&kl= zdQ<@xMmz|H5Lru8H8z)3OU7tEKN7vyk1kn-_V+US69c-?fD zqXXr2oYS!b3j2dJM#nGL%?T0^ZP=DrxB%s95ANxTB*5myq-uSsOY(Q zA@``NLNEKa7T<)LI$jb~C)rx?F41KG&TW-cUby3GFo`jg)yw?g7bKcN-#t5G%A7jk zk}rNK32bS64Q*fS3Ao}kQ)@}$368bs;S7$fIE}th<{_`q`dlwZUFb8KH3c{OI%Jtm zvY>s5jpbUqT;O$Bi~&3rlMrva(R#h^Juts1awA{O!X7v7hjshdv?PcBmFa?FVl?^gHG zm2@&iDS4{}V^E9OnPnJix1N}$mNlFsiS-mca%I0qdDVIL9?yvgY(wpgiLGjxiiMdZ?cp4oWfkOuL`w6<2 zoRC0bKjXPrEUeAaKD`YK5Dx%O(6ApN6qW&T3IfF9a!glMb>6ijDpc17n4UM7YU8FDT^1K!jgmSVQ7G`8UB~t+fT;na&VL;u2Y#9>@s z?TiRFY?m3a7e%8=oUJIl{VT^9bQsoTBEZxFVEDpA*>sgH=hwq`5NuXXR$}lA%0Xw6=}Qe|0+^8Ue5SlMm9;(!sOZ*b-ar zXE4lWgYaw6r_Bc{Dm1;wJS_kgX2>s_4*4)}Y^zPZao08lqzUPDiY1FyuMQ?Dr_L9D zT>WgfPdcbep2BTEwgFVF+)y(FL`;n8E72w&9}IL860CVT*)i@A@g?)8Yel%4QpspD z$rUuPxyBv7p;qs2aMtJKi6CV-_B$=ypP&6>Cb{W3eXMd0nF#b|QUbey^9DW@37+4- zuoF=T?M&QGV!%RDiE!BwEB!fw8x(39TFhn zuujk0q{fxhMpJ>Q_@)0$w|02mtuht(RtaDlg^qQD5VykLM z(pvPY@>`7t;!0I5EeA$*AUJPyF&WrRC9;yMBNxCn3Pm@H_UeQ;o=BE9UNYl2A7R%!ZTWN>Klt3g^`F(Rm8Y-&>JYtj(~Ns8sZ5(RH_rJDxQ@iY;mZ2=!{+l58;o4j^#D?^RE?1W^x7y{$28a-#G?u8eP0 zeBP+@wO0G(EKZFUyQ_wkSo<7%L}m#kjBXcSu%MQZhvZWAQqYTHCVm6Y^8hAiPg? zt^qatIea|R@9~b(U0oW@cijyXc>IQhPm2Rlj#kr$8y5S@uq>P{|kwLx5^X)fbFCGSb3$l7)yk^0WE)Dhw0np=!;jP z;7-}^&)+YQ|8hd6sk8w#{$1Lox=K(jmg5+En-#!ct;^#&@!Mjty=%grt2*Mdjlj%NFK1P)_wqfs|e5hYo#?&?@%?jH0gSe&~9sh($Pa78hRRnR9<1cx3lTwOu9dh+34=lV z5g_x{CMawb|9uw~yvT3xF$4(0kby2#Zr8_cX_?XP2Uu29*gx+dX16B-LP#3`=JK69 zfvuuDY_6{wJNt7!cU79E3> zl)U-Y$Z7|*io=++hrYqrJp^?F?4+1H`@RR0hn3|%xd;}8q+YjYZs!q!C*4B zJ>8uC5@ZUka3Il1;Q@3^C=@0wF_8$%jiTKlUt8*E?%OccU617(qwO5gokIh-$7C!n zIoFl+4s;dND~hAx9hl~eo142&;N5H>6!|@)4s_J5s4u%s^TWfZ|K{Hy+KaO-8-6;a#$)g4=pu&fq|BF z$jK21;t<{R5j$O zBSdYT>CXYBf_J}z7|Pf4>)$<6NnP;AnH5+$~3BeKKc6&nncKv-j$Q_(qaWRHYHc-QOXA>111@ro5@ zMtA?>Fj;RwKyDB=bCaKyw#rK-Hr;YItwaEIc5b4iqup|A`RvF4o^bz3WVeqRBA+;` zzN}VySWkOtTdO-!DW@DpPn4v_((aF@^8TJAHQ>kJBK-R*8Uc^Go@B0=9v!`Ck@um$ zC4=-E$!#(*BB&5Zz-jD-hG(inCME4x;{EN)Aa+8)2mF%y?M2GCzVIb4P&E}t*@2-A z1Ui4W&#$%ngE57)WorD?zwkn@^6@F&20e?O1et{eY>NcP{-hyu zK0x!MwK4+3{=ItfQ?Ha4-q4~ce>W`(f5T0x#VM=2o{|Sb+!|T{ z6H!TDio_7tt*IyAwVrgis?&*WZp-K8+&nP?xF8T}9X*V^?YYT!1DS%(OL%j*_ClRO?Sx?9 zFlcpwOtRcjX&^4gGj6_iROO~a@JlLRGAvN1X3lT`U$&S`DDQR{u&*)>_EMLM_0RW7 z9;HHV;Bf?YfTBI0!M{->xf)1D&|ZM|UOlc>8kxzr4FYd*n&B$Bb{IBZlGXLGHn4jl zPSsPBG!psU?AErkM+emTSBH7jRaG+aEnQ=kJUIcDUN^BOp3tBJl7S6{(MYtMNgU+>%-zZOaImJeEuVGR?y zo7_8scMvvTA_>Slla_#%1!NXE_C8(W#N*#jz8;3N5*#j!uxHPfp9@c#D~^LAxuZU+rZs4UwC zW_zDb&|(sx*qV6GH=MrnlTn*Y1ux|6=s5Y<_07h8@ASn^RaYA={@U)U#@}6K*!C7E z5=p2Cz7~3A0B%UxLI3&9`R%#4$M5~TR1*FLNT|waF!|AGiTS}qL%ZCvfUYY$^2BPX ztgMW^XgC+1$_x*(I!Uq9Km%f0i(a=Dw1>sNP(d{MjppY4+H}Lahe&f!tqG)|I$H@J zG5*oX8#G~ms6kkp6R|MgBAQK&UNPDvR}&!{eOK}~o=ZM4tT7}gxOs%yKqrC+>S$ol zc`Cacu`r3)J_PX+XRsuXkvMEvLFkv~wR&NqE7ky%{*fGl^*l+vQU!zOevByVI~?Qs zXBg?M21LGbId(uMKO{yiFS%y{4_&}=M7*$WBub^RI3*dRq!;2Qh=b{DuOHX6Fa@#h z!-yO#K0G!L+7zuMf&~5VEuUu^w+*ELRr#aU^4e=sQ7`!l`aFV&%QaMt*ejfr(jvB8Xq}a%X`VXv~7}lnq+iY1;Jffi3zGjm3#?#`?t8 z-rGumT~+i zy(SSVWA%!K>Czm;$NvB`sZK&|8)9nv+l0hmZCNF+;=1N|qkoSlo>Zy=E$LN>U9{ z`0eyMlCwo8-;go1P}NP35ASvwxBeM$sbQ|!?1ZcbXHI(6rBGm7+rv-#KX{sI2_`*? zk`5q~?B92`wx(H!aQuwXx;H%desJ03Z3c`Qo6yCH|_BL|^=J zxdKhX^&HHQeE$SrEKcv|F5LnzbwGqtmEA@jl1}(TuJ>sFTxJeVDbFi22;i31n zT3zZj9F`-Ecs5Cnm`*S7NuX`ln+=`mmzc%>dFrDpOcmUk^ zu@wk1j1BbY)4|n&G93u_Y;i`|t4*@u-81H06!*eeN#G24OJBEsQ6Ydk;Qw=vZcBo~ z>cV?IZ3@3aYYQ)!Bumi4CZLAlD!oVTeLmRVcO~wfSRdzyWSq~{GTMK=9amz3#BWW` zjA}fv{H3I!rmoLmOx0wtVdMY2`*BnC*lZmN`8GTjc|Br~Cs>vk1L^(PPvA7Xr9R-E zFFN7pGA-h+ch?+_H-*UpUJyH_^6!9Nei<;2dO?XYfoB7*s!s(Z2e#tr>W zz%N~WOUYw~_2kTKhc;D%xqpL={QsIYxZ6B@eO{|@Q_eNp{6%g5*t~daYH9+;LAtBC zoJEREt-?6x$!5_iz41^34gb<`1k!Ge}&<|MY=>byOUAUAjDAD@RRWe z@~{v@FHkJz#CeH_`ERKWLapr;$fBDwkV|ou#D(aMY%*+IJQ(=AZ3IkWADZrhA+FR1@y`C-KWgcTzxJn}FuKl+6M4x9Tt;(w0eN?<_ak;`JZ^AZFQ-O*5KnZY3{#B%sp##ffMNq>WUC+&L^FeaGx+Rm ziA6^w1+Bh>Lh$+$I@|QGUU_L0<%O9MBa0EONWVkT6<-xMqDA{9&^l?nb0nfwO#>%w zWBrbUhv&HNu&sq0nZ#otzB?|jZRWyU6d=%{ zf-*4ZEtI#kMVbXglQ1$Wmpx5Uj87h&u_j*T#$#u@+Se2hZJ2$iARke?~tVA7%%cq7J-Ljp;xk2nCa7p<82)MywTaKG>}#a?sj- zDE+PAaTE2M9pW(^u+?j_XC4@6UhQJ(d}L!;w%`{p>2TS;GlakBdD*z=`!2bK0XOc+ zFJ`kDY;5G89qR92hl#c?yH+hmMxH;OgB0+D*&?jT@ISA*8*w%Xp1 zNk9@2G-5he#Y>96-cWvK3*QB1aGy7$u1t$Hunf;m{aY&S6P?ghOQ_4@=rFiF(sPEjz!~)Kz|9M{1|e6$Yfj8)g^asiTqTZ-bsRT1op%uV8$ivf<`0f_Q@=NqV`YaW zT%u%xFN(*8(YEYyuqOC%W^vA9D*6Y+GSb@`Cw>vt*sXfu&QYZATBFaWG_Oz|rHSlrJfOGVV=t|<=+c|-LYg-IftP;G7Vm0V+Y3zd#=dY zEk6`I6daQEb9J<-CTMm=Ui{^sXY`h7k!jlF-OE$9fVQL^i24X!l&b3f*k00k8NSUb z>zkHYdw!+W@wOcUd}e1;3A4Q5<*~~$nY^whaa<24EkH7f5M3~Tqw_M&F5{*Eu}rkD z^LsOOm+0Zs|ce1=<+eS*CiPr_w$0Z@zK)cBi-L6)#VIY%{8@}j%?#Wnk5hcI9+psBSHux=aMolC{vuA?umXH@`Y*)9-^!WJxwmL1eRi1kN8thB!$-=o7-({v~X;$NAECauy z^ionS&O!Y4>l35FAGljZ$EWIj79o6ac!QA}J*!j|BXOj~?~GMVhg%9(^C>ovjw;)T zQ9$h?PQ;#~Mz7ti=~H7HqnNMP^;|luy0NA&>$|HQ;P90l@Lhtr&uPECG-JNZu@Z6L z{|Msz*OhR%lia+TMgVHlEp?Zok%Mf$_#Ukd9ZuXFgHY5G8@+wWjwVi`;&0djGu;n( ziKtd=(HabqlS(Ph_)PGA>{+(xzDo7>iMrO&2yd^;NShu!!}hbBM4NUp{t;$~^8U2? z%2R*Mmqx(H%gh-%o>%Vf&tPZG&L0_`myqUBbndnn4 z0+{jt5GFxlEujH4RzfHCVF5q5SiLb`jNh$Zr{_cl;Rx%4en4id>k>y3H zN(>zCviKxtO-QQ?@c1F~HBanYCorb2xnq5fGKy4>xzrXwu%&_>Lq(a2OJ@mci7lBw zAl7hvisJ`|M3jk^)^8yTqh>>!p0v_BgA}5Rh?4_fz5e-NYTvo%GJkh>oSU4tm%V4W z!KHsM8!&cvQXwO8eY?lU;vLT51g~xZaaCcd0Z~-IZ{`_eZw8o^23Y!~h^f|J(tHe+ zQjR4JjoF!C`Tqd-KnTB+BEsU7WmI+RW}HX%SWy7!jNDhBpjE?Oe1OgV&4n+mZbAQ7 zm%g@|S=&FVv_m~HB9UpyJ|F-UIcVfp+8*pV^#N(?tC`*>%Ucwy$nHeOD0wB?%_2tv z?$Z%j30AvddF{0;(YEc2j`2R*Lu8mSB-ecjxn<3REmPeShR)YBRp9_CkqdL@Z_muh z)h(KWAcY&xid=3oX8-Ng7ajsabp6Mh%dLOQ3!)-W)aKV|bCX8U87vXZs+DzlY>~Htlo&`q6@qscR!J^b4P*=we z?y-NGNS5w79YyXkuDo%w;hsUPC;BR7*#CKk;}GGQjXMUUDSYD3w;#B&xo-D`J+R8U z+LR;qW=u?smf_S#+n3jD6=Kw^S>lMr{xe>y8PI63Ch0bnQCgX|WWUuVj{QB}zx~Di zzZ5q|E^dzL>)nAm+R7AMA>nCxB0qn1jFki-#o+ecyY{@=s;nW9DeC<84SeX1=v(${ zczw>^xqHu^n95nB_$W_~+_GxX?@yoF(2Ck0>zB@S6w-e~Gp#xT*KYgIR2UH zw{DVrdh*2aZJRf4+OYoZt?%sGvj_OBia(iob#gO+WpiCEgTeMn2S&wV`RyyxV(ece^a93v9EbVLm?6hZ*Ann_?S2jC%@ZcLae^ObNX+xx}p*Wgin>KBTBsRT~?9@`= z%L^B^PtB^WY9Fh*jpj;QgHCBUp^wE)RV#0$`BSZ4zd^HN2n)m==L&VLYuq+R7 zOl~=6qm0MbL%Bm$bmG(T2C?q{;!!$qC)s$N2xeH+D|3FY4Ew@@!NI|%n6A%Ru753? zcb?xu;>e|*Il1G7l$XlLdye3d(W8Iix=$RhvKcV=*uB$NZ%>^%Eu*w+9X6xu5>z&m zo1Vh#7LiqM#Wallu#x2COZ`vHitZJ5r}n#W%>t8uB=yyvlfCYbWf0CeuZjd_Z4 zAO1gkFB@VG}x_}j5K3u(FQ(jR?_T)FcV>1dU9nbHM%Vyk?jLb|v>}|-XJB7LF zi*uGSIfxaC)e^z0e^l1T_|Qe*FIWbJuI}CURo|9>HWWB>_EX&>Gd&cKTQI#`uyagV ziVgGefaa~64Nlb~%>*r0{Q_4ST9&1o;T1TfUe&;y=WxNEA=dpT1xm+AYo!A>2MCP> zq$xL=Ue(F|(|^vOPC422Omo`dkVQzJN64b~eWM zJbZWM2cLGWs>&QZxn!Gn!$ybk03jmHhsGBzOqM4fzxNs3KFvchFOV^g}pK{jQit#Sl%~RYpBu53-wUPvi#?e zO>G8Bu~+=3boe0F%R9KO%@n8|0V75=FKLf%KX}P6r>nQN?C#Q4| zs}T=Jm+G|-?DOOuc&kA4jQRA>A61m71K-dwE9KD0vb5~$WpCr|0YOXIDP9HwoEpog zgF-Q~(9+XUogPKaK^?WHbnR$wGsViGcs&YpGIO7qc|@3s^BDZCHou7A=mY{&Jup?r zOW^PsMWw7y1Zm1~wu%F{2dzJtRoXRY-g^`iaU36z0i`>?%jiGOl*FB~^Mc(#V|DA^ z9a9ych;OY~gA!pnr&TAZBH*rQ%cJ|^uEqY5v94p7@=!~G<0npv5wamhX~hS+2Dp3! zv*Y}!nlZa)rU=Bkk7YF;q^*us*2ke1s21$^MZGfW<1Qj|LT4+bgC|AqiRmOA<67Il ze<%nAIhoyxvT|KR?pbjiU%!3rY=GIbmVX!!POFGJ@;SB ztsR*)ereh6AGH1T+Rk5f1UHS5xIQP&uo={R&);;;Rps=70|$u|tJU3+RFT=U=jbF3 zUm65>+rLrDS>Ow_ijS6a$~F}E=)?&TGB(T@ReXR1-m_!d@g>Qg4OXiLl^_&MwG3^i z4a+j+V=rB&7O1vcN+ias#@Yf($Ed>i@&8_Pr#e)FX%u#cF5bN%drcA{_>57AyL#7pPyJRiDPe&)IRj(D^^NLVMT$XAAO{ym0+9r$&7Xp-8#kf z&TL1Cz~tzbE$l&v#O57Un&QjF$c&*rxY2@P%3F+`>xPz%DoxYM2-7w!YjmL{%Q8;; zGWLKOr2s!tHkXc)rZ0o8R;h-@OEKw-O(Rj~p>2noVct_=ttQ z_4wrUq(p`Y)HAo4_>IccD85c9Bkry8>FNOmiw0HT{x)S(+D=E7Wy8&0ic@^alVr!1 zp(nNZmiDpZ&-J<^WENuDROuiJ&e5wir$=Y|4-HX3(CHN(u@d_C!N^0FqbB!tX3 zUg>G$CY{i+^l(8zLD$Mk741sD7|pS`2V}?2omTwwHSho6!w+qKCdO0Q36ZPJj0~fT z5@A+3F`=z&F(r%>YI{1i4V`RZ{dQz=nv4BIYJFcyP2dL@Wl+85? z`i5N0f}WjwnkgOPL0`okEVEOUH-{p~8kP{4Ca6btLBh?NXD)Sy6QsHyakjpUJcC|f z?7>rzGiPg{kfykGL%KQGj=7gSD~qV(l5Jlb_p9wG-F1zsC|W*X-?qu_L28Hy4&^OD z0TB$rqM+VuE+(wD@5*@9Dx}4d7sDwPUPO$g8roDC7aA4T!u|!YI@>SDOSQo*6M9dt zb*{ipmK<@ao}DQT$#p&7%a^`g7t|E+vbk=TgwjFCoKfkZhkSp*6dqo-U?+vvl|5WU zy5RD#H)}+9AED)bChh&V@O@`g)fBEfWpdUaO$gBS46!aUe|?WJ^^%k5As!x_yY{pV ze6fyQkb@QweY3c@xTK^+H@Vf}g|9AIvC!AK|J3O-RunV#56(|AWh0nJ)X#ewNRYOn zUL=Uya#0(GciA#$Tt$jQCLk;eObl-ZG1L7v%}%^U1T`VY;oEAqU85|Ok|k()+E+qp zgD|$pVD_|GA;pW0FQK-FcwG^R;A)ILu0>E(JVm{27_u+mwyH0=6%Ce@XS104K7~&w zd(tX3BmUV}Jpp4gH;dTow9CsJyIA{V?c4sVoP!1pA}9+_ik+INSpzFc0brO=+ro;AzPA0BzPYTD$i7jM z5^ehPCs0buE9Q+GcK6P$NB8e;m^soO;LdnE!CL2g7LM7pXhx~FIE5L?Ixy@60GqDa zs&mcY;y3%}S)FZ~{rDFMYU-8Vc3xwru7GOTv!gz|iW(x`g1*LCoeNAJ7>lQ(=o4Dr_oEEQ9Bxcz1wZ}d;eyad0Uj4hIt!4 zYZelwd&E|U7#Q8wvd1j~Ko$lo?JI$w%jy=o{%!AVe{IEt)yA)0yRM^>)uEb{q2;1P z&Zx3uShu1}=f3#!k3Y`r-neE^5yN_P7A?`D+_Wa!LHpP|w&zFN*AMQJqu$iC0m~xg z(3P8G{jl=@hSPUy(N3B<(=UHcZ-fVC>`_1O*ptHn7M2w{sWl%q*$!O;=Eyzw)qK z{`u04H}R5J^zyKA65+dT{8$%PoG^Tm75_2z14L%>6s^0mv(0l#0Vgp|ZtNkE#EOf) zw*5cdzHKCwu?OJXrDlAfcU@{;kF3NG_G|}L;PRQHo5uD~*#(z`202&4Rd0u_TfJ7- zSUaTT^zKco=TD>fl&Q#2S=LaOEDJl>{$-PP%p9z{V-r8*Q@^@X6h57mwT-MUVZH2S z@O1cszWm5-uXCC^yg61NSGidkK$p0c9weAIv#r`}#MH$zp4oHYGj>(ct9a}AmrfSA zU9jFuUQnDfbCY0Ji}qgK_FgMobHW&DMx=2_dxtDhm0jSr2#60|FolrYQOWnUl@z8M zfAH`Z^>NrVVq1q9+3B>dsaTMxC-~&?U(OTn00`by6pBY;^A&r@IRx>4&dAUp#fJsk~4-$*rF5l4Wff-|O7ro#-99J2vq{ z!T?aOW_L?(^mPK9MNM1v5zruE6Ti6?_K2$mCq+3RvKnGvLB7}I-faBOn3=Fejq!Hnv>Kq#-oidPHv z>vPGghmzzdc&&ceerLc&GWzWwhk6!`0JYJ}BY*K4!73zRXT7$P!gS+UoYZGw({75102~4N(Vt-*>Ot(l-oY9XNEn#F0Tq9 zQYr%|&FMU%YgVx*q+P@f9&>was}_+lN-=R#!e1yCo15pW++_BR9l*}C8CydW(ye}* z(cOm!@Lr}2#GX{iC{SKkEB4ayp7=d@|xxGC*d&r4{5 zCuu_~^;ECSb}D11fylUY;?UNK)!I(0HYO=`9{WaRdMuORzdpNX)7@J?%^o#KCoEn# zRN_=!v8?`iN7l`|_5IiTmQJ)aKo7Z@=W7Y zrMs`Utr%#twia!oeI~4WlV4gdISLm=4;3+5e|J=8j_x_yX5-pZC?IKRX)in)mj^jH zIcwLgi?*#Msort*TWd_e!(Y$N%in&dQpTn+FfUQdA65^@*B;upXZPrAGqd(o*Ywy! ztET;O|L%wTc2=c7uZZ`8)ToQm#bxi7W$m0j^!C+nE}eXT{jf6o1vj;`$d1N$bM(ta z{UHRmR1>;DHA;QEpacK~@g4I6>z%3k~ly zWE$}4FYu(EgMb`Yd0l-pC_xq8saX5#(6!Nt^45P^AGcQKeC{R3A~7iy0OmbGb2_is)eAr)ock_rCoA|ThgPJTB-7z@ZsTurjLcNT$O>QlgS zMad`7;9X53GFZfN)iEJ%exIEFWnLT|NSm6{tS))aq=949O;lX`3xb2>xZyKB#2Ohn zq)iX9qh)71JPo`a0DaiZ;MXaQmpr4#fWmd3_%)kX<%m!>QwDDA^cI4J(y?LV#=rjg zS7D5TbytDOdidy9Q(pQSc5dIX!}vIiJrgV3<=^QT1wf0&IgLHNyI0yEkkqlPL{}{9 ztwDunc5V3c>F<|L9CY;2=++$Y!zI<31co&Q1C*<+p*@ln(WuJ-ik7dciZBokN^zee+VE?8qoJ{yNm2dX*ijmz-ix zJ~xMer@NjAQnc+ds-L=R`vwTf>N6E-)YjHwc+oO^yueY>LSdr&_V3qT_&T>&y}8={ zxhQ7|pmN1?bc6diffp%viEY_J{l3*T`nhLW@2{GH#_{OEy}gUa>DJT0hlsqX6{#RW zHSm4?za5?qGC0&{L3(?A2Ysc*IusTR4+$3G54tfG`I!^CWn-|?_B%q9yb#}2Sb{yL zo>-+iZR5(0XSw9LdD#<}m+iT(uBx#bF}*}RAbbXBpR7$ArDOeu4S)XqkCE+<8ZC4? ziGQV%Zo$HZBI09#f3Q(xtc%;EZ5=}?QOlqa^DSk~dqdbXr3@0;TYbmP|0O&Z9!s_ce%;?gS&+_`_qKzm!d|vW?V||UWVi}k%z!TBj@s|{4P z=ONl)Jmskw|4SLEZ?1f+azAYYb}@I}Jo{THXXE1I8LYkbwQUPJjQCyq!;$9p%n*4l zG2t(0ALWUy-Lk9=BfBCp{{7$o&^z`l8tc!R{l9i@k4}WMzKrEXuuYMJsYr0JM~3CK zU)~@{jHAn(KQpY7&5gW*cr5%QbE|Wz3SUq9;5C?dC0yzQn_y;hwgMvfFAm!B4UDookej8oPS9rjFo_*hmxEXxI45~T)D zzWe6WCy)6sxOi+I$sPXlf6p^4sm=oY7Ov~cQ{(w|fxVEbD5VL{kYVZ)`RmKgVO(}; zs)O;FU$-DkVz1)Ng?(~Nl@5iakg#n3<^zERd~QQz1s=H5ShB;H1qtH1Cx~@LE@Uh| z(6;MfaO`!&j4bc(r{GX77f(XBc{lp>>GRFyE2fP7-h&6TXU|cKOo6Pc+lcAm)_2}D zo$Yn&?ANcqDSdREuJZDXY=IsT@GC`p^z~JRaOWlG)QIpdu&OhpQOWOYg_Opcn_GgIg3P(MUz zh~QMDb?V#zDRMALpX{)YvuYEayY6g2xUqH;pO?Hx|E!U7JYbJ7PpA32Lz6763Q41u zY47DvJ0#v&Csp{B5x^gq#JAS0F;zOKV7__F+Z4Cez8LmJidC*SblC9MO;VWdx2A7j zl_oX~|HVgSxN{n5Vw(`RENkneK0jPI%hpgjNF;AurDJCI4B%5Jp7qiy9lkR0WeKgo z)N1&GQ**jI*Y0`2m#zKT*R``UI_GtWEsPJ#?GQ&whvEG54#!l%(3Y)=Hu}M_g#(uO z{~si4sJ>0OqWSB47js z1LmxNiaF=7YtA_!W-+X~dUxM1?=uWG&4iwwIe`O=KknY1o}TWW>ONIdT~$v_6Oqyt z8!#$s;u+P?dE7^2F&@`-3kPf6J$S{31cW&$De2~|+j71KUUA~&$=KM~+70o$#EIXI zY$Nh+n_x{+(lCb9Ah#6rn=?Km<+n6HECK2}GfD@P6QchvAKdxRPr-xY!|Rs-Ka>yZ zu$rZ5LGVzD?9)kaQY44XkTDQEiixFTw4YmkvNxl#J#OJ>6rO3x7U=;9*?y$ZqeqY5 zKlD2P58H-c|6W1v?E`yt^6~6n=bq99_zdY&vEVj*hAu8gH-_n%Klv=|1&R|uWh>X7 zy(cXL2rb>Y^=0T9-c$4amujbLR~!q0=NKiP>Uk`rK1IhBnJ2pvq1ia^ z3fp;)-Hg5q>EIHb-n@M$@lBg|=+d^IFCyl=mh88=;J~;+YtH#E+9gLyr>DdyJ4|*! zEke#;vSgY*a%7)CuS`ftxN-BAgwf&h{fCbW7cC-Y4$`@#z&Y08qetaKG_{)egakr) zM!|Yuiunm%E=sva@m+zSLjJgtviTEUJ$)c9)B9HyxHP~sZS;tLUTO$mb1uPVpnIJf#`gFp_zvJhR6H(-6CqRpRv`}`jRlxb_AG`OUfdRb*V@+Vsj=mg9 zhxn}K$ra-A^rq?tU-ive$fXw4-fybGYXFltEHI6}*}@7Ng<5<>T>R_?|JezkbX63Hk{@X}$n4{#?Wo*UB7 z#iebFPOV$Gwre@qt>fsx-uw|INHuux(ux07dtCqe-@jK5m)4`wQ9N;If@gOyt`Xkd z8=}&I1ceD+?hziHkR;uD!HAnZc(^AbRX za^}gX@y{=}44)9R)(TsRQDhIstfaTfE2K4g26c?=fZ~Rvw`8SAVX(#fk7gR_!$b*! zP#p;yKX>6mVqzlcO0xhBmk1+90muH5ftuiDdU^(fMC2B-zZqZ=l1IR@@M8z&9(Pc|aoey~<=%F+RP%Oi#aztuMphp+b zAKxK;Ws}#9}W@ac19kls|CX>f0kY#)hA}0KolxsF_&nwkt~^4 zR3b@+&YuRobl0v=pT8hT5cnjL4mB?`GBO}^fB>(!10|IoKYf<4)24PgW9Cc=O%yL@ zMOk&WpB+08mRY^=*E_S*k(-08$h()%OLE5%hU4JE@eNC0tgou78q&LdECp7+FCgD@ zN5|g3e&wioYDg=Gu;y_dyZNHUi}UA9HKueBzM&Z{hzK|~w--X~=B%>>gm@*Uhi<#g zZrsrCIzV{0wNi+H`2}n$ZVp>n&g$yF)`uc;nEJZu3;crQi4rc?&c4=6ljiHt}351*MU^qSWh-8$zjyUUL9mx3Vn`;DG2E)-I$ zOvno>c_60=a`no2xV#2STxZESE)bSZ1Mn6WEthvIuPG@lZJJVpy!GleYvp8-*JK3u zaSUTwIWp+X_LYEGCo_c7fsE&l8C^2Ux=FD}m@69VF{KlmmP#5p|0Tf6HqW2&;OaTf z)R6V{Mm$la_<_enDx8gTu!ou^2nvwzZAne9u?yvl3pF8|t^)i@=qNn4zEWT)PRve~ z_Ld!Ra<(MP;xCfN25(T!p9pjm$zrKp@^1-6EUe=vRfBQp5%cEHCv2)|7I02T6GW|? z=2s`%pq-eEkZSPtOR^Ax(y@R0s!_pq8jjH|21Pz}Vyu61^H1bnXS8?DTSa4I?_4_N z3`w%s^npvBrm+%WL_tA8{A@w7C6D35d+8wwLk=%{=skI{x38bjXL@FM*&|7V#&>CN z*%7dGKg>pT)+izlm267(omQ;Ipd|I2>1!jSqApy#L>LY!AfdUWL&eJxBSw-(nr7kT zsnd#-kyIjIIhzAmd3S4O>a$yy=_LS$RY}emE4wxFc$zDV>~7MO@7IPc2$QRDO~^sQQotpCbaZnEfXuR z@Xguc6&xmX77*;WprrPe933baZ8x;oi0XB6_GlWp+)&ee@m6Lj_942?Hujl8gHJqYUzli`^IQXw<; zo_I?FXGHTK{<0>Xst_>vTP_5yJV64Vk+ao#vS5%I+M{4s*%7q%yw{MSWWBsB-j*?Q zbY+ci(OCnNS==oM{Uf8u3!$N*N3>$bc^tgm+}sJTXqtsjU%qPoa?zlFw+ zD1|&cL9-1$jPZH=_vcSE<=?(|T9Tcv`K-+wte+Hn`|M$2tpD--JLa}L&EMt&*|kH6 zjH7E8LY1@YC^qjri6a@M0H1F4KTS9z;1hx;hi<=Z$;hhlBgNtPq=kl2KJ3Ba?boLr zWd~x(=Wc+@0a-(@xYWSn(|X^fGhg}-2DIk1>C@l7dr$Km#WLKtG#MlEo{OGZiaj)u z%B~z5JuI65vxPa};_i($;U2pePkrDFAs-lOc2sPw|;vXz{J_1@a1ugbt#Y#aYuHXFEK{ zIMxiI_N@J62i%*5;7al@EYg2bnE`Z{iKpHSiRXfNZQHgj8I2TRJKIyfmwY19%!e+2 z_*k_hKcDBE6Wi%|MFstA6D$V=1Ze)O0EheG?W-Fn_FBUw#Ao3G^ziCA37sKI5anTg z=X!hCUzqjbbxn*aru5H0|D4^iYDGg+Ixu0lI@il_pI(B?+e4on8p}d(6*s3ml>=c5 zoCSbvYwq)Iy=t=4qED|8(-hrD)!46<^^h6>Cl9HoKoa}O4*w;4EP=nlrhJh_y)b;& zQ@yl`+*g@>y{(oKjI~zu}VtIaI}R-fbFcgThPD^ z{TMZh%N_3cp6yohRYYwg^Z+cHUOQMlF74d{6+q5d>{=t{L#Jm_`RMMJnZxZmsM&cP z3Z(htgb?S1p9rdRd$`?E{Jq11AtX+?q}dKWiu1 z5x(oO_n0iQ99|=*hituRV3Ns)E7RuYi~VS(7#24Y9Qnw&hzH!Xd5h*L)5S}FB0mUu zic?OVIC+ZZAx*HnB)>rO$BPD&Bdox8O7lms^XHG!BgZ$-AMczyst!xBzrzypp_P#IoJHCA~GZ%L9iF(PUREC;Rj=#!LWjSo!3>gsMM( z{sIc3gOv{CLqEBt2>H#|_#0 zk{*<^9KH8>;KVvEz5rD8&D-9})m?4*=z4^H6fIw_m@$fMJUH&ISh*7FiF_js95|5f zO|86k-Fnhn(=0rG`b>>DbbVm&u3XH4QXc?Ld+%aR)HY4q*Uuj9m@`suZ&tQP^qiOv zoyq zJ9H!p)WHmY$CBU?F`NV-fedsGV?FD7${w-$WLnon(G?O4BSy3>iXGUa{Pw zS+iv+z8Wl|TJ<=za$eOtg+#yr9^9VgP^E*;hfY>j2us{wKVgY9^$?JV;6BHje&{(k ztSnJF@D+h)|`fT zCH%@(1sINDK1MhRz{$bAZPl%Terzr~fa_uzJyTeK$atjfFfb+Y5de!>VpGUM(tz!x z&u)oRG}f{Dwqi2b%Ga;w&dnzMvkRJ0LKtUuRu*9_O}3Deo6EBzGa@x$+vV6JB1v&f zgqRM8eq#fBWL3_m5AP&vDgZFn3l<7>riTccb0w>xg*iUR#bNTIcAzwWKuv!C_KhqA zV)OfN80@lxVQ;zyY%5Q26@o`}z$V5Tw8s z8T4Iv|7s32W$ILVl%`oebmWL8q0oSVd?mOu9ovI+PI3YYF&&OQCW3%~7p`O`IPJW3 z`XE?$EoY-xy2B~~3kd+m`hoLu`1?wf4&gkaKc=jHr_z3m0z|0{TV&O2~ zP#lW3&xYAkUM_L~{P2$*KOPfP;|4|x2zD8v>zV_N8$VvcXPV$8qWF0Z z`UZ5bfi9tcp3o`I?kJ`q)(HXO5R3B}N7|<8eCT8vC?GblZ2km#+Kw;7K3;MEW_@7@ zJNkVEOGgo6I>c4@_Vo*J_!W1;)FHMJAAUZTv60?|DK)26*XwA7AJF=gD{aVSzN!nI+z`6n85rmT?-xGrfnz#Iy9)MC-!^xR|?P6C*C9KKS z(LhYbaqq#yvEyX0@NBVRu^>(1>NRVSwN`VWvExkf@qhS@_w3nAlU8k7HkbT7_b$uC zCne3ONxAaLJ^GA-{G9DnfUzEKRB~fIzCEB8)vwaAep1}+vq#|fRqy9!b|Su{TPPhb z?$sn>gF<@qd2MD<^vJ+Uz#o5|W?*NdCC4IKftd;1K zO$zp1pzjKK8zEk~0o%n6y%z7|*)Rq?y&-F$bbSBkr^rK)4McOG?0NHOhSOxra3Rp7 z6&i&1@3waAkZVVG(Gcr2(Oy2j>qx}c>U`)o=?T=7|NZagsRMvXalFVNBOWN4^YP8A z_mvg(n4+Cb#sLLd>G=5e^}&_dJcCXM(?)B@#*;hl2K!p3$4bo{7;y=ubo`bc7S14I zEA!9d``Ho^Cl2ZiR&txmj=<$d;Z+kPBXdZ$x4`zGO@)eS&n&xFiWhIaJK$~kf6u$NWa=vv|ik-Nzq+3AC!tqtn zSdX>4bM7egBgrEUyTl>?jpKU}T7s;*^=_ihH09Ry74e@SVT-=qbHP~x3=Lf_h55hmd80n{) za+&LV_>Vub=FFj~B!HanEOwaE0nbl5A38mgFCRb1{X*q@#!fYGD>}Vx`PVO>VXVjD z9{=aJo#x|+ZYiY$hnA(eV+{;CjnDH6n=>-NdtRc{u}U0q#!zLYgD?=zy=^Jb5%LDN zRUriuowGZ7SpCM5)4bY-_6{r0^f0TMxIz)Iz3d4+PtJ1Uffv``3Six5&Yt5DA8N)j zvL#ShxMybVA(-Dw}xxv^`wqT;JXB%i^qI3XA87U48XJ(ug#f425 z@7qVj9+8j>apfrys!9jp6;NJy_O|D|?VQ{!aQP9$M3erV$4V~F-YtjJvSTMs@GK=zM`~9`R*H&_K7a9|oSD3MSvhM~rr4Y(-T9?I zRXLKp^Tu5Rlo+0MK^ue_{`m33VVRZW`OxWw`1+~p5TBJ+!g*|R2|%sK*Dqi`&fp=Og?*;O05M8NAab)|&$$uEJw zL}J`TKI1%Aa&fj!Bs&mS2mq_t6vKe+QF|*6KB=Q1Y}s=_lTEd3*-|DkYAfc=%lY`J z4(v95zhD0TCdPV@c05t%kDffGc~Mg?L#OE0y}Rbppg}}vuw&A>;!N!1=4Fz6==2&r zxN>&ggcvzvaX^g#sCB3Wp^=ym9F2A@n(Tl<>wO5Kbb#_GTR)%N_`y6|PJ(zKC>`Mn zCUWxImlT9N5gh;AN6wMU3sM8bSMRAyYRw$gV|b-ZuqNP|bZ)DH^T>|ijh8LMCm057 z2SGB9RX+Rji~Qcd{QPg-%@6&it<+peoI6Q2fOr`m5pm*_G{F--{0<&E3^!fLBalIw z1Ifh@nQap+%$PY-lVWH9@VV@`!Pc`5b`J>I04}cDDj;pgk=1$Z9_(}%5bMX*FaA>X zL73aW{~?F3m0#d?nx~Ds{jGEWg=Y8SDYoi7KbZ@0H)23HGGbP|Pgqb*I&#TRo^i>8 ztI#=YxFQ>`hFITT8yqbT<4jg^aoWxzJIVz_dhcn=3Rsx+5I zY!IM7{RjE^YZmZXE6;~cugl{b7ZJ*>*^fOMz_fu3Q{rS0mWVVW_87(4`b38M7x!+! zXZytFWwv#b;KIWF;}1U%A>GW<;eKfmzVNhE{Jk?Ok@BM*2Vi@fK3;P15xD9k4Fg*< ziZfZsol15<7enG*U3y(sV*19e2o*KICwtzz}kycIA zBqY+^nq^RcGky>&Xk!ILB_BGyD9>(P1}LIEI2gOnYCx^c@D>m!^XdItxLUCvX&iS& zrQ_+%zqV%DF{r0|M{UO5r9(R(kH*6C>7||P9J@MjqmY>ha7@6Gt;G-jJ+5FS zFFd4|CEB~algN(n-OsE^m=e9Ovi$MizpCT4zy11e>)lVVo6AYpZjko(tr#T)cy=IP zNzRwfUAQoG=+NKmsrvssp58d>r@50^1_fY1=aIblp*3&TY<7&NP57i@K6H9HkT60} zI@0`YGMtW1kT;|_7xJQJGEh3s91`;!>FC7aNa;41TeYPF8NT)vX4;@PCItp`@2L4b ziQGM^KXs)Wz{1K+suNup?aAd9GH8C8-=bY!VG3zXoy|%vvQ{UN9dbUet0v?4>qnmi zD>=l+>6hOU4=4x@vBQ>KHP#U}3+#xDF=L)ryrg-^{fCdnPne*zSrqC#JUle_96D zkoAZPKYze9!GNxdB|4ySG<%m3gA>~W)7wGwz#>uY3`OoN2K-?!Yi6`0SX8Z?=`6>HW=ye0b42%OY}zVLEI?j zL#HW^^CE1g3MznrdG1B>Q;sOo$XV|Kt?-^RLUAerw{7v2E*CtEMLFUU8BxaK0tDS2Go6X(bUF}y7 zqX^6#z}i)OFH~Y#%ZeBCh!32S)dnm(rIlP1K#f3l%sT)6?e|~s&fR(cbM!uz(m`Zy zznN<_7ZGN0k&Pg(JSizjZO^FHM+_N)!1m$8Q`iGR$N8z0T$ScvO}U(&F@{Y*au-Kf zg(<4PT*)t5Egw2fYIt5bIAe%7NrF8>CUgJt8NFJSbV3>etc(nwF0b`ahE~hFqblDNP_vQBc zUl7f4>GhA~gIt0`q<@d$GZ;HWyoE?`=mk@!O;g-0?8@xyd58@;aPSb6Q1(D@+#+1U zEXXPF?!!mUAau}q2o=?(#!|qC)$*a!qgOt;@5qcH;%ssFh7{!VG`>`QJh)=6+PgHS zdYshlS~#g5F&^{y0?*~gN`bx>IRy?LKFoQ91yUz@_muyB#TrIFbb3(7=SIi$6alsFU93+4Ml~|p zqaLqc?>3#H6yKJJBhvZ@3?lM-_w}}<5Aj*5l=6d63GRH$Gsgy@>F<9%di2m5M7ZB+ zfUo8uyc&PAcYQ;b9gF^|s{H$ZE3dsbfZ_|UUu(UkG5xxB)@$J6a+x6ErkF-p{D^T zk|v^bIDo>OLjdc(PcLmp7woaYg9n2tB!qe|9L74Wf=t|=JAMRCwd%4E&YXiS+I2*B zBzp@21O11UJ?Y>T#^9gsBeD#1>zGI454{5L$l+(-;`q!Q@>vbe*}-^s@m9~CJ?pNy z##KyA?5Q(nBvFJs*`vCBYJ+Tdwhb|f& z845Qn*+1CCIko9Q3wFubSN+z6l|Ajy&znIUXOUozwNMapNTHt9~y7R-WwO$~t*-TG^4Gd3X$Bk$EMI#mXUk7%q8WqfD2=cr5yu|5*yk4_rbw(IQ6!{hXvT(0*WSE2I zJexuTct=z|xmU9a|NghRc$wN>qU-y0>%brm!ptMIfOxxg>qd8|Rz_&E1Zt@cmn+w8 z^R4r^dRUyi8Ips0jhNbjY4mqm*?|MAiKpJe&r1GYoHfGh4^0!LK#LX{*l5ri)Z_)J zhte@;&Rpaf^zrc_m6Af+wi*@|Nyb&0nV4lo3Lvi*=a(D#Ny1MO^8N1p8hl#1TV&;f zw-19ADBgmPP|3UuxYH=!WmN)uWK~Wr_Q>yGA0Po9TepbypfjEGG>&;fa|Hej0T6@D zYuCcb3lc44+b{~PS~Lgvp_~qIz8V|pt;!B4?tm27jQ;6ch)|QWIKas|EV~DAx4dT* zdHMQx=*&Xva$4B|>RIW55Kwg3>vt~TQKLuGt0OP-oLu3YDl2OaJBkqYHF@WfngfRp z(cH`|^HAXQnX`H&2*{3Q1vKTk^Fm5K`~ghh>Ji!b`feFT<2utUWuY95)!hi|C zZepyQ7nwEoqX5idm5=Uv z-MY16&yq^X`4zHt2QEMAAlZR@8P&L3U}f#Qxl1NSU$XOC$;Dqose#<_nYrA{A}lN7 z_+Z`E^xl+0uFnVEF)|B|`E4{Q2w3 z;Zljiu*IG0bd>h)gVHfE+Q*Ma>!8>Kl0nehQmx#gU8m5}#{$1Cukc^8Ct%q@$MD{u zwdcJOMq|ESKECZeJk_R$<2BEm9gdljgGUJ~c>r`uam8lO&H`f9m+${{WSV|JB?c$~ z!a$H`klF&QqNaB@fP5wV#JuFEz@2;dd-vu-pHtlV9$nkXKOoh(Q%TO4^QCJIfV2yM zT6;GA_yI%&DJTt6lh;?ODYe&Z^z}$>3!Y%J-GUFbV~HIj5AYhLK~I}Tu>P;D$@=Zc@)UeUw4#VUKFwRGvxGktz& z=|cxh$?-!7(laa?YlkDIz5DiK&ul(@-DiF&d!=A(6`i`(7M;Id(?Fk-n=9ukW(_|D z-oF0;jgq~fjJpUC3-8};>2Rj&{`e@k7>Shu1In70yPx3I(! zEOgHcpV@0H0oCFV#@)$_5FY5YWPeBhnASb|v~um$rneW$ZfUbE`3J1Yso{us(c>5( znGaIj0^AtO3doT+Z{MB2_at`1S+sGDpFlQ%Vxeo-u6j3vVtcrDYZ~ZJojxPyEoO}_ z3ILTC7|5EWR$ObbvR9XO3llAJW+H+XUOrSJIoy!9l-B_6uj2kq#TUUx@A}C@<&T&( z_M-r7RTU3}<$#OAne8jtzSgjbw`r+?6d~@MaPNMKzkNofzn|}_l`Fn}tIf zLXtM`py5f2?*Yc@^WRELOr%#|UWSDQ$qE%Yj9ICd0%y*i(-jgTS&nWU+T^*6L#mBd1-hKhTIh(ERx%_2#*&}N^vEt~-*w6t>_gex& zMDAU3?&gp!S0w#(^ox=#isX{cY_7Zyv})m$grjRU$#IRTZGV2(Tf{#Oq^rk;9bJdtht2c!gt3&&cN=u>P-R%~{ccaKo<6 z&!WB`)b7BcckQ}$$SMUM^5ySu?0`W8vY9Tsip~X z*31-W7HZRecI)!SDG7Snm)YJL3T&F1@chnI$c_uUHyDF|ha+yMwk;*wL-CRUtP04I z%<&`lugp{P^e&q};p3;zfLCSn3Nmit9ZDqb^g>j}h2Dn9EHqmgyU8r35qA>r2T zJA{YqJ8*z3x?&+ZCWbUN3-+J@GH~rIDe2CKj4iGa;tCOT%+I)BQonX|H-Huu=l}iN z-zPQ}=oLo%qnj-iC;<1WjRjEm?p`l-&j6cASma1ul&YVL<^ z+jl7P9JA846o5g5KUpER!3aMO#_yfn0>~cpl)pc#hJ51d7vI37eFG{$CK~%|gs{F0c0u17G-wdbjUxhlmQG27*@ZC&8EhVOdpJ*~jvTQ`Bx$Z0TtaQ2|s3?>77y(26|@vbvh`p(_p>mQIdGk3^_3+#Ei zrOu*PTwXS&dPGG>U%XVC8xEO1CQh0JF~m+riLGLuT-jDkuzQ<6Lp!sixFv%7x-fqA z;;r3_r@VRoL~TTznc&pDAu1g>jW5j^W57#UlVT2N0PE8G$`?n08)l;{w}=L6)j~UU z6t)dHzd``Ww8YR2TAvMb5`2SyTdIlN(fr^fEUQacGMm@Q?*e(lZ~jh8=nyiTQ1B1* z%iAt*%wH3{;ZIBQSW9|lSVM~(3@>|P89mc4B08*Kk0u-z;v$>3X8{oyvwF;(n~kGO zk&Qqc6f9jTVkc^1l_2}M8uKyh?Lh&=h724yko*7{1!PNS@H%`_KDct0F+-T$*`J+^ z&g=7*kYRi_#A1EUf%{lVGD-Ne0rwsV#t?s!TUK6r@u8Q1d%(<*8tz>T?U+v?L-aSnE>L@HH;)i+T16vWZoK6}JY zB7015AD%sfHsiwwXs*t@MBgx_)KP?Q@GBr~`dD~UtcGm64b=cvaWaHZ@b z;IEav5rV^#lmQHLex~gtE&Z32gC;Nlan2`b^Nr@rytIH8sY70^i^)@_yng#u9J@Zqoyub^x6 zu2G{HpAcXdIM$F5S?v;G?7MdF0nj%%$+H&~GiJ_|x75r|YbN+$@L{{&>esIyV<(VX zx$%PuD}WKUHkXi+!ia1U0Kri6%q0CdTR{YJym#?95|=o`+>mukNY2Y`w%EIL*5Tq@ z_DPXV-pkKJ<0L`cHjpv}bx{k*=(&l$5!@*5*rMP_WGgZXNQ15xMd-hHk5{;W^(Xn~ zHF7%VagCh83jSKDlZ6f=6N1-i7@Fme*Lw}{MuOH|&kPYUPy)44Goj`(r!sriDx77oEC z=HfW7|E z%4~izLUuSfuNE+MJM(3a>g!s^>0;q9-w} z*fr#=$!q9{kS*5@a8w*m`Q~l6gb4X5yn@56%`;M7;kTq5c6G8>LJ-7ikCQY0@MkH zhSD(!siTaDjv8Kqd_#&u$Sa$*ZtJ)Dg72KQ0BfQdQBB#~$7gz>-V+;0 zZ17A#!a{{%vnKPd{V0IX0J8dw0)j-;<^ZMReAzk&9J$+&0RqSo))@q1Ke_oQ{~3`D zCm`tx8U!%#&y}ocC}hlw_iD~(k3a&c#Yi0$qRl9j*#}kIp+g787Nu{s>(qsMuC|C& zM-Tx9zS~3LuQhsRjlULRLvpql=!851#m6#w76SAn=WL{bu7WX9sA~wZF*~n^8q@%x zKH>o{T)YGqsjb_#2L%O@dPYIhXbucsHNIrlJAeZC65u%&h>VI-oD6K}2A~ur%+tY_ zI2}T2Bt*wMgL{>LNW5d!v)fl192q@(bfh`9S{Vw6We~3)4ug~67W{d5_Nq7&g%m}G zLiwuwwU%4_0>rsl85xmHL9-9&b1VyVg0vP?_Go}VeWqtp24?ac58R&>u7dB3& z7!P>v!Udj$=42bNjpn#p_4$h;UotBlMge#Co@&2+QV*Cc$$Wrn1^o7g^0h2VC>*ar z-N1`DiPEtrfBNfZk1ikF$xhYeVDZX19KQiwfs+#kAu9kITvk_G(X*%aUL~6rjm0Ou z14H~4meS0St6culfAMa(_0|k8oO&%a92){f1D1L(1i4#nYRBZOL*{qD3S$%fMUxs~ zrH@;?vHT?%_$0_glVM;V z#>B*Go`-8@yC$Qt4`|egtQM@ea35Onk6_a zVA%muX}AE5!!mq4OecnW(EDK5$dQDq@`8(t3n7%GfV8#%ttu=k60t`lciES)q{zo2 zHL!_PzIyF=ZfTAvp}>TR6Um}53V&U>iU+}g;exedL?F#cc*^yqr(j&bZHYjR53io9 zclRm?va3gS!H4bQo=pbG$U|y}wMp^i1;u3>RRK>iYSbveRF; z$i|2YY~PxdEr@I$C?Ig)mop4}l;Q(*jH6eN;)vM-Sks(EWw zRQ6V_T1lXlMbhD%YG+9)5_S+u@)r;ivaGNWUle5X$P35?^Xm1Rdf}Glpb`oIZA`vE z@|w}ZhOQhHq>DQt{0*r{jfJy8;uNQc>Kcx244`r$!m&Ci{>hC?_3mCJhU&w|P_T69 zBqRM^&Q^~1(s0Ws8%eH!j2$-)-kX4};O8x*r7j}~BHc7?7C2V&iWo}z7YYJ^l|Idd zu;QT`&RW7_gia#ktqn+r31(3l5^z9v_$}H+hHyXup1N(is-7T0g3F^k!2GeMfLIsa zUH`wNq$C*G{r&yfp9izEvLsB*ysR$@aQg1{>e5aZ?$ z9BUAsq=~{xBo_)@!iKAbbq8;}3{wK>RwzJUn7ziBzL2{AY4E7unWx6h0}8q|e7+VL z7-DGSWox?9`)pX*lMZekG!5x8*gHVf>k!Rifom>434DEJ$orCZN|(?>6B85B18%ad z9yl(0{iX(AvA%ewIWD2V_kVt}0WHOC)1rAZz~!m25xO4XZwSOQkRt;k1Her%E7QH{ zD5v=YY?c5y0!H4!;n5!;w3`86DGb9Xej(r&JBGz5s_ywVfiCJTd_|CwiGJ+9w@;J!aLe8lwqd z+n1CZ=!851Ly7;y9B&_i6$6+HX|2dDs|w{6z)0cgp=)Roy>@gNUjlMGc4(2D(Hu0j zNf{c4SjK4>n;k7)q7lMOIGb5;3>Hz5X545jnOOX_(p_Z4Oy zS~<_KH5r3eJ`s=*@K^sz2L#!g1)o2@!(`r8JT1vi=b=CYZ36|QZ7VJd2-r?)@W2pj zg3k%NsV=~t!jH#`UF{N`UZaDQS0Dws7a-Q@fAIR6w7>v>70euYCmuy74zKAfDFZfc z9u}?G2Ip-4bJnJ1jDs(MU^khwPO+JRN;qrzE!ZiMp^E+V8oN-931AUDJUnQ!*|zNJ z>Z&$0>JdTk*2l7+xbRuc!^YAg?Gj-)3&6<;6Jzaq8Akj2Z0@~sl$D3@chndivlchVdS<&(p^d?a& z4|eOM$no|r%e;N&(AG>nU`^FdM9@}Xr#QNHAwMiRJpmkc!Tl9UsYF`UyV8O5Qg_ZB z6_Xddd-)t$Zt2-J;_|^Yi`eJY^p5J?ySFVkO>G~DMrS9&rbkB^M_v+NQ{b)xUr~*n zs?}$lc(eQJ6O!A=D+kEY6SFyT;<4wt8(U)jqB3wCAE^v-@=Il9onbgYdTep<(K;Zk`yL3Vb#M9|y zTMgDxeDmaf!{!M6FAr2{I)`O>xDzX@vfumAlE_o}9#bYL^UK@QP0cSdU~?9hqL8%-zo)N)0`KwQ`@yMMw^(NIFGZx%CT2 z_kbgGXg7+ZqY}4}h>(+^navzY0URfC{`%&`4iY7Z82$#?fed#NnWA|KZ3QS#z@E}< zsn}p=c6!Bwn}j}JKUdYSd)0xWIUnD=66f>2vI0K3iqmdl8Kjta<6jc^RL-@c?? zEu#>)G0d;xK@iPY*k!bbv*@)OH*qE}8HjO-4c|XJE@bmnHD0P%AGxn``Sq$>PbxBg zBaI8OAx8aaAtU_fZCbpd_|LyCi&_kN<7D-U(<7CE00)js73dZa9Jt~*sb>^=Ph6%Z zJ6g8uAotN_FN)r~&<7FC!C0^H6DE+KyjgHI3ILjhv3BGZ%pYR-8)Dz~7iQ^YiO^OM zg>n6O`I<4|dY?sm0b>2kA@OubBw+n29f)dqen$w##~+lAD~C%B`x_geMm;_P-3qbu z#NH%Q;N+>(WS_7L_>z>fBlvAH(gvxqBe3z?ckYT4cwSKfZ&LQq^j%~p95i1C7S_yj z?;d>oxu<+DWSlr3Afgx!01qfSoRKyE!K26P*KeqCc8wmUSDeYkfe@KKdX@+djEp2) zQ77dU-G@!1DMOc$MBY;o`d)2G4AryqdLUoe+jp$g*y08-|65-afIA$$XVl6Adv!-v zJ_Gz8+RC+~yC8Io`DMW(f39RTAl3R0K&q0Nosdtn?G=K~1eviTG0k)JzqXb4Tj zu#kli3tzu{KD}+Zr&}krog=A-4V@Su5G;nYLF6Eall>q@;KR(KPn$lyW_n0&KBGu2mPF3g=^Dt0$Z2_J&z}b#)QAxy zYC24xZ6$VY4LC4K<{loyBa9G|-_butjYM6CjPOd&;#?8K%``3M06&rJH}le|C;;_Y zZ41%$I0D@`dz3C_1=J}RN8rVJseH2mzbuTkzes>sr^!{1N(Wqv;bR7FDb5G%3u3W} zC>^kHK}LunnPfR2Lm^28T$)tBc|!-cP(Qw=HxkPD;0zBB&&ryk7u^Da1}J=r4xHC- z+yo@Ju6Pj41YzkxTa;lH;|{*s@!;#XU;hC%7PA#Oq=2AkC~pX|+y=}lT(@!4w;%tM zmhGwucJTFs7cnhgbe9pCzNAhvcdw`<9*C`=%{SWgR*|;NTezppuq5k)$u%ZH*y|M? z6C?RZAbZa&I0*&d(!gFs^4lL3AWdM+kS4npO@8zIF%qB~%V&Y7p53}klc;``4xIMC zt9VA{1Cs}W>lv@#m~H_LK!m#|ua5%G?x2j&ugM=p2PwciJl3h zNq#|r*c%iOT`}p{+bue|c;?oDw;HmyGXHYboA19qfBBk|lUvIeN6$pOpUiQ9LvB%-PwZV^{LKrVA}QyY@*OZ>bJi ztbK9&l;F)p4=pK!Dd9|#UTCxIoD@h*Op>gf;-z=b&NRDFD{q>X2ps{(O((Y$@@MWQ zy#Xof`msHT*QRMzk4nep8N(i3yFey`&mm0D8dNUwrVXM11rT75X2=!DOJeDceN z`*!P~3bH5JQM$rF($dndUb{}uft0UYy(Z5?)T0MiM%~&eHEZS?Hx6JO;K`HEyu0)M zC;I>E@)f|yi;NTaheFsLhx@Cf4Z=54XXMW*{jxW+Jfxf znDc>yheASrL%|1y1}rlY;Vz1#fTjDT;K0=r^`5kl?E?U%!)-)XvsSI?Hznn^F5L%m zWc6ZGTi0CxXE6djTwGnvgi!Qucm6VdtzGT;h$PB$=hlgyrp|8W=$7LY^2TmSGx}pm{vsSYE9F$kus+)3L3^IDS_4FW)aCEo! zE5qB00gVW;a_Gnrdd1DM^HYEmy`*`wKNcl=6Q+l38bWf7fB*aNy3)X@4q`wAi1nYs zQ8WElUrNV@$#p=qgem>|->p*zjK!)DDm9=2DDeF5HL@1)ngar)USNT&*g>sYC_^X7 zzf2@a>)^_J@sg00Uhxm^ReGJZzy=Z3$i~Ew&k8jyyLRtAX_@AU5MkXxYtJW6&%JT; zmN@fcCr%K5ErAt}%?{u7j5OviROdikplr+b_VLTv!srSqpE?D_E502nJ9c#?K>GF* z7LuMJs<7f}Q$oF&(L-_PJ9#CX92n{(z1&IOJ;4ug0DfWDdZbLY3UhNt+x><{s zij;5Fu7kZXtjIJa1vWw&&OorxiW|VJbaDy=hlD6@Hc6#h=XQryW`BGuWUGJm^uf-# zqxEta`RR~Infg*XBp_PCWN;97=Fplk5qe*(fwqTw1=9xEpU85BTvx{4<>1O}AXu(l zw_dVs*q0+ljs({w6Oa^c-ntE~M8b$PFJb#$xMTe|k?` z8Y=hN-Sfh4&f3D&>pp+|TO0);fkPrAYv&do%N70o`;dx=l7ONkh~TL0r)~+JU}!)Z z(}loI*Ii=AstJx3ZQAv4bFbT(l zvpb6s7^sWMD4Y(7O2?-vV+MC!qstpZ_Ep@k1_R?ia0^>b2`M8z+G0}A!<&YK7%6^ zwV5#Lo3&~05|iP(>Ws*){R{R@oVVzCMNL>Mto(WN7tk~GN}0$Lg+Vial;P#&mG(Pp zA>G~YGV~GTB9uIZOP}Q@x`d~y365qhTe)_3Q_MU6yJP$QKilL1d((-Nrxe%AtZWbz zfVTq{k@52(x5kW2LvV*KCZl*dB$5T+x{i0R!icv{9|T;LWNGjbZXjEtE>bv8V@Q7- z*@*xw@RvTZu>gmP#->Nhpz~)=k*&gC=-IQE#NP&xRtA&~1Z%+Vz;^qDrV|?*%Z@ux zoq4ln?fd&7Z^-GhXUXOPbOQ+z5x6j1wqVgNe<^43j2a;K!lxGra~XVG0JGY7h3+I| z=l$Lj3R=6X=6!44roF32Uqu%M#y~c|#Wr~qEL}#3X%-qN1>kP2`m3RCv}(}|ndbQU z3~+I2h;>37uq?+b9Rgzf&SDxwOPmk9j*<6}|D_swOMCzT69Dgy2u+|M8Wx(sa=Em3 ziztJjlLDY7q(5>WU`UMd&QzDG-#7RmH`~f~|{*At(=7Gemb;vd82FuzH|jpl5uF z!^4W<1tgiC>2fv1`VLD-gy#DKZc%(NWXHX} z(~3L#MMJHSOpIJ2w7i?AUp;CZTDFBx_viI19xWPSm_@@M7 zoqpwdQ92+X-oH}t2!;QcVgAWO2WM-8@XYVugyVVycmfRB@bnOpFZgU%TZ``fc@nXr z1<5{bT5{>IiW@8;A@SDjJ0uem;XmvGxc9tyIj`Tor8k(o49T*ru&@rRuNEQ*U^J+S zRKEjsb_AH96MzYO4NVKxnXfho5bLoi>=zX84i1m?U2)1|d_JJM)DEdcsCGl&f|fIrW8aVNh8DS7Wt;gA^#N|1iVn%N%TSOC{MbOk78f&ezsUpd5p!9XOp z@TIDYM~xgg5)Qp&cc~Tb+`B()m@HE*H4wtuyHZ#^tH{Yt`x75f_LMWY7@Y<{jnR zptg2qeM6x@VbOBNa?`g)_<1NYpK6HpHS*ITkphlaI>0aijVl4s5+{RH=^|jP;)^uC zO5j++8yQP;cE>6l;u(IywG*O6958?k9N(~nwwS;%kKQE4%A67effYcnRfII5e{T3F z0`51QLV4IFGzb@W57-Ng&0O+SOP3xUEa9$0$9s%h+;8R@MDTepI~uV5a`4t$UXvFO z_7P5&#D7Se2r&V6>hA82P)E2S!OfWWV6Axz=p%int@6v?%kbCYd41cq0WlfoRID=a zF6fmq%MG0ZZ{L65{08gZu}zT-heQssP6*<7r9(uFM=S}M11Wr|`gm}~T*Lgc!956J zf$$v2P((pm>8P-G=`2VMgr#3TR3h1xfPmf?5jeGpQ^65eOZ@{sL!HT|^|U(>FY>`e6VwYz+^ zHb7OraAr*drNG#6<2g6*gs{GZk;);~>DPbo*J*sRlEw}wh=}p@97q|bHx8bR1KyW0 z1P<;Hq4VP2jh%D#Wo(i33HLc9_&`w1;~N*Z%uJTt#bv*49XNLmPct!`P|o6J&B}c7 zvXZQ(S^?JBUAyfDhEO=cG7AYU^m$H!KQVxptj%tGjh-3k5_GVx7FQ z);w>?0Wa|x%D1y@Pa@;_*09-pB3$?xor?q$KWdR$0a(* z@ZrOOqfRfVS{Y{a$x~R-6AXrl1c_aW z=|5lq&b2TH*fo4+t_WIp0nr~mnZ-Q*T8x*q$1TVX#t8-#Iuq53-d&BajGsB@PS2Y% z`tRQf_~dkOu+jmLjX(EoqaoJmDb-h0yMyHg84em2j5`;1Z`2DZLwXPkB8Vc6`_61% z2{&EIU2DJwoDpq|9`Q9n;Z2wq1Y!Ha+^ZZrcv>1@8+Z zGX9}}OZmH&=yB*8M^?`-$sK3?oB_8B zEdA|SBQ?A7(o#LZBtL$tNfVC+DlIG1B|*~DGrs>LMP`;P^rb)l65|2&@<|{ZBBPU} zH`Gj+I8kp`Li^w_OWI`bjM<90Ie0pR<0#mH%5!06A@zn$6umV}{qK;?uLNkU}v zvawPC!MU8`qkE4YurP{rz!8UmV|Kyw(-2$+z+La0m!39|6~U<*7^x=fYfKHGBa~#P z8zUx72Y5UGxqln5G3iRR^314#nn?ziuUJXeMJ((oFV}U71xQb|7y-ls7A##Vi3j9i zl1PIKE-jfDl#YG-4+IB0C~d1`p5w-k2U-_0+Zr?aOL}wICEHdGZEOF*gAzKMmyMeO zoERpMG9qM+5s#)ce*_pBIGkTKDj10I-@ny}E%`z`zJ8G>JDwU#Y>@S7{tVj${~IAW z6mm!MFG_D0jVK9s_nwN8#ju0uvZUi|1epaSYi$e~ODzp9yseO|%3)lW9tbd8Cr+NU z#^_J?=EyP(`VbImUz;!wnQ(}bP1_VM;pL*XB_#Fj+P2+1Uw1w}xJbd>*TAPTqDu%! ztb8F576*4Der{>DBosiT%(mHSx-2H+Li=sslHB3c)azAypgJt6fCq5yjh;~dhpTeqt+ z{Z4H&nDvc}0>B`Wa|6Yi0o^+iE~Ht2F#^EgY-_AyC)=||(CP5x)CPzXav&-`+kh&e zTh+^K^^RMZqMe!+#~N&pDSV|My|v<|Qmn)Q`}Q3>5Dz$N)F{0S7T&y%pFWds8({Ee zWzEsso7f(T41|th@iAlOOxRg~_ioJSZ*0!CdJ5hG4A}w15;Lw`zS){i&AkT?`46Zw zg8OJPJ%m5+E1Zq==$b7h4aDdY5!qFd{*6QFfJnvnzg{*jp_Rifk$O^*!;?zHES$e^ zQE|QKN-!CG#FD3Y3UF%G#RC%)6VG2%o(cR6qoSjA^(Hoka}=!G5FZAf#Uli*i+}(d z>!-e+8Z>w?e96=nD=0V^e%kaZo8=}*fvh=m)OLuZzGIt~Y#?{wT>$Hq|4?0IgE-GW zy=^(kqpG+BfI~zsDu=O6dkh4uFc7C~{sen;ZjV0m;s~fD#J|gL@zfBsE*x0FVc4+d!ZVgV z+8_lmUV*VX=^0}*k@Mwyz^rL}6o9`a4lo&8g}xQi&sC9A;forXi3CfB3?_?RgZKqR zIy0yWrQ`U9e0C@7yUy^bf1qd%l5SXuM#X+jo8KMe){$O%c^OAiYQ9p63kvf(9CYRV zFlwM0Gtzb=V+f>!S{hu#j=qqItJkbCrgYF~U4W)fNJy{;d$(VoAZhlz9H?DtivoQF zu&aveYgRT*3gF{SZMR735j!>`av;sAa2j)I-`1n+7V9;UBbNlcr`QC4cKZr)OwhyW zD&s&5W@5c5cXbV+*%*Qq=(Q&{FVk%4R1L<2uzAksX2+#HoC8Z)>LUgiX2#YpcdMqU_wE zt$gX}n#iaq3Hk^B&j;>UU_^9pnq}D20VE=FPB8fsr&JSXBhX{$(4l&HEWWn^dxao$ z9NOr87VT-YE*N@7j2K~{lX`qaAnD1IOP3WgBs&zVr_Wgj1^gSpY}v>t0Pj1-&XN4O zeS3A;lRq80gBrY^8XrUaAo52551dUsIA3j=YFz2qvt$~kXIS*8O`gAA6s$m!zkF~f zOdk9XI!Vj;Fh9wPOD@68A3lD8i{XbRx#0%5;uKU+yX5?<%VdvWq5 zI87l_HWEqD!^z9YSb<1G&ORm01QSg8rut101#6C&q))&E8y6{=q4Qq~NG2x_0=-JI z){;wnrfOyYlrOGY4IqTer!DTX<=^|tjjW5RJx1#8atZ+{=e&#j zP;V=q!=jnHE01 z5FZARui#8YTVCMzW!TiNYudJIEXqxsv%v`N=H{+OZJbX+$F$*hg61|b8#Dq6`x&})Jrvjuc5 z(!7#O0|hvDRX!1{IS7`Ak_A1;KqvM7$k`pMe*N!X1dnU_PQX;5xu(`M0A6C;(4mqI zrg;gWhT|{I0K?SO)GJr7;d9!6bsN8k1q&CxdtdAF0SxMeixwH<@CeES3YM{F4L=1H z333w$eJfV3LPkY3s&?ws3C;DIK>-})|o>* z+wbMW+lmRbNmptG(eL-=fN44K?e$~6z=S$Zb`_zYp9j;l{ zAcs_2b2hk@r z0l1_%NmRme*P}-d5@QIFSG0Wjr_Wyi>Ihh1aBp4wIVL9d*zx1^w-CI=kXshYh^~Ib z#(1Ob?0I?tgbfTt9)VM_C^sSg;u8|oh=zKIl~bqBSh;HE<0b_N1*S}$%Ghs`Tm5@> zuYAT82mr0Y*pU(ZeqTR(gpd$ph7yPygnmQr7(VO*D~2_v>irv$L;&eJyefympPl&@ z4({Muj2A)v-w^LXlGT)4;!vwzVvXU*0n379GCY@)DvegeRB4fAW?IqS6 zNU??s;RqoJs}uah;4Kzs(ZJNj;;vj(%(-Xm(QMy=1AY5y=Nyr5R2<`H&zpxdh0sCx zSv^|LotrI5Zi|h*PJiYRbcOGKpr9B~d~{7%(ik6pked)3C@|7IAr(95^ZsL%Jyy-^ z)1&~rA~mA`=$|drb2Xw>KDiHz1L4M;h2r$kOMAC~*WJH-##nAas45UW7j|y|l04_2 zl4cTX&d;B}1R-e1+%M_b@t2r3a@4|PgZLCs25t|UF?$GbP+L=n)x+jeym}1-i;3QZ z@-n=$Ab=!1R`C)Ff;_qH<7dwk5{4s7+gm`bKX>5*ezt7E zfg?UNFwGne+rUkBptI-B^GAZa*=jcx2Yn{|H$e*9I)VY1#q6;CxS{nMHnP*HAbHBH%uJkUNnX>uG$~+j3gC=X z?f0lykIjrjo{M`n=~X&#LUsG>5qt!`udLX$aFPMu3$H53tf#mBg2lwZ<9Gzx3Ld9P z`t?&4(ytrq&3;b-Rgx3y7+wbmOCeGDaJ1IU1J$v8J4d=&(bVQCBlZp936KJc+mELb z-{DYXhNq+`eu|$wbt)i0UuXut{}K5JW$oCB69!;=0|J8$s5vmoj~hRMt&t&{4?{92U{e6-$IoBC{@l0CfPa)2i}Cm8 zPe|%#jA?_xUOT!Q6QJpa?CS7wHP)e>o>D=S-{Ci zg2kPOzo8AR8wkF`o5I2l)LhP|NVDo#3;|i|{$Hm#Kgh|mVgayMCpRyH=%J|%S24p# zT$286b&0dM;~NW*y4P41t;}f8cAB!IZ5!n2qv_!MWmu@;wqXGCgxBmaOMn~4h8UW z1s_QI7pGZ{9N4{x=_?C&ETj|!4H1Y3^bFnTg=zjGvX)^BI~Y44v);aVDp|)j&z~4@ z6;lusw)4@#X&xe9;7Df71T$^O0N^CEmkcZv&Jq$*G?dHFU;o~|V+WKGhV7XB`s6MG zC14_Pb8~~s7O|2@w1D7{P@GfYpcP+Miy($qbB27ULF-+JH$hU}49UFzACTXQeCn?|)Ygmsx|OD8B643DM9I4BPH$iiwdg z;8gHHHWv9ZF}$Cqy#u~UIKz=rquP$#uqt672K*x;2NgG@-bz^8!M!0^@ej!_paQ^1 zk&rZE_dWsd<=%sb@$vCA&(|!6hDT+L&rBabiyT-%NMW|n8Zc1%_U%!?KSrz{{R)tk zKsbbB^UF#>e>eY33OF+b;4Y4%S9$|$mc86NEgN1dL10fumfOF-e8y`UGgaV(>UK4< z7LL3`H&mM0@|0I+g#ERDJC3I$q=ptFWGZB8OqzEgdJe73wu$m0M!sO4$lhzrff=(! z;_?<+epZMttC!Gn3H@z*dGgfh)U-4Y591bg#l79Ud5eynx&#CSp>t>l@CWYGrw@J< zIQ8=M^i;&%5@ibPfpKwF`C?%ZcrVIu?EOm0EvZ;VBi=B zhiL#CftZk!=;76K*5D|L^8}MWU$ze7iJrERvJm+)UxXHclr$`ilDvC1*UIRJ1Wfx6 z9+VTL(bPP9@dBJSdH8UCEKvC#)>Q+gfc^&+M%UwNjr;fSkEFT~^yUdwquHEI@I@d& z^y(m8+PB%aW1~nbaBpDV>Sd~e=y@ri7(oD)v{0-OMAz4SwOE}h^JAVO= zQh>e1VH6>P(-t6upw1vj96nTL)Q0BznhhEX1)w#<0;ubEhtu_v($ee4%k_SoZ_P}F zeFT(2I0-@+po7qSo2Ohj+-H8=fH^~Y<8S%+SenQc4{no~2%fIwZA3fH;~N)^A*;|G zlE@cvhAfEL z*zuDm0Y2OWm&SbMra%Gg?U2w=y}zl@ey*BXZV5+)+5OP!1!61)(0UD=;o!7tQNp0P zk$ptjf&Uha3>8-gCtwFx&NF6=7H0_F4(DDdQ?TY((~rNN!dVf%TT-xWw zdug)7#fgKnBm2C5{=}eLZ>nE@l4V|0Um`ffLTP>`*5c9iODof@vQUVJX>g{6a-{h# z><0NsUT4ZSkR5_JcZ73*W5GlYDga|za{!yHJzGcf+ zZQ8c$)WxNTyGP&tgT1^10)it^)_mL)ALgEH3KT#N9fT=q{v0F?5Q8vUDbcOS6$^%W z&x;n={(@n?&u?Eb;MTh=**iC;zeI50GI!{p$G0wT&zo4JC zZr~)1?oFKM%85e}_9*U_H_sm%LtM#E_VMl2MM7uA%VEQkf&0-EHmBZqgn3<&VsvG{ z0bUKOC+%$`~F9I}#f1aK}AwyC|P8>CM=9r0d#!ZIt!W4~1~vwP2{HTyUT! zCwAcGdE=H2_oGMDRThAJ50wB$7&bT;$z?-pQkTg6|UMMiiSxu7GzAw9GNk7{FH1( zVIi+H#fM!N(d@h-QsC(E;|O=6r2|j7W1E(f!ux>%f}JjmA2hexx(!wjA)**>C}F~q zONp67B1Cdy`$IfQ9^t$cfqcJIeZbP(yLiG_prSZdQHtN<1f0wDog3Bn#E#W4!Jtok z%>ranudGCepi;b-TMG`?P(WT_jT++Ca@d@C#7F;u7P&;wRWsP)uldt3wGW3ax;c=O zPypyd@EFnjX-FEtC*I$q%ghMDEee0xQGH;u;N5t<1>qP?T(}?KzwfS2!$G&?DbJ4a?Ae*i0TqBV2!C*r zed4s!;1M4X*Y>EG5b*f2HC{KB>B%lvj*0Xm;qh$ zpdje9N-Rspd6$BjgUAk;QI-zVEssR*4d9V`f1U(13MlsC-gRSGg<@CBsB^h3xf95N z)$3=E*Nlte5f*ftrNe!r26oqqCaZ9v#NNtF*FAE&h2JJd(wQ8QN}3{%p7xv)H>x7kwFRzh7LqCMki{w2#_!6 z0Aq(WIckeieHX$U6IrcWMfW?gbIq@R#RIEyjliAy&j@oc~=i%qP5mH%;(Ek+#5YUAd|ldA@j-$!tR? zU_bFOEpzd-*-Jz_h$%h@!Oen60X78=9XZmoXD=R+A#VdAGGstEa88lO(r&$Skx^3< z*?UpEKF%z5UX-_wV1&?B0}@ zFc=b0@(AM+LHa4az1p?b$P!4Xhhy{m4RTc3@e2Es?D3g@E37mx0)otcIi!b6PHjt_+k5|dx!5a|X*&oN8c zSV!R(A2a6^tl3zKBPm*~;4GWkM`PVT=6l(d0yrAlSyJL^MJ6~{je7ufL5jY0X_IW} zmi0SM1Z-KblIwTPt@fntKQDH`?MpRT_K<9S%gkgo>A@%yGgEvt`i*41p#3N?cHDS5>(g7)sZGnUKAk5A_e6Yp5tYqQjV;sl)xahL0T==Z ztVcKg!kYrd<5Kx11L){tS99t*53ib(Q2F$cVCIPTg5bbemZlFF3>;%a`VQ#c(VEmk zrueXO)AERqn=%FLAwCErg>j^N$F?vZ0ErRE9-{6b z@%UYo8i+I^Uq4qNHMyE{p;ix!6hJQ$0YM6dVyc zk@w;$nBv3ApB0bzuoCkMg2ogdRxXqIcvGf;UBw5@W?_IH(7i*{0M|61?$bkiiLAb0 zWZ1h`6;E#dsW-Q5wV6X13LZ8T(ab@l2^|#(g$T(_ka?U3Q=OhaDMPm+Wk$giA6EXX zOz~kQ0nNuv3fP+h4ig^|P778)^K+KZnX({JABf`OghBA{BGQ3TfT0}HWP0Sl zG{0UUeOz&1mAck0-N zH`H2@ow6$tNCMtIut&#`ey%XS!|`cq!~j5`LysVF?l^ra_zkg6i;US3y{Cru8XMp? z!l(N%FIQj%2YGZF*sWc+_N@RN%pRBLF0_r_UD^z{xQhPC7>MU7Q+!ytbxrYMB>~OH zO$ykX0zBfwrClqqYcS7L?{58F+j1h4^YB>CHaIPUAn4S#B?OuH*SbZsRyBV%5D;q9 zXxFN_U(b#cgWPFpWr`1b?@6(LQ+zmv&gLj41q@SwUwjZ2IwQ;@ZlFtFm$qCs05#U^ z#Pu-Kcy?=-?B$yE+X0xoI|`=wFud7xJ!py#UF0$wn-p+71q_G}!b_)w^o;D+#l2G- zPHVCgOAKLZ(5m{mwoMxBni=jv-cepK#fM{dsVP1jLuYdolLCe*V2$_yYh5th|F0vv z-@SX6nK8`b)}gH}Yz+>UGMzfK^X%R}agZzV2a}5oy2cbAhBuq82Tk#zi(F=7lLC&X zfMM~G9o_%X`T}Il`1$J>Qf7z@c6NkEy1yITlW?>J+k}G!0snAqTQv{#8ZdoK+T@4< zv}oWdo8rSUyVMjPj-j(Tib(;(6fh<}5Y7Fj;u!}0@y|a9&{O2P5G5J@Zqfa_4({F_ z#`pS_CGhM*cwm4>m!X4PrwkbY^j(0rD^6Rpa#BQp9yw)tUK!q#;)AC6u#$l0<0b{{ zO#!{)16=q1mGk1Pka20_+zd^AD>j%F?lIc0N9=&E{=GW(>DmSkRQ3}n$O8z0)z77E zphu^no-WWA=0^1q6MrBK1TpEHb5?9-Y9IFAlVbm-_;3uJ%~4DW7^VQf_?VyQeSYsY z994;9ef#=VOq`*}V|gm!*EBiUeUxvHgh8$meLKTNc5sglkSuN;TX${O3i5?`=ZatZ zFm3;K)@_C$6xa5x-8;6%DH)y$=+zNMd|18F8~RlAnBtidPa9Kw7~X8U9&~{C$eg## zKPX&Nmqf})T{AZun-pjw6yOmbVAOk8=6$L9NN9rG8O2kQc$jVDYh#KJvJLE7;1M6~ zJ9O&PZxH@^_Z{fgvyXePzTzdI6!GWd7vk*~5)={@6dD~KnGg|`7&A0AHep0UazDlA$)YSieiE-sosF^k1Q zsPW%xqh^ckG|wvjdC6d$cxwd&cc7dQ{t;Pe?Y)~;KB{=&tNRi6kY%>si0RiD3r zbecQUF%6nGZyp&HRa#bNX0B%}nR%iAB&tL!k|Mt#;&5D}~ z!2hN#6e%q&?(Xhh9E!WkE{nUnLveR^cXt-|#icFn_iocKO-C}Bx%V#1GCcdVnM@`( zIZ4jR@qvQ|Wyz971zIX8bB{WBC^;c!_!mMT%|n1}=Ir*k_yNUBl!)*EPMkFP-p%Wy zTUGIkY|~!*2+4=K5Rj5?-MjDHwL84lio~=K0}5K zzToz$8qZ&_@Jn8)aPDam0$gI(tXo<D4dlD;xj=AltO}Nrk-M#{#^f&x#c*u3EkN z3uH!i@7epg&<<7#9^}yBBWV(cgp>LLA@J(W+vziA=8qn`VaJe!Oz-voEP-i{C>YL& zxL7F=j0K?<%8@UJh}^sXAV`{bh&cn>>Jx&lQCn)x^?S~8$WT^o_!A=KYRZ2&CA#C zu;YF4>doaV*E43yWdFoo!!c`JE>~J54W9ENry-8;cCg5rufP6!`;OhuU%r0*_5)=7 z?D-2*rcSF@zkVcQnRe|vV8xnNH!$bLskqfi^TgMt=i5Lbpw;a+m@Cfte z2oqV^rE9mnYZoUyvpRRMSj$(g{JCL6Pdq8RQVWF&6*_wSL|WaJbz-M_mNq7jeOfn@{fI)trtLCh$mlo>OC_i8@zZB%bzQ=FrBw(Z z(!jC-5)+;ggK}s{E;`J4bk-c`MxS)U{#K_o4VrhbznUPfbDzrAGKuBlKF$X zsBg{7eOfoQ&<-AZcJJS$QVIQ9%XJCeKtA7%_XUm|SB`PxCwN|Bixw@4kV-=@?62l8 z_*EVX&qDQrSuKZ@NVb-m0FT3)lnwAz3VcGiV4^r`z>+>)I#Arex`nTvIp(=7A3seR zJ$lUd-}_dMj2Jo6v-8iZ0dhG{4jQm`s`Q_9^Mdu5Hgn<1slx}=^PRCpY?!$AEiAO7 zN3S7$fBAVp?Lsuj`-2e!vUJ(9&kNw;Xuntpym<8*hh+^C;}z1Xe*NQwcEe61^fe6{ z{H*U>z9l;?>G{Ml9Nx6ttp2TsHY^nh8Xw=T*1UucgX#xF1(E!;$+soE#8$~x&9w_2 z-L_W0IiddOo5U(yyK$>^>o%;HgsMrQN6(&URrJ5|8NEGm>a@wMJ5|j6?=sacG<3+A zHS?#BXkPK(N&_8-+IZ`)Qx_~=tB{Z3z1p>jt6NOAsb9=Hm=7agvUKTZ1nqFBUn~T; zr`4)mTYuKDI$64Gg`P%e-l9V{zY=4v(!5Nr<>Ln|9~&ll7Y*wk;M z#1oU0%$01Awrlwu{pNi0?!$9M-y{}d%hnx!!^p%B7@+^5&*&}g9{MdU-m2tdbi2A! zx;2Vq>9;JH42bSOdKx!)0u-cImmd8aTG?Ls9g~5D+{b6M*}mAJqI>m>Aos%$KO8u8 zL_-}+UM*R=-26U_K)y>|--a&o;3w2Bv})3zb4T`!Yg1iTrnW+>a=G+|omh~f30gNp zCsraw%FEaP8Y);8;zr^fjN(j?m28t{^dNY-%1LPoD*1?ThislVL86fhXU-07?@Wn$ zS2v2-uxRmO*;`l$A&?3ofJI}V;Aem75R?ok9WUqH0oCQimIVQxhg?coDJ>iBOz!Mw&uY$j63Rqmu{l;kVQKw~cM>&G4Fd6NbUB>}wj@&)du)PaAC6( z3$+F{$Cmk%UcG#Ir2ZEL8nQd^m{?4GoP5H6(6dXe<(?*04NL{+L(iGbedrxq_+ z`c^Bg(yYkHQKMC;1}-Ck#5@@5?(*f!-ru>gLUxWB1NYvPh949QGPDYRs59 zYu@|?{Fii2kQKxf`aN8~egh3UGJo~-*^6Vlwmi6ZUwndH5Z1r?pSHZs|6@iZ#?FMG zcEM$1`agbfk0ZQy)q;U_i#Rv)X+IOAPFj}9kzRZC%$X$vv|~)Gs&{WEP8&bEd9_lF zD;2L+t`y|smtR_4ymZAJ>}pGlvM|je;E4sWv3Nw=h7quKnph#6R|UyJ8wSs zz@|-`<<6ZO(qOKqc06Td)wy)}nu>y=SiW-g1`(Vbf7h)tONMlI2jS_xn%=s2hGk89 z_GICZuIA_WleBDDJiC^3d{rcSX52t9S6)1QT#vf{dbb1MdDP^L`T!1&7KLuixVR8!#I8U=q4 zZt0_1Ryw(B{hxn+{Ohm3uAMu{b=~g~PRaIhHS<@>|AXEQqe8wP;{TS>^>0v0y56Jx zUq5Ti<42E8KLFS$@Y~Fk9x;Ge&=S_Xfi8*PnmxTRk6-?3APhet(NVUI^bb)5ONCUQvgP zC$r<)UcYo9Fu(~}xqau(YSpRmCCcSt~z!}Y8Qur0z5Vn8F`ET966Wv42 zVKJFYVDjO28>sCIoz z=f$uMk#YkgF7po`JxOZe~h4S`*I_Mqk#Cmo$5p1+8x{pPsg^l_0x zVS!Z)!hsw)a^%XDD{tPsqs~a2X~+-q?6h1GFBf$RQAj zvx*llE~t;@zX&nTUAQPfTC-Ly&)rLd{Ra=LXeUEP4P+3N+K0;QK^*D+_G9tKDQ-(gc|BroIU}&Gaa2b1Ac0#LGtq&hL zX7A_F;bZDZ+{(Fg=i%bPZG?YrZDLyg%HjU9)D*>eZ{0hXuCIvBSOl51QcBQ)kYK4Z~g? zH-0?V6%4nqxaPV7Gt1Ql4j0Pu-FM%Sp4+6uz-_qgY}~xr?zklPvtz+fc-8mkvS9U7 zd$-0^gN9$y#p4I$IHB*J(7?1nwhs#-1Ox=ogD+pP5=$74o}SmpoH;XGJQ}pqXV0Mu z;q&tsFLmnN*-jnwHA99Beg5*53jeCrs(J2S8W3Z|5&uN7a`S@80*z1V(%{^Y0}mfP z?bWM~Coy##eBK{2v@35_BE*PBxOLmSbdDdjHklZYRnGst>IFHfRh5HV)Jxhvk0JdA<1Lh>aN)v`6=+J)qQ!FN%4O*-@<-g4(6C!} zvbw7+~d^k}I@=T{y*ell{@D7Y2RgRC~d*q(&r_CXq6%rJ|J3R-jPWc$+D z;Njs-%O>a1Q?AOJwrtCt$0#bP1wWu>D4IQ!>?kv!V!*a(ZX zdBIft@!jC#tA6{AUA=nsMsnr(m0>iGOiv4!;)-AMbojP^S zo;|z%nq+~J{t-4DlXc>J+IO|3#?bO={nFUFnvVXZ>fM{y#Ms`vdAob%JQ5J(^V%u^ z0moj;jKaq+76LnV?kZWbl;#{E0YK%AWI!BJ>0R~u?K?tMNb^h2BP<(mmd~6$=Lqlt z2?_c`D&9ioNJM+-%5|(gJ&}^%2D?}Piih}`>7yP#cxe9?o8Go<+XZ7oAR-vb;@^$5 z8Nb3I4NFQSABzHnqj-+YItBSxUuF9Cn+ClK|1a0|%NkNj9PJ`;S6uIjP5TPD3un)yHLdyzB}j$5 z-}g}>u1xRU{PO7&`ic8`3vqW-bJ+W#CHu_;hUQzYMT-{dMTH9w(PFDst?JkVGAIOG zdIsENc(g&ePgq?fY>xN@qZE^Vq~(>#iu-Cat!LAuCyyE1o$FUfSf+jpAL==_frAD) z&MU0^5+H!4kBkF_3Ke$SC)~uat;Ocba>@n`8q5JC*eOvLEU!!+x$n)MJxAzD+~B-u z@e;RDS?Y=PZAU>7)?7Vz`t*U_hMhcl_F~M~@g%FV49xuTyUdv?6v|-_c%mNXf6BEB zPU_KoY+H|rsr_r@Cz3p>7X27Vn@F-J)wFojFO?5%TlYK$tehb*X=Z44#jVC19;DGX%HjwF*l+8%a_Ew zd_uYwyJ7`jAkVQOB9Ll4X_Z7zU0b3{v^s`+g2_00i!%;^h3tnTeWXA@AJrXwLQ*%5Yqn5*lkMsl-4Z!M_t!01g(6J+z9J$%9T)W=AM-O{5O%3}H-5i!AXxmLj zrD@ZsQDX)m2SWkvp{Bij6$|pQWK?gmejHf8l<;M852%G420=?OT2`kMmeV{0xbtt= zw22_Ma&xK$ZghBdaOrY9P=we#@uvTfV8x9|QVXmtcN(Z6ABU{5rp zO&zc(@7ldLMySlZ+q;R0BU@DHS~*WKvG&R;Eb^?Ag1I zgJ9bQ|5Omg8vJ8FM53l$`}Ui+Y;D=HrCS5f`Y~h2k~+{0usHBy^eECs(3P*iSzWtz zk10a)>>S&qsXdy=14yo=Qn|9|y}8|1!BU?wW2VX#%a0sBY+%RcJ*(ywKY_x1jK=r&GhLM-F*TFvS{NxOBzP8Ue|w+m`Fw zw;%TqvD45yz&@B*_Nu*M)UkK}{;k`$*Q;lBUxFpa6DktT2=>E!_w8qR3x8eYxKftN z=#mezL&AEfd%&@*x9%1r?A@o2+i?!-(-H(=;ajw5Y1x+YQNwYFGX=}vr*B{NeEBLv z6d*lr@Z^eUKc^fqIXuq-gir5B5Nqs*k&^ukl8lcSwwb=wg_H7}nxz5Zrz#f7->6=F zbi0;UZjap3Tekd#$gx{CZ|YsAm>lQCCKWHQSo!?94~w-YkDuO2OpGZohmRQLHW5ob zH+lOeghAf1bEn*CKN2FdF;<_Ccj-+7T-5TiY zvCEPszIF%`@S$U;PWB#5P}{aVB3 z&tHHDu67Le_T7hx7>^aq`rvHEW-*fnVaH#d!%!|kN_sz*(UFQL?3 z%7IbPTiuIa!6VGq5u-6NlvKQgn&pp=A78zBr&dO{{N(D5%T;QgEcKrtsB`1nKDvE_ z+^258b?VIdQKQHDO{eY`8i+^GK@T1>^x)y6ge7eCbIk>9>fiQhV*vU4?e{-OS^_ZL zrW3{bW@aG-1t^H9!&YINO_@4XM7~Wn3)#4-cAYxDHY$xlgV%yOxn?9!cax zX7)dmvt9i~7IIC?XuTr0qc5W-JTfrkAWga0U=-SS=pb>sVF97y%vrNQgNE&8vjzt~KidiIpn*}8CwFQQ=HnDk*L8!{vx7UcH1KVH9i6Fs%t z(nC|+jB@3>9q+hH10B3OWlxgoj{GOcS@2?mmy%(=<^i6xl5zIDhaWxUfXw5`)Hj)S{25dBO(i|O zd-wG<(`L<^3vX_WtOgGr0x#fe>(U;{D&j=H*1UX3Y&SQNtl0L44j+l4lv0w9`GY!% z;8gE$_?V{h{v+qiM#fddEm zwdSRN!kBwHy@Eg(*z7rTVe{Pv@2ej2F`<2}b4T_F)I?N66U$q_BtvcAqiSB05r&4l zpD(dcM^5l4bboFu&NUuOb@Rg&tR?=ryZ7!@M@1P@vSQ_`0Oyo3WXhDuZAO~{kly#`(Q`zH&eMvQT2Y|z zrb5N`7cFt5XvvKQi_WfDFClIK&IpE4q1*t4#T{Yi@7()06y%eecVAq(DhNk1?fCeo zs`u9eB=WZm#%-u>^~CG*n^T5Og-V@-0>PrR!KyqNRUg=cMj8wao5~wU(Td^2;y3U@B>W zFlr8&;#Qm{U;hoJg+ygc7{dSv4Y?D7FVLn&07bWtFJ8G^sd_T)s95#Z>;=!CzHs}k zGv_WeY}iO$3%7E*Z@#Hgr3zUv4j(y=jO)>f(^p${l-!M_aHV?P#Boz@FI&BB(C|U! zDwHqb+r~f+1FO81tJWkvNlKo`-b0dhU~&-sI52-FF?WO&fO0b|mqWD|h~epLJJA@j zYp8d#^o)vxNLiNcZGXIY`3gy#E#LA8Q*7u9X`d!FGMi!2(fUnh7`)?Y@~k9!Fj3qcF_l{-_PxmYk@xGx zHAxSjUj4b*<AxMCJvW@i)do#(4j!2}cG9(WT`rd@ zXCWERk5y}q>Gn?^VdNy412Jm=vtG6wSC_4nv;(UH#_u+@SkyOe($sTJ?G11&wQLy8 zBk|cV=Li<1Eg@l`CN#9bDkQrZJ!T9phi+ql*!eOHQ0FVi$Kwb0CU&f=!TC{qWk^17 zB~E)t^$VF1av_btitWdpC)TtBhXV4_ssKl&IBoiLzgGA5Lx(7=VI!lfyL!-MnNS{v zhz<)|F53cm0#e;qFJ52o6?e5o+lNPV!OYK|zgVTJcf7}P88a`;Tkz7~%6Dh#pnY|| zLgf}^{|#B$v1FNJ6|1c)Sfs`GKc@E|a*MDhhYlrkAIR08K6B-#bii?EF7#iKcuTID zuL2@L`?hhb(I9rWPpHT5a{G=Q>h`vmu|g+^DBD%jk9fs^HBti2+#w(L60eVGRW*tP zLf=(LKI{vfmTIszCrhkm%jLq?127NH|rOQ@i&g^0NUpzy`CHV^l zAQ|$LQ>Dr^`+uUOdL>J3s#s0FqJW~L!w)}Y`1%`95UCBg8xI>cjNtR?lw)0nNi0yH zpgIi0GO{51wux>HPV0^agen?AjqXd0!gY>==~s}od+WyG%`4~;estf4O+2s4I`tjI7hvVME$Ism681;G}W*>t|jXvD2eP8*iftA>_ zd5a!tT)&yf5%AS5jnUd8*Cph&FTGxuYDTHSqDVnP@}Xb-&-X3C4>9L(J7OHGSS!kr z1I(MhK)RF55bJ)AlD$3b3}i?y4f){QrfFDD0Hws+_bf%l z{iv#D{tlGxi0aKNPnIm(v}9={>;p=bJzK7_=Z7l`6e;X8j};S1nfQ~WKG&%2^uWX* z#J+!`QiCtUz55U3CbSnYz9OcgUo{G1UNs2AnRDmOgPcgek0=rdeOHF$qi?@{cKC!f zsTKmqPoB!*9-SM$Bi6J7{Ui2N0zQ@y>k%Ga(tHrzQHA{ajT`ki#N=)D8a1Rq1`jyt z)F5exr@GuuEG#uwuP2r)RZ24$!UrW}&lOnBA!!7(1DRE;5~UATtST!#3+GCd>6|tD zH^~{IO#hWHU%^gxEwhgB@z$ODdGZ=L7dQ?YB|?Pz&Hg#YZ)?}Bm-ixdD~d8qF`7P( zfc;y24QXz;^;tS3lqH+fadwu7O1NjoS+;v@nJ#ppDDeqDf| z@6x54pSPeVlJ{%??dV>j)M`J3L+x{MzCu~kd57SZ@GM@U#7#dzPJB@ltb!XgZX$mx zKmoUx!28Yd!>--B=@Xe9KXH$Dq&I(#$uA8Zf{xMv}KFQ+(YsqAr=;bL4Ys_ z8bj6;pdDnV6$ztJmpg`7*Bm0vD=uahhmq4~&bDjUj!%4f+v$&C|Ni||k|E2U>T*3+ zgm&mtHT{_WTYUXgG#;#cp=8~l|%5=Ark@WiZCsj^@DXFa&&+o8jT z>(|TkEy1ESo66TKoYwJd)i5296>N8X^(h(?l8aFJn)AMK^JdSP(jcYDN9}^^=T9>k zSeR{4v$(0})xkrDH70+!T*Z{{z&sdU186*a^w?J_1pSF4!U=)31xXU1M&^uTFZJ?6 zznWjoo*y}Kq@)_6V4^OU7|&iH#2;zaHNTiWefn*MiyPwhlxcRUU6=ax>S@ModDXB{ zW5+P~c4(N_5co^KtR@N({9NQFiKIYID9i0dJ@wc(&YC?tK(ZV3gY0chZcTpW%-M6b zYSpp;-0?9b$p^Uxj%-^);77-iSSmyEq3)K{S>Au(pvF!k)_h0PrcDvsg5(!1Ug9?u zg63QkJBYOD65#khqK=17Sw3NQmK__(Bn633U4H%MZH)l~gUs^vH=7FBuR0#SX!lGU^`rW>Br;HI~`A`!9QeqNcg}Au5zrD)|=;RvV(DNew z=t)xL%2hPK`|a0XFVA1t5UZz5v+GS;?cKbkdiCl+7=b(v2%7O*UM*O-$P*?e4UV5U ztx?|bqr_lmcqWS;p^1p2E?Z)WV6opBITQgIuO$M5?3M!8qy-CqmDi+HMLq`CFLwUu zKQZe<@}aKUXIj2?<3`S0xh!W{eTj zvQy#UtK6ka7qS4FpgXrVM6A{S;+ULyQ-&xQ{>rtVn~fhlSU|N;pFX#5-+sLJK;<8^ z>1QF|;s|;A?0Gk67}n#1qt_D&+QA@Agja#XDX_6gDd?ulhA$ujk19TuThX(?6-Z^M z+Vaj3!ZKu@vo*F};qFzHQgqt5`sk7C)Swio48LOzB! zDSP9>X%#HjuV0f(qbY>C4;5&sr%dE1F6x?v<05C@jZvvVnTV-j0ONMeuXCLvpqyap zQKP`un8XO8Lp{!s@Y%h4cgKz$<)cXfV*`?pOZ;Y1c=+gP_Z~gf*=&xlxCmM7G}ObscmMvt;#qw#UWBxWv)ry> zseycqXkPL5)k_i@?>>Aux@~Pj<8p56rPlY4i<2LQg;W9oyptL=a!pgt@}c^4JR^>k z9fuvx+}k0^)|IXe_en}yQV21}&dE9ELZm^S;~@G%ZQp?rI)boqv* zN{<~o_W84o;zezyA2kG}RlofD*8=Crk(arlC6-IJph2m42sLsg5Xb}p_-LfPcj z`6nkIgkijQ>tBDyYv)c*>(K;e!24uA2FhP zj~;Hj*HRyOm|RPTJofC>OT?YKcH<`DAnXnFH7IxF#5IMvbLV1Gg-(3PkRh68_E%he z2M-x)Vw;KqlKpc_O~$Xk(Rg{>>e&zdwH<-`t-0Md;lus=4`$BQe|V~7*&(gkT)TGd z)u}T#nkVOEcl&Gpy{j*(Wr9S+f<{0|NnQlNJ^7BwQ>STc=TLSG8$O&3K!&dyH*N@{ zxV3B7T7K022rr}GHu5c0iS(B!tnKF-v_E#-I5)mP_TX0FQbbxPd$*znOM8>VBA=Fg zjBi)#(Y-rjz(j*zHm3i8+W!RCG9(`Z5)#}X5Y~SZ2&`VaRwEt(-5I)g^yt}>?HzSi z!tFHK>mf!x8lpV8C2tis>hl*b zo9J`t>W6Q>*m#Zso*EcUX*O-FUyT|)8ZG&;<0r^q8~JZ>(I3^5~|YWZ}&^MTD!ikjUveMMLU=;tnty~uGz8(W`)2?lV*|CEMB|>{+myqKD8{F zctrc=231+FPZWi5EPGELD_OXac&l&UevxcQIC>HDP4+1Yu-L>}3}9_is8As}DNVt| zZE#TiqMPSUSUxt+P75qGGyAoA`TTj}t4eojdo}AAf+%4KcaBSz@<7?-FmxsXgC&;Id10kAJ^4OmzD<1@TKe1PsY7 zYp1Z(96x!cN)^{MG<=H#ECx;&FJ6>0vKP1s=vPW(waY2Mz%S{=OUq&BLN$BN+(=Y= z#Kpo~5HexunMY!ev~S-&zz&BAnmKE>ezM}NC;3=7r0e}#H&;wZkoe!NFekpH zW#VsaZ`<)-#ID@=Ju9#O-0a1H!|IG)9zA}gY$eYR%^L)x9ZVktPP{Lbf{-61Vc;NQ zuW5jT!eZmbjY4mt&Py%x*3(hc?H*OHUVQ{pmXiy@Cj%z7wVDm)`HCD*iMRhzF{}Lt z4y7m}VxiEFJmT(z_O&k@-S_70+nMq0HRM3Nnm?%1?v?X~H7@Ph(vW;$ zccpw4{fEBZ2BsZiYM84D@`2IX%vp2vAOiS3dh~er?wvX#$1)2iLFZOLt0h-f7O>#5 zB#Yr7pFDM%`-5x~puj~)n15K%0xXghKOW(eGfA8Mi z!7ZzMQiKuB%8zSX!?T%aU`RfO4jX2HO!%0>5a1HR#&$a_)I(Y9mb!4$Ff76m@9DE7 zb7PMHhe-bk#xvNlkP1ZKEbv>{2MuuKtF2qNf|0;c^XAR7pKAh@bnV(T02^Xxa3zOf zFZiG!rOV;U@q1E|1+~7pbOoB?i#q5VM@T!EBe8Ul>8)A2-ZQ8^#t)Y-U$)H1?eWl| zLv{dKYS<6zUaDQE4u&F@GaHo*n2vF=xTkI1whc~49fM(6G96;HIELUiVVRxdqeXay z+-dE!5lPRUCI>QIxUhSzqJ~7lyqO{SfNEPHA3mlq1mXt_aNIMZ5{zfD)J4EcVm_(D zLu_RUq+__5qtc8}3~_Ps3@IwTId+mSUp@_dMN``?~cT>^JQI z=S6(N?Z~`0ju3Uam1&(C-4 zQ3ol@@9*8eTC1Kf>Y#5NE!v@n4B*9R0Z_|{7#8p!)c4F=ahtMx?IrUC+qVbf3)Cay znBxhf6i{WbYm$ZOQ2l3pk&nSm%AY>C1MDGss93gCj~X$d9gq@3@!(c}#z#u^v8W71>z{=8jojP^S zpFi)2xK5lnfxbq5n=%DE1wozhaL$5{@2$QMV$8oiesZ;LBRx6r^)_W_2PFIIRR=c8 zaUoktg89|e4^U?RpE!9+?U`~Up%l5F z$b^I3`ZjIeVz-JkBp-(l9#DIzT()HInlYpuI1-*adEBxA93S!UvOp|+Oc@AVzIsjX z(IDc&ky*)-Oq1kIxK{)?AofoXJrP`&O&OMQ@4M0toCNhzsw7cxE1)iUFlDBUkw_p%L%(t~ zO^Jz#&6_uOo3dj)em9dRPj-Z`XC)Lz-t8SbS1UVo=qQh8vf?-z88G3aCr+AViHj9s zrW=*%(D=_9k`GekNDthqWlQ#rCGD8lvF_uC_YCuWj2<&qE=O2MNeEzzuAU1^nY%RE zXYk`theQkznCqxWjp&4QnW#|$s{*4)9Xz|TUxqE<5|1cVnb(2^3-rzfc7%qo1u9^| zS<`>z1mpL;^eETp&&Bu4|Z?@~=Mi;#6@lqc#_TAO%Qt;)A?;w*D z!$6Lt&Qw!|eM?A400?f=(bPYG{+#5Ga`jE(n_+DzP6U@Ig7e640~a`D78iBcnQ`OC z!#f1)Q`L0f7&2f$f~Frs@`2Z?=%jkN68&OHJCcK$JV}n_6_O7X@us%&x(ypNN0L`9 zTDG(pejx01%s8XjoNljhlEqaPJ!7=E7`GpaR=uH!iNlEHrv_hXUcG<+9yY{N_O7lP zfzU;V0VoL9^|NQs+Q&n5ti&!oy=jDt2cqy&|Kr8W>rH+UodlpAj0&bqFRkKwgRckP z9FPF}EKF*MOIE8^ExALuU5_3;S_Q9TnF|#e$IOFB%l_>JZW_p5R2Owl+=`W}NN`|p zY*-_i4*c9r{AYcUk6PtR^sf~|nbn;5wl7~i7pT&Ze2f`8F14Z7G(R4gZoM^8?%a9Q zT@65B6QbggM<<)NY$X?!2$XGjC_Z^JB6~X`6H6s1$OLg&+Q6#p+O z2$+`%@k-1qxv7YqxNhA#(zRd_XIW6oBNUC8B!T$?`HK|l)UA8q;2{;&K$zen)i%D$ zlIcK6v3biD!_#U`KI&8`9v4g6LD&=4MFQl~g>x3*J3gYlm7j!#l!3tX88aQ%LRKzV z_^Ub+g6*I^_qCbrjj_n(I>e<2+x5VS)$HA-OpRgED0|>UPn?EFTc=K)EVBTO96NRl zX2g;s4;2hxoH}*tlP6E?Jx5AGKK^+pVQ2u_p?ax*{Oz~IF1;eB9n22MAlQLWl3xae zNaMy$2(L=aK%9*B?%ivjzG2O&Q>W-w0GwTo#zaP&fftrXz_H*KuEer@o{!{s!qZkB zF?5S)7(KtzG>}XO?&QAwXAQ|mm68SGY8Hr!NtI(K^M-WCdtCqo`z`{T^sj4V?l^wJ zLQkOB~R{N$-V3P-+t`K9R~*nZ%^e}ivmHn9FxeEfi0ckXa6BAavMlt}+uv3P43 zm=yHFCDss+J$v>HX^CBt1l5q?HDFA*W0U_5nb@UEmps++!6*pcj%UxD+0niC`hrFM z{S_*@qg$_&`wt)oOa6EI^tLt~MGsSQ=QGrmgTaKpLk~Bc`s>!M>lk8P|Dk*f^q{;F z;G~AUb?e_~kQl=0p7Y15}i5=v1r9rqtR95&pyV~8R7 z=vXngBifHjW$UU%pC$c6OwS(LHNIU@f5%atovq-cn2#ZY9+hfrtF>04ZAEz9TmNRB7z zEy7i5!^TbcQh9!*X&{&mOtugg1oNLYBp;TbB~hUoqLb#8iwf7jJJ+wwP53wHq9OU1 zIB9YU;LPwR1O)EhyRW}u5lTpev5Gv|6BjKkdf^dZ*ufP$?c6p7$@5l<~& zzWn$9MuQZeo7j4JW{Gm!jr=YuKZ%9VBoe*Bt+7eHWIEtw0y|7$t~_Y)V3Vbf1^I}t zRiJUDVi+Mjd~kQ&^brH=7FMZJNIv9lNj(K}JL-4Kl&RA&|G*K$WDmQw;i#fvL`ufQ zxfe-oAZ1fByUp8#eg0f>yzWZ%gOSo!MRNK-A?Jbg6IEvZvl0V+NSe02@`! z@dOVZc_tdcbf~dM0*s362Kx>iKnrQI0isSml4(cP(hC+W+`n$g@TTQd!Xe6ruPTltdZQFlo{x zM~fXQ5oASzA;nMN;f~S-B*{OV*|}h+W+@g@Aib0ib^{(t>VWJZ^{fG;Yu2n0p$qXS z_Y7m=sW-O=rSaUQ{JPBX#61edpY%`k{MNC7U^-B9a3yoxPL5w$Dv_Ep6467{g;&r8 zJ1wx(poQXrHzIk4XRUT(!UG4EnP0wDbbARSu@W0+@qe! zRwbM;jnTv z=y4L`%I1ER5J6;xNdcf7bYDD`tetTmdwugnZf6{L$31_#hJfr2cx08XfpED4O=Z_)4I7 zKCQa`DPX%Wpi!B8xB;?j)NdQ?$T1{h@y@8*7Lz`FCDv>nbS%6mZUNTJnR`z#8xj(j zN>nH+cm-{#T}BfX1F9cOdff=8a6IFpByjmg0!)qnqy zDh;KoceKJv;T4ntQ7m9rpZG*gKL7)ki&`Zd(?y{Xk?el9`ZG2aKW+D3(qCAxx;YHA zEW+fBlS%0vVEeLr$bZ723b>V^F$L;x8!J^Gb+0zrW)X4ydecFyF3yYI)nPva>IUTP za2c)q3j_~D0p**;5Kj?Db9Q600xF}?Y1Iy7C@eb~g_f32Q3{6o5!P1Af|~U}NkDM| zOh|)Xzs==~g;W;KG}3Ssupe9&n6 zR8&@+VKnP3d~UH583G}1CS?%D;n7xh+|a_D$LBt|r-ShAzG7-^_P9&$N%g_ZjP9== zBmeN@WKMU3sTQs8`@-ji_taKlFW}5BFKIUmr4Q~e%nAuT%s>NBzt;I0Lnymj+em8z zL~#*^0<&xZ($l;~@8~+5QagD)+(T=1^;=?Gi#DXT8ly^={1?Aa2$enclXn}v>z)_Y3J;$CzVCllzMXsA zy}Gv;CJdred3|6ZS}j%C5|?b@S+F>gM=n;SZFsuzITk*qGr-d>iSBujK@(T0*nyF) zEEfl?=0pc3%V+wa$>1C86^SkMQAD8$X;jHuo&lI{$o>b_b}nt!k$!nK8@AceiX$3& zDMGOK-M@F#s{{Fjp(Lb>3?_Vje@*u?a>!TSzPvHq2q=ou3;)*t2D=v2pHGeEY!g7a z0Oa{<9T1eOUB2xmCPT8~I#ft;s`Vc(4f3JLih25ktT#%VV1BUB=g%i2UEt!?v-X_V zSVqbeF*t04wh&lQ(O-tNUd!+9svGtaFxrt2ge-4NgZh4JcS^4IN_LT|#yCV2;3dX= z+rM3;{k%j(zbLXEw}93UG11ZB!q6YNqr;lV5R`-jqq%X~8!r=@d65Wb-39 z@i@W?BV^>exxMkc-~K{@ou68Gqg*73yBe#_Oys6D&`p-w0!M6ooA_;ER^>CoMymUz zEWZ-YxVLW$UOyIXerVbrvrH2-WNEg1D7q=!-e-yA;_;W?sb0s&~y%Bpu@ zq!z&k0+|1kDb}T9G)h_S3)?3PCwQmsI)pFR4}=CH1%!N`@^tsTQIw@D5+GiNJeaB( zX|S|NQ-wh=pnUoWpeR%ZBg(Cqa6UAPf5F|q;J z*G0?Lt$`AY6&)1opgg(LiRj|mdihfgHqwHoO}(RLa`)w^{V~dk>o|$XcQsgNz<8p9 zov*sbm-N&InD#p!I`fjCKO`6i*&$<|E{kPW4!Dn_#ypG~@_Z4Fv!Wsg6?0~2B}7KQ z9uee}`&wkrCLtqdYH5OTmw(XW!d*C;ivb{+N~K;y~cE$l4; zo0MG0E|b{dX<*T8LHLevYUUNfH0@HB${1#m@g8nk5NG`~S4t%YONtwNNB?-aRpfz( zlZqv%y}NvhVAXyfttTj`8u;yhCmY+Jl;Yt7ljY{bkJ%|(ATQ))Zj(+!EkTa=atcawL>94IE*AJ z^fsRmCNs0${nD!sngh$u9RM-*dkxeH=iQU1K7>s5ollywY0xW|`cEXsYsruqOAGqx zH7o~}^$l5wqpBp@D+R zNQNM3;ii4q4TiHy#5cEEc-Qyk?wa7l-N3(7D9s*UZ+PNZazd!f+n)H(X~k01XZ*sg zyCsU=p~$N=zx8ytM=ZKue8lM&8q5b(y!Ef6M!@AadSmT2xz z>b0ML?^RJPQ!z89Z$XR{H@8dp1Ae*5enlE)m5YW9dU!ln!dJ*7@9F=(z|&4sa6X)Q z@|0pk301onh33Fn;G)NBb}c6ut6qBZF=OJ&A5n8buj^BMB;?jjUWemItn5gn7QRyv zqxj=H3L9Q=AR%2zfH3B2fouVgL@teb5+wMX(ISovCH|D#nAXrFhK2b1cb8$H?6=b*7v*SGLI3tccB}e$H4`zT z+TCC)Jep;9YlcUaE%lIMogdJ8#b2`q<3k>0fuI9w6=M_;0?P}Ior2Y}ZrDEIMM>2_ z=BdSCaE608l#AFJ7w^OU_X>t?1kGBgJT=p(KU~KTa_NRrF3mFNhrfOam0J-9vLB^! zJ-RU=NBHiuS^VA)xU7Ezt8N^;!r#HBa;UWOe<1lccr(# z@OI0ftAo=xhN?s6{tlNOz$qoz9Q0oKZ&ynfF!Ec&Nc`od(29(hWw|pudr+tMl5{WP znfV6_yMK$77IaIQ+vObzoyHK|Nr4QP+DG-~L>wQi_>sj`(R~l#)2080CayF5_=0=? z9oHR15oQjgn!QeH1m!eUki|o%&J>n{1c$Xj)3$fDl=N$a!(X1hZbGPA{gZ{unFqaa zIE>WfzJhq_t^Th%Nkh-qyYC#Qamh5h(+8glM;#{_EB!WNF<+BBnQ`O+Or$8`Ia-Bb z;@j9n(PCXh-hC12^Od{^{#Ra=_U%Q35~9`41%QZ4LP1Q66!#6+`HSNAR;Rnc$NC32 zG>aXw8;XM>30GipHpD3fWp@yKME0zwb|dVQb;zMKOto%np_IFwedt1}>30x8(_!Pv z{V$!SA>?w&o{lHu6?7VL7z_o}(9MTT#>`W(1bkZcxm`a!_~@)TrwFCNp^iC+juyp= zG^+IxJI#-G1Z$!n2y!=yI4RvNN8eImpM?={zn&<`9X1OB#1Fl(LwaH%5XX!|uo=Va zL`t;C&`>~2hZ){$yWV!d-e^m%^4RbwxjJ7pPh*~26e0h{(Xdp#tc_7a!VT7zjn!=ERHL7(zy&pGcX7}$fcK!^M+1qdNY?WnoWxTj) zOs*5v6?B6__~4YAT`BvEbJ8>@6h8u7N!s$lO07=YeuVnD(aS?!m&z( z4?^jCwTZX1AcdgfPG6?$DZk^F!sW;5O3t^sPFoZ9lxCSo%{f96Wv`57}x zyV5{fl}K1lAzf>Br`JNdhJ>vc3N{9+J<}A&=GuglYn<5gJ+!Lx8-u|`E3##e5(hf$ z8(cdW4ZS5U!#7*aUQaK0)^ebBEgMj>69oG_ocTo{LZItgVAmI%2U-eZ|3_>V>4aKld|c(0nT<}PG`&U0FGaB%R4AJ`#%B+}i{kK@Spz~>=;+g z&eE;9_0O4%Crjt*$K4z4F_Mydw;nP(;vWv6^olEXc)BtYO|Y0Pig(FvPdZH8pUBb> z6|}{cAC}6k%;4}4l&luLLDg$BTwcrVeC1aRA0PP5gJ*$AC7=EDbj()6V)k`R?FMdL zfwSV23*Csfkb?p=gh8jd@Yvxj$>s~yQ3NKbY#6n%_yRmxW4#B!OL<7a>t8mS4)kTF z#%fCSj7z1rE@O8gGVRIjnc)&0k_GX;-7fRgif;&Z~SuUeOXfsF3xeuM;1X&H%F_NRm%%DC+t00$h{X@0iwF?nR1k1`908JV zPiT@e+A{BvN2#bPMuBfvGrOSRXoU-G<>-HxlNK`XqH}%mMyvB##dVy-txIWv)ZhA( zl${EcRT7sMf${ZAIMlh+X-exY2`{|Vws`IA05+6pH4otf$IH4k@Jx=^wb*S$WAt&I zh>fb8oo5Ya>i`jp+;wR0KV9buSJk?WFB9#LB?@_<{;T-KO?cxO%lt~b!{LMcU#^s{ znaK0*fAhKL_l4z<95E*w{MKt<3_@sSGtsirC?o0CZnDt=p)+{l5=qSHet8kjM+gQT zjw-m#Z#5qR6T6j4>ew7mesiMGICDV1QD#&;p(NhxWbKVI!WV<7q2wQd1~pM%k5KG= zf<;$y=J$Vw^9?7=D*K@-rd7&wA><*=Isho2NSR63Xt#v(d%Z!Zf);u_pUh4B*J#z7 zqb=<;24;c_;k_ao9lGuQL0p;D0KGNjy;}!K0W-rv5axRtV7}cRP9XQ4n77{@7!aRA zY44d3XRt7+n`-_O;-fbF>Kmhp@U=N?T}oOI;W)^Mt-IGJ{tA5~XENco!g5&UJhJC{ z4*>BFq#_3#Zcv4C4gI9kP<~W$ur4Ya8XQMAnFF!s@LAmcqErOnvj1tPOKn-+O8`AJmqa~ln4l`cjb^_E8+LdOPQJ#$ zrSy9~B25sRrm5nog{6RMF`>7xp~p^NcSicSG9^p()%P@(ov#DeY;~j9i?o6RQ+5AM$YMDJrxUIfS<#009_ssK&ZD?-K6VJ( zKosdBBe<|KkpwnuD?^bEi2@9x_wZsqA?jaG9_BJ$QahkwYvx-cI+-nbtVJkbXNXHB zpN>Kg!n9bf$v4cBH9#7d(4QYRU^cP6 z14Nd@!V#rhZvZs|(-JqKXb>S#Bx?5#>MKh_W&VWmr`+N9kamzwZLIkG_IxsM+v1V-w zLPg#d>h_taq*c@>jot1~7UDS9Wo`@7)n9aV9qc=VZK0@OjY-t^ME1 z)|jZ7OkpZv3v7YPE9hRu>3EN_Q?#P@Y`As~YT}J@Y&+dD%_xbl?0bTu04YL+IN;b* z!7-VL-NJ!(edHwGp@n3XlpA+@8##g{@r6?p*QwQW?Aw6B^2=m8kLnL2{7NyDr@b$# zxl{t!bS=I^3X0p&Q1qawfA$KdO@v-`{&N2|=+2EHb?S+q2iiTd=mt~lMhGNk1W?HP z6aM}SLSdso-p&#zKT{}iu8O343;4?xh=r4_?V9^URilbDM zpHX7qn`j8YU+PQOP^KVGD)BJ5HQZCZJqDpx%w~t}#WNIXVfUUSxX&cC*;8>9>q1 z9St%hyuplphLBcXx&VX~Gg!@7d(}$yz)at3pp^$!lo00+aeiy)6mIh>UMxBK1r~mqlP3#_3LY3N>p!H9L`Q; z7xP(zO~L%_a=iu<#)`3II%xbN^-ZnJf=ok)c8EzAoSS7^DxC(S;?rCJ+v(WoQExCb zEbQlXS-5K^mwhhflp(Dn4!>@($80S+Eo(`PdKRpy+u5?w^YkTo435uGG&a*f_(q#6 z+p}Iv)3E#M;c_tSGfl#wP`R^uFJXHf=_Bf|XcbiD5VNX*+;B=)Ct}lm66uI^zXs7? z+rQkerj2F}0ULEP#W&Kv=RWkZF^DLmWqldqi?>Pp1FR~eDvrxqe-ffXS@rbc~4MfPZg>UZ%}Tmes! zfplMt9y{v{YXMT=C?`!?L)mO0ALj5&mG3)FCVwyhzkPT+Zqlm19L?d9#Msjuq&1DK zGk%RDRt}1p%-I4irw3``#S>x*Fh!vfvZ@VL1b)iogH*&+E-LdS%-#^rYVp#3f$FI|5ljjCt@|SC!si7K- zGacZ(Y;0JyQH}NbYym=Ei%GiA(IQj=-nVHBBh$P>!@tG$iFRW2=sbcHtQ0%Il8%1T z8;eI7IN$8l;dG`;=SIMa5D62p7;0_G5$y72f|h(fNInjS$EvO23Cn=?f4|pQQQz)6 zU8?>X;Xx6kD=pc4u^|+_JfBMVQ; zRk5Z}XY;L>s_L41AjPC4_`f1x&(9)kW;~6%Y1><-W)e$e+oGFf(c{hz#>#U)bXa)A zIUh2mpQQqvt!Xuixb=@fo`z0Z&_x31V zu+-cAbrH_&7(BKjmtDc}DDy4JD0wpv-l9q4DT<#O6xl+~#LEAV}Bi1f5Kh?5#mIVWxd*X-oaSOoJ? zm*GtsoHi8m@pR>P+2on5tybqD6rI@^`6DX1ZhjqhHUxcQ0g;%i=Hf$$Cf;=FyfC+` zQT|(!-ouGQJ9|sCEJ7~HJx;e_Yb%J$4#&9zi+!rOw{K_qk=$$PWiV75AwD&YSA7wX zKWiR&IyHbD*ud!`mPp8`?kA9G^=bqX+i$g6gE@4!iDn}?Y{9!#RO^*YhW*G=%Z_m< z^Z#s-R)Ag-Iwl3HJn|VFRZoaORm*dMzcS(llY(NCsbE-?+lQ_t5Cbo4K5itJ2O{=M z1Xcv1QJrng!E!I!_%}|)F7L5#tTA!j?{3x)K5r16LOT`fo>9NpqG)9VF08o(W;p1VB!@u;4909Vn{H|eJ=_4qv>0)~+?`+k(!^zdxWK0K$LKA>Ah3*8_ z8At54gDA-Tk15%eM4xlTKpW^D@@X>AcdhT-Sy2ym7W-md^mm1f6ic;@GkdWpvMZeB zce$XSgCarCcSWLm%cTKlLdzO}hv#YDFG_*3+-~0u+Y^mRXI`flsXD4hhcgFiAb%j} z%IJQv5iPDe{z1%YS_<456w}Ns{lzlXZK7>NvHRPAjB9)yfhV^yH$6#>+q+j1X2FD_ z&^x>Di%U#3g);M(?bBNG2|Uv;R7gmAY~O21oS$JZ1F+VCj!$EKiv2?0j;KWLh0xuB zIa!0`Z!UU#bE1%5_KdDh#8jJH5bCf)Yj>hrV7CsI6XaD-FdtL@u}b)rVJBn)H|Br>Sl5e*3zOlOW<|1qM}sNwdEJ!~5?fi#!$kR9L~@qAUnLQa5HqU$edsVq z5YfZunEY5&aV{1={tk_7fX|DDo3@{_Q&ezE;%4nP=nevBqIc(&>%csd-p`|u#{$0j zyjM0Ci{%Tf82o}2}C20(q~r2mf4%~Vvc(HyR)9*V_3Rmv6Ou`hMgq)Fq0R>269E52!Rn3^7pi`ml%hRIWJlyMr0K4e5zfVr}De zk@31&Z-0veL_mm6|D$}&d-&~n`w?oFhj+22 zOptvUBzczd+bw3fkGbEt)mCW{|A$f8F?(B&u|k|j!tKv>#PS;{Cj zzh*3rNov^SFY_{mn0erGTuSwu!zRo69o#%TRwD4_X}K>r0bdq zbSN@L19^aYBr{1ff@XFXNF5Ukt*Ial61{KX_CfQ!QC6DrJNZot5Q^kF>Je~X8GMQN zY%cs60`h(|(IDTkJg{mM&g85vt>*dh=E)q)%a6chR!D<>&4Cmwjw+MQiS8!m^11`; z`;GYGY3%8DoP0nvUQZT0gx2Zh1q=e?KID6zrcN11ve^hv9hafPh#9>BB#jTPQJUWP zn9F3gz<073j=k7MM|b$9-`d4K8Ky#b1K8`-Qb-C%yQ0_xk)c1)6o#BdESbH=HOC^6 zfC$TQJ6|N1Ijyy@Wdz+7luAH20$CTP)+>>8aX;Xg!QsK7j61$lS-2*0oO3zBG^kv$ zZS^$|edh7SO(&Oga6g(o(U6&3UIaR5%dv4qkn_@yKNH!6#|eny{qPXLPT0S2&J& zMEpLcxTM9Vi)Smnntt~$C2r9_JLUULi6gt9d)`Ps zXF^1+x4T!%_%V7HLjuo_Wg0^qtuBCh$p-wRg3*068St)0x8G8JY@$IwSM78CQBs$Y8GTeY0T$o&`x*{nRI#c_j@zo5xp3Y_?!FBnNXb~b9M5@Obzo(S! zWax?`zzz(%ul|r}c?c?QJXC8#;$WXhz`Ky9_AYWeIY0Cur<8$Etg_-=3XMrZG+>N& zV98jt8mYfl-U@aK5)HA1K}>x?p$E$OU@}EMyu&}s6er|p_(6tRf$)nq*$GCkMmPhT zIcH%1(M-{P4IwmTa&7bO zM`fev_RWkpOsy2{@}EU|s8+9$`B_-XL;pFN!nn}rRonnBnzY+)FW~+!##wMCOeGHi ziR=?FLK5P0UZn4~0kbRDX|`2Gv=~$(pRov@b1<$`#62-5t7$ybArd*D5m3)_kvn82 zd`e#vVlR^k>v=c_1B-A2M=|h&l&NiGmTJ zRQl3kJ!k$T0Wpl}OR#r%s*=NnMj^blvD0{!P2Z}uilTDWVyx1Q;w`RxT>Uq~dM^BC zD9L~}!I?VOVJ|>U?_>42a63a#?uDn9a>xSY$3}mM7zXx~!vUpKk5Z%wNO3HA{IdkT z5JjvVmp%G0ONpb0#1~3-b6L~{sS3g%Z7FLcjQIKZ-3~Xg*1;2Avh?3L4h6Y5Q ztj{o-%`P^8l*AD@!6gW4Zy#uaD zHrR27Us*S|2DDP)Zo(pU_|jFs6tWl(iLeU60==cB1+D35B|k<9d(*# z5(0{m#(n4MXJ;Sq8(v(>A6Dc5>r4|AG`3h1o1i)fH(&A1A}NaXqlSyZJg zhp8t3md>R^TCa-Bs+2nT^0_$e>2Upb(5bEvq(5|d%XyJqSTB~!9cZ)DUdD8hqzgdJ z`_CWEtpBQ^Pvio9&5e;jtEKIb2tyHQgJ0FN{ z)tTYiXH^jJI0Jr1neQlPm@^h%IRgX_Fo&@eQKUv_mzoT#LW^gGMJ$JI=aq;_pqO;| z^*3J_Fw&1}gbhCfgF#V{medSGL$mhtBc;wfCQ?ZL_5ftRjUZ`Hc1Ii=y*8UsRp==L zpoc<{kjiTv)F!<6mD96Iw>6?L|7MbA5XJ-(;T9e#EgyOvngE+!GNtsE#NQ3xGm@BF zgdK+S3yXP|#MPJ)si7z!u^?|~Et4`^YRn=a0q~bJuOv*t@ z;U|7DG0zE!JHmlH=up&HI@}X~B|k>ztRq)MP{<=2`bicHJ6yQUPT0|}W}$+)ScYCk z8v0jk*RdB+e)uz9{Owiq{=mp~rtA_*{`HoZUZpyms#$kgGdK~MubQ?cXl`T1uv z!8x#zl&_VjotH>Bh?IcOPxN6|6DIpqHxwj|w@w$5M7Rcj0Fmu3NBsRe+Ao=^FU^Ad zA{4wFE;zag4B!9n(1-NF9g56z0eyj#{Ar96E{pt|Rzp7MN6S)dFrKSMYe)Aw{om zV`(g%Qri}jauyEzEyQHidx`c=1%n%s8&@wLN;ve8%u2nZ!%pu>_2m3&AQc*aYRu1h zr4lmFGQdQ)K?<4SAq=D2cqoZA0?nCB%w!!55lmXRR=3&~@^QJeSnrn~j%IcN<`W7k zdbkMC7|$&gltctV)W@@x;2BmBwZQFfb_?Z=Z8FO?tiN;D(3Ve=_IdoN(_jfc;c_9P zcCD!+jIKy~QRW%WH6_C*{p#b^i^Ht5NTMHdN!xAL8l8iG|0G&lJuq|PMhgN-dAHh| zvLtEhqhAp`tD(|HVTSFd|54pSX!%zJvi*-q*66)X=f_ByBeFQ(uEtQfa3oICl&-i{ zowFqTtD%$6JSP@R0Ao$X^%$1p*TE5N)NliA5SGT23XRv$7NZ_=y;3e8ewZ!z32&3wBgHG>~ctU6&lD%s0CQay?2_TGS_iYs#@>sQA zxFe~!!vDuxXq}nUE2dT)g=+OhG6@`fFG&D;b4b%KkdI!g9ASUE?x3STmmEZ<(tZ#z z$po(h2XHe3e~j+GkDN< z_ER(eP@bwtP=_@6tqc>7!j>()wxDdKgS_EXk7SgmccreNxmx(VU|uF7DT z6~c4e;YA&LyfQSY0F1_aA`vI}wNJ~*Qzr=}8=qMCM*FAm#;o0bZg0@t?HkK%?TA=R%`4*zSbwB&qmZyV_cmaVF@{kXhkrtPjdT#ZiVaogrf&j zso6Ms?Vv@wgSzg=g)=A8fx%VeQapqc{Dc8s^-@uc$00s9=vx_~wepSV`a{LVO6yB4Rg)wB z(!6|+wGK~s89q(a?u7N_Y~7B*322kwAhB!d=A;LR!u9;MZR^x19FqyKKWiF#brvU5 zRor6PDqk?0{!$sH+1|Xx*NP3U+p$(4sl#h9>XeryIocPYt$YQm@6QF-=UJ^mA&2Q% z$2FJQsI$#7LpW0mA_W-ESI4Pm4OY#%9&f9>+7Pl<_NlD&i3W_DM5ypmAccoz--qhQ zCERaQ83qvhiKpvpR|968ey4z8jk(kyu}1chPE~&2$*S(!%w=na3cQt-bnLG8Sn1_| zzWZ@*pOjR5x%s#>6nDty(%5}p$>KsZKZW58iOS2A4x%bai1A8Hn%HKVYgQ0^u>JIY zb*ZLgvC#X-nbSoVo97E#O=rc^7I^|WPv*~wxza-&oYNvW3#Ddwb z!K7K?Q@7+F95uLL(FvGAa51C^Tp~+)N-7~S8nn(j?ircQllEW^*VV38q`QRbv_?wAwB~4H08`e&oj!^8q+Y0LohVkJG9w`_i0ypZ* z^ACJ;ZVoTItJ|sAQ_TFjZLZ@682-zj`tO@UUT=WcgFZ2v@)~R0JHtzYPW@pL1tI0f zeQnYiBEPk?fhKupb3(V@-{5cr(DQn_h>+tnM71KMx}rCz4NQQV9oZa@!)M3SEL$7R zO%nEwtgnz2W)S>u6lMz>Ywbsj>n zo4jASUlDf6RM2zpC${%pBiHmoJcWQAip*>%>~%k47V^Plh4rVw4<3d%^~xKIwaL?> zp~vyPoT*jYu4RY6B|V$MM|(>(1foTfgdu5n?L{F-c#%=n$SWGg*jh~u2dMQ%-Bh@& z`&GYmuHi^5suU?gxnM2MnuO>3xlPBfY$q?-K9Y}h?#?n(W2=W5YdufDO=*Q77Q%xj zO}9IBPWK!PCxF+&whyA(YSXeUTvPd>_|F`(;YZT9=Y~uO~ za84#?5$z6B*b=DDl50sELsHL@vmS)XvV zQp3ApqSLc+yX1VTHk@BSHJvi?jWd|?WaMmC<35F~lw4*^ma~Y!0B_v~=^@9*%SSEqN zyQe}AqgiBG9VQS3j1*#=RCxWj*;v{T5=)o>z93JfWV=(ef|$g`xb z&l`H04ON&llMR*x3`zyM29>E&o|RlkH~xP<22=ndK57UV$KiEygQl>nrUF3Vk+h9{ zt3<(#4#M3%))4af-y6G8gjcj1wK>R~idN#Vs^DK`Kw-99|0JSPgK9W-2*GT~;Gkb4 zv&D!6L!)=3Y1}9_uJAb3LEN1#i*Go#(y2k?eIc?RZcryHXEYi*Hq12$=TtWyN};_ z+uLs;K`MN$5r3dNHgKNvQCs;(`e`-2wtQp0ASl!hfCU{4%00Kz_&mM4a~Lu5WMMIA zhkS~LCjK-(9I1YADAx}zk&4w8#E$F!yjDgE?i)#>9!jn5U~=F5!Q-^>ve=6b!otn@ zX$2!bWQRH%g$tWc8LqiiE5;qn-PEksS5RT}yrK+#+8^nQp`?}RHE}k##OWpo(rfi!6^ollqd&gNVRP>7g!09s{rv}@#SZ9~_ zU+(;5?}mNNWe{Kxc4XN|ZfE6RO(;zIC4zFM@^lEEq0FaBIRB1ubKKM#E*N^sNRRf zexKm;6U2goElWUuZx0ZtCMQsf`x_U) zEm^EGxID;Z@=k)(4qC*C;bnSWEbjRjLP;avc9+^o3p~s@G|q_W{f&r?4>DN2J-fe1 zhL1HN;ks378y-b!Ra}wc9G|C?<7VZO#?|pEuTFQI2iKr z(JvL&jm8NNO!)t-nt$s;6ei?9E8ze0Kga@mK0(s(Od#RR>`a|qoXm`D|DD+zTfwn$ zk}#9}JK^UiVG^};aaJ;O60^5;u(va_b0Og-VG;wRU7S=Mj7-c(SUCT^S%rj2($dDo z%nA5yW8`8cZf0U{YDU5&ZD#r1!i9u`m6e1^#twMh!T#UNBrZ;_z^kgR#x9-?z=@2l z(RbjN+JFAgR5Z3SGjSnd(y%mju^{1KVbFz>K3c~&GdObkTIv>5U z1|L5^w_u9FNQ*_`WMGOPMWstgLpHrHJAkK9iIU|<13w0D|5Mr{-2khuX%4t81etl4-bYfSFgnW9}e$-GV1d# zRy)0Se@%>~R;P1#KP)@$LLuNR|Mq?yEiX@;oxN+AFMc>zO+=fUo2##{cXoD$kB;IV zG_bYpCKU@)$m9pUDwsQRUQ`3UL zxa>Dp-M4#yc3*TzhMxFQNCQw1|#BfQCPX5oJdqC1SoK6x7 z?n=cFME)#Ipb#dp&q_=L9B4`bTGHFooMLs)T*Ch@%t8gjJQC{FWm z`|cfG5<3wG|NW+67-c|7-XnUkcOp1*sa?8vN@28v-71owibqmKSY;bkK283l813J#_t#Hg#$=g|ss8ubFcCs-pNAk*LiH&ul&jN;dM;J!xnIvNeZF0O zx)eVhAN;`Wf31+$>0qhUnfYNYbY#v(r2qQSE(7izsaO${E#&u99p|U~z26qp3)ZnU zBC%##Ngd*8E1*xFZcb87Wh@MsEj?p$pv>UdOj;*GVCvyWgwkdG35ZQ8UpR<_{OTN6 zI_ipHnmamM^qy8F>ObCI?dL2PCJl%Mv^ngpWL{IN4lZ*OuC5av0YnyJUX)sf0S@uv z7h3izGbK%>o->_VN5_gS?IQJ|hQ}1!|Bf4#LZDRlN0Y}$B4GdYbgP_`lF|qO1nj%J zt?E~RCF&pkcyW}GvlmrM7wm0H>Gv@rlQqI~|0wi%vDP#gjBhr1)Z6{`R_}PDBean% zU={D!xWZy|t^>V8a~*Dc(%1vfq}3)5hf4l#7WZ#8B>n73D)H}Wc|#@mEgD=RpZT<* z{@oglRE4|^8(*tddTO53m+0dxe$n@0yi7#TNy2@@6ykyn&_I9(3@VZF3=dag?CP&7`!(&I?G3zE%*OuW7{LyUQR6e!T? z#EUbucIPr7Pb6qs^I7G#P3g&qMyLO%v{&$-)m_k2fGj92C+AGbG~c@?8{eXVf*mFP z)DO#ibxiDkvEH#rWw97W>RfJb^s*m~Z4>cu7bmo-)xNGQ#k~2GR^TC6VC@H+!ShQ6 zi!W`=?z#6oim~oaetVkxabe<^PH>P`2s_|D^MCIv8f@#+0SLEPRyn=Rlt?zg|C_u*yp_2&iIvk;Hw)lLl2Qx@1QgjMo$ zX+WAGpx_Kqn&lCO%l0^XAu7x18-9_zhhKI#YEfUyjhQP53n()=uJyRN96m5q=m7Wh zy>}qN&K1H8F$wyi&HFGkqX40|jU=x{k3xGY16}GjR@q$64) z(r8AQ_t;i3fIKq4+~!r5vV_Am%4e*IMM%}=;G zFRB{kO$k0<`0Gk0Bes{gt99)Gx=@LnDlc(w`{ zq~CuEu6iiv{;ces1|rUOQ>czHY&2Ees&w-{wjNg*y?(SP|9L!hdtHPlf>0~oucz`- zN@)AuAoRRLIww({^B{-;6OD3R8JRD7v05+HnP&6f?>UHUFpaL)O$KAk<$4*W%yJA= zkSvMcHQGBrtTkjt9q8y?c1KoU@0Sd|+6TrmS5;#Z2I}OOgZv0ZmC0EtA?xhi%!*>S z-V=VMF>@q_6NOOmhI&0;saVQsf1Lk1@^2plCXO%-NZY)Q^tC4g{DyHBW>TJYlux9~I zk7hQxzaaZTv@%j8g>Z|NBT@L$`#3@Rt)U|EzuOq72pr0xj3q_U%KEQxhxPT(!g3dR zWIvDdlgB?gCRqI`0hCf)o98>zqhQI{yKf&yFqNPQAyEa8mUmJTtUqoRs-C?c1u-z% z7U2I6OV_|ySKBRP+qR9yPUFV5ZQC{)H;rxEXpDx9ZM$*q?)%;I5B75&teG`4t0Z}O znja`dDylCm?gDM);|MrpmcA?q!mp$OWyiHdkRLRXn3&kIBmM?0Nfxi<^DVdRrz5@4 z%da6NpB;8$|GX2*-Rw~L?q)}*RPI>5hxs_R4v%)M1nevvE;>0&${tQP(?3l(CMmV< z{SauL*ZByi-$P9F_>irY(yP8W=s)c5n_4$mS|tDfr#ZnTVzb!4d1kxT@eFB;yHOYi zsj8RTFl4b3VG6f`5d7w*btM-dcpQ~|I!8}tQC;p4vd3_qp@lDovVSfolRMuUr1ICC zO<=KZU-h>#KC5*OalA82ko#4h?mI|( zt+FuZ|1R!xTF0kRRHqQN>^W4^asO0#(eJK#$Bwgw(C(eTkiT?8&Vjzs+Yw;s41RU8 zJnCFnW$6|xO12uqg|5&eO~D-M7*&nM)tScxk)Z$adS95&5v)=^m?$Y_x`@38)4Cfo z5q(_{4$|s**+nRpvDjnU3vAUs8*$KB_D1s=dn(&A;giuub>3|^47cu&LHPJvhu(Gw zKDCuRp}3wfLN}-YqNQImLce@2XPPiNAW6i%E@!sUlgYc~A_oaiO4z(MI`8*yOjOMJ zZ}d&G*WYg1`8%9X=tTzzYK?`>UCSc8$;8%!Sn_nb`2SbMD$)u+I<-57s@<781PU0> zG*I22)l3!nJ6;h5%5T<*#Byo#yH%l?71eAVN#L>%aVvL0J3OsbrqdwdVG@bGId1^w z4>^-Q%{q(s$O<*$%e7*>{;vF`^aFG6K-#^|0U4xi7@18D4R$5wVzr0{X$JAna zvAz_Yx&R4SE%fo2EeN|N^grLu z*=(o%m>dgcC8I^{?W1P;d5mYQ=kwP{Eli`gv%ub9?YfG1hnm;#Es_mWM*_lAxVlud zhR!boZh!OiR4_RBE1`t&uLPm@qKy>WZ~rR$7L4Vt13M8FsGL9Xc7!QNyYe&HA7Z3b zx+#ikj5ZIYa@quR;T5xvG4$z7WO8qr$u`g_W_r)3WQ|dSA(|UXHm`Ht@;MLWwtjht zdz4C4_lGvf85u1O zniuWL)!qi&><{@F^Xx+%yqL<)dktPCE0@O{MdpB-41fG5@SUWzK|Q-&R;;_}^yEss zg1k)%`-D9{SN`7G726Ye2wyGoLu*F&on!wUs!FjSYK70^#mZKaPRl>zOx0g^R4WhV zMI3#dUiN|xR_xn{rRL*m5m>GmIJ z7?`}yDUm$hT=c8p)t zui0wywo0lOtfD7E8Il8{)R0@>P;`*k(Axm*0o|Ewo&)5ejt;0H6k5iPSaEfqhqZ|! z>54&J4#PcYcUwxOdix2TE<4-+bV2VVuBBO$VT+Kp29?I6N!0dc0`h-L&8EEl5t0k3 zgrWn*F~LrMS7a9DNePxQl|LQ(NmvWIPx*q4;@rHI3nkUNz3vSR#Mu0C+WO?-s*uaV z4iRnf4pT@xM&)mxDUH!_vQ)x1ghOMALe98g_po-tZhmY}jZ6s?^!lK1Bz$x8^WyjM zoTSqt>e}&mWt@l1d9%-8&{MGRvce^l*(l=S$UdKyiuFW>$_sDs2dTnZAg#Y$GH^-m zs0FVN0$&>sc#8+ym3g38&x2|ZjN9w;XOpVMH*wt%oVIKG62$FA{*_?GAU(HLRSXYY z_Val%d43XJ!fhQ+Xo;9(puTTUu&8zZ>J@6#)T|H+5FZ}RBQAv+?zb!Gf<8YUk#UTa zkpyPiEpIK?d2MmQ^Ntu5h?o8-osfv)S9u0|>M>%PX8iT&g%g8`HuOqol8`n!x58M-SGC6+!N)dwosU@jzO+N_Ti{H7F4_U332B^-7D`6X z8n3i|iQ#sOZeLuZ+A*VNd?z_2f(!;UZBkw5$wa*W)^PT)s|x^)?yY8>(Wu(ar2n2a zOEQc;YtqQ5KQs*?uC_gK*s?gFDjd$*$O7EliG+aZMc1Y)RMq1aZc!3eooAS!3v)Or zSb#$HyI~~y7Py9n18C85#H%}4XaUpYvM|4$uHaUPNNku@YgINbtn$flG-NcM_(&7` z=zoj%O$@YO=3pO>t8OZqpJO+#Pl&?zn^~+sXCj_|uzEQ>3mqYL?^CR-qg&t_loF_p z2Jh0H5AOl=y9ue>)3CL0~%LV=*Btj*!P{C9qb-&s6Ypf#`AQb z`m+qi03s&ZZ?NsogGe!WgS6TY(jNEviJ(Q7z&G2bnjog2WWxH-YuzNa+TYRDIBo4O zJgrr0*%BlAbHE;Eo$3}r_z3|(U8lhtc#St(IAjf#Y>S$UCN37B0 z5@xf4kq=zhuX|tf)8;R$@yqxrHKmuV4^*HuD&uYE|Hd^XL841W3qd|ez&PpQdSAT3 zVWshES_S@Gp=)bT?P7UMw!S~xqh7T#)AbR7*!$dI1p+6T(k|kpw>gJ4ZW33BJrGjXAt=nn%=`NSrI9uZa0 zbIu5Q_(#9qZU(#kZcaBvny2g>qy8?T|$hj7Yt*s&6y2uqm0BsHiu2zgWQYe-*OhwTtEFSB}-Ii{L!6s zpjy5jeid{sR&x*FgDh6&iSl}mRJs@>DcA}glW-EgH?h=_Scw#1`V)JP34nR=e8rK) zhNZ>A7|3PnoZ(M*qC*Dn;FSF4p3ICF8!rU>`0Jbu8YKTMq7r~)%TLz+oQ_mJ-i2IY z94K9F>!kBve(h{|Mi<-omQmbU^0Js>`;55@mM;D=8_WD%h(pHr z0p)D`77qy58&J-LJgkixe2EAPE3ZxS3lXlW?fDq?v|0Ig4gWsI(5!b(eZSJ+$y%q< zJOJ56tk6{EWKDTIzOSTvRV?(Dp`iabt!*9(Ceo3bjadBUh^Kk=p%=gJ0Ot0DIG)ai7OYXr-j96grd&QUvw$Y{~E3;b`07ZA3q zBYvDhRrVh@**pNybA@(j?VBuHVp^Dv<;#L_X^l#3>kh=GLKn-n?jHz?XU^dT;o^nO zIBjkq{r9157;PS(prDVZ%nKEu2%T&9!p>Ms23;VzJ8O$G3N{W^%yk-wXX;{$qD1Pz zqKcr99K0(Sik#$;)TYkuD8!-lsg=Py;62DM%lW zJ)KdBCPG(`6p^2J&^CP;PzPU6VvJ>Q-&yys-6L z6Zysz2@emC=2i#|3F+rFUBuhvuKgd-w55&3SjrBGaNEf;38rb`J<=bj&b2D z<TC1(-$rG@$b(T86)kx2X|e`UrWlAZ)Uu|- z-8y~$#wK24J#MlL7D&2aqTTC?M07{hpqhdd&2@s)a67R6a#A7`WT#Gh+V|!?IPinF zD1j*yry0h|SS4DZrr6~z{H5S>xxLZIpZ0&0HZL3k0k_mUr8bAux$`7bDH0*=TyzMg z4xAmb=9XM25B&s*cI+_;22H>z>*7fK@RDosLdqqNvlPiZpH2E}NNq9Wb=@3|QR3$i86ih-hc+LK09Lu*X>g%s3O7@FYy0jl|P)w=(cdJFWBL~m~_biAuK*m!Gm)3)O7 z?3)U1*+MP_GO@>w(GqgiR2He@3$Hql=f2`;2_*Xr4-_cE zG|1`^#aUPkD06@#;C7YTkH|!|BjdYX8!&9%#st99 zQc)~_jutUa2nXcJCR1%`WuylO9pTKRj1}w0dQ<$O5IYau75>j$2N07lDWiHUfAf8; zw{#p9k1)5o*=8IR{1s$fc_6duto8NryM=l-enm{g9ScwM zY7OBBoaGK~sQRV&gGa1xszwVPAHxEn6+W9QmI$??CwD5t&v5+NFPg8`&vkX1`d5qs z5v|4-1zOq=Xs60vm4ZTEiVhX(R@hL9@olhYgN2gKf5!inCBl8QEJnLxk}Dz{N)3U{ zZ|MBRS2bNA?lKaMLaYU=WBB!Qj}XHF0kXmm^`7(B6_s21=FK1LNN2kh?JBO2IfAeI zZAU0J4YbW5U2dtRX+CBAzbMt86OySE+B9X6Ab$#blLmWq!ocDng^)M$Db7SF3eJSq{${%+iw9BQ@j3 z2-SIL-A3Ld*J3f8sN|H@N8X0)5)UAy59qK$i>|7=8=DsbEaMQAFi)_jm!@BV*Nr3) zgM^u!i|fx#Iu7O|!)mm{fX7nJZ%ioT?;0R)DC+AA5YWDx$0s19a8|q2Jy=JdN(i1h@l$ zPb7ilv|l}^;R7Ko@a0jD4?~wcL6}{KwCpK4BuBAOm-C`H@%JQljlI89kVm4KxOG|S z08>~G4kpRT$9pcw6HV)wjt~;kVS`V@PscL4Fr#ZCBp6L=_6i$6>4|#(?ud+owd;pb~z4sq#TDN1+DOldL9eA zFBN9d)C?@3IWyJ9fF21xEZHYp#DK&K=ysndv0K~#Uug8yT0^HcfI(o%)^h(xtVOCA zuHK)-H;|Jt?1u>O#m)-$3i;uoTz`#a*~E#b#rB5e^^+M%b2}a3SGXJ78v&~2tW?z> z2v_~QHy;7B+y&`KtU6g6&!Yu9U)NGl3rgVq7kX|)ntcI0y3j`J3d+5e;b5|W*0 zwbO@Jk|zL+_KJsljxF+!ls@pRY^Q-8O&d5O=;r%oF_|9hguE6xdF^4Is*(GoDW9fj zJ6k6RAqH#1B0g-@?ako5^}4%WIaiESAfxiTI5CK1b%sFYFA8Fa8lve=6$t{}f7D=y; zNmJgQ|jo5J2{cOJ9qJKu}f?k=t-Q1b` z<+|3-badMox6LlC#yYGivadQ6O-QF0m<5Aa!b`O|LVD$FvWbgTN;U95D&Y%3U8Ar> zW}k+=UH(#twYd5gr-DvsRDIc0ef-yZh*SjORMXTve$vsYbIfPU`rM9K?hLdQ_kGGF zt9B$6gYt?2`ciXj#pyM1&4|ITAt+#=;cec;K=eSDfvY)GE?K}M`ed+GzMhN=F>s7DKMn|&~^Dq(FVp7H9M54vN z$4&M>mU+)X<_|h5s)!6sIro||6t->Re?G``rN84 z4JHI2wa-tJ(HQ1WbsBBAs~y?Wrp{-{?nxg-8_*XI3YN~~vHtz`d?#j@Oqko_Bn+^} zLoEp7(X9Qa9=;G1558?PHBW6^9>^sNsV-D1PC2q^H}4(w2;;v&5=d^5>7*ftqJ>8N zr9tW8e4S65_O9T``^uAvy`Y3BV$qMd=b%Gkg^<)!ne*GXn|?W2sZDbXWk>fb>O~KgJQz zGpbj9fB&~JOEAi+D(2WA=G_yb*=AnA?2&x?Gwxe^nipJn1IM%L($GDkDQ?w%!z+eI z@_K#cROD@`HYlbc6!QIKWK|04c+EStr=b`BV)a7rU5*TH2cj_B|z~NTRd++jqo&EpOn10ToOum8gD-Xs-ooryOe-OFjzZ_msXPc1=TV}@cmdD_!7O}JNi zyt46?48fml7m+}O{BBQFr;Z^gfU>xF7;~KH-y)Dh+HZDHDx;65`lKLB`L2Mty71Ym zo3fVK4(WhLz$fBm4AE*F2{E*{azLC`kfuJ%&<+FF4`L*;l$NHwjPKg06zJuXElk%J zftrWyx1#56w$1bO$`8iVRISW8P64KZHWFrjeqCSDJt=1yK(7M7Hwe=-ua>*e69FhM zl7Nlr_SKWPPAf@(;?{K)mYxJdX1?aS*z)sXrWcr0yk6(D2Lzo4c-^0Ut2b{SP0t1c z+B2LV*KPt7@lkL5sjP2hpz@&%`(F8eFdt3ThtT>Vi4;BZ&ueYI{&@`i>aCT3{J~$im=UA6}AL!)F8o$h|$7Z!`uGeSIvE^s5~9`gOMD zB>)4uuNRAf1_v;lA)SsNm~fcIW3vPZw4O||GmxxpUQ^T3hKGmI)(3>xj!le>0o_)c z?K9l))oSC>XuU}w>PEYdLWdjP2W-!P2Zd}>`cx8ok>f+SdPweE9_<=aQ~taLdZ%(;Th zwB(Ey*wXxrX65p;ne1XM?ql}|w zQnu)LXbh*NfmcTqV$)~O!PzpXWQ`TP?h0|CooK^QQ>94Nta?T>O`|*;bJVWVXBb=QZHn zq$9E^rP2U$r}hWmuL}#$Df01W4YQ z&9o#ww<0vm!-1$HzMf(wqeFR@Ntg`dg?;AnEHt$<<*_v`+QSvCCZykA<(;5Bk0wy^|1pBjD~(S?w4qfn~QE7N}`YeW5kT92qc`q-Q~ z8>5dfuH1}lXCfvY(Xvy3pyjvq#2{^tZrh<{N1fM$K?ZB+i_%==s?nlBW{=gr(My!Fg?$kF*U{2BP>cK$ zjJ-QXiaODQgTpVu{~pykg?@arzZM75@y8t-cMp4Z!F_qKB?NbX6DU1|$O#F^FmWIi z_eI#uv|tt^ia$Ezr_~eZ$qdFJNN_6q3NJDbVN%L6lxR)G*JKo^IcCgA(EZ6YE8N7{C= zW}{Q#=i5^j{gyI8ki*A_f`5R^!|D3^x@>7cHlN4vdD_pPKeMt%_>)Uz`|Hs#DdF%= zMp05gxn(5c@!U@Damy1TyNGHxGYI)SczfuUrCodNgY{u})yjh=23=Tf{HJkbkuH2S z{J_g`cS^U!CdlxLr##p+heDZNy*&84>eTzca6Rx8IAM51ay}$5mroO-*ZudXshD$cuCL1WWUuTAgku69iGojf+UfE`_=ZsA~)dX$s>1a>1m{P z4-lkhB>dbThCeD*$i30Y-X7dl)zO*Y8Il2hqN1XJwzfVWQbx_{PmMs*C!p?{YI9z> zgHs9AbQ;kR=vj0rea>UzIg$@3poDQO58c8Kcp?*EiQtGa7yOutc%LSwn*73FIFqF?02{!=AGDyXiPw%GkvC7?;W$+dScrt=q2wN)CQ>(6U5aBN@9Clm_91 zJ2h-!nj=%J6s?5i#MzBD6-d9+Zs#!-;hj^1i7ZDy(FI3hwDJ?v)Vs#!bb z<>f$fStLKQbz!{Q^-!m(DvJ0cpcFoqqChqffV*bLuGgi_JRH&ls}kudmVtI=C1549 z^`8w5-`!BO_!^c;z+EPs^%|Wk%J7|rkq9ahXTOsb)-&3p#*dhR(K4p|lLre3;4Srrt=mHsVu!omL@v^ul9_X(ra; zVq9*}-%-L;EX>kMdFx{OVzo|N;mAopWgq1_D{W1fs)#}Qdl2KQ6{|B8bG+bn4 zVO5@M;>_{XRFF|3+1{)XV=zCZ+g{ye)>qAxO`e+Tw`T#~znAy?a7YKiLVKI^$>b$! zMJq9|ds=T-Ks1_iDiRUR1$qQ>h3oMuDO*V@ijA6q00q*6V;p@|0?|)Fq0KfX9B6Tw z?8mtG+qbabU@%Fy5M*av>cMct&y&Z-4EGBP&Wo+jC-fs9fB&AOnYDXGYFEHJt=S>S z{bnTor-qX}uGHGv+OeUIf}cT5lah+c`);Ew0j*p{qN~Yrh5sP^1!GI}w6Vn+!&P4G z+Hf&D*oXt*!5xGwdX7B0yFZxY?BToUVprE}A6zjr&Cal9ux2bnNL2*Z2aO|(23T;; zrL9pK#dbH#=2Fyth#@dW7%WlSSnBhQsNL8FD%lkOqF9A>yLd41{MUa08p z&6{&i9MDi@Rq#=@07dpRI%`6qi^J39H*<|jZVwb_Cua^&hVQ+I>>5GWt!<8bSNe2CkHh-G44%U>jd?-J%4t)HdtD*p@EEvQP zAZAr@SM>e|nno+K62!H48j1f_*c)+@M&^PM}8fb}7kp1@zt?y~Ls{#nll)UmWlE%_u_IkU1rR%kL(1@hdUy=j~OiJr!Qr+vYu}forl=xs6 z9weVH@W%tY6^7f_#>oluy*lMdqr*h!JXiKU$nMts#TQ06O3j)}nt^`M*d1t}mOshd z^s(>PJ6;@LYAZk+RCTsg zshCi|So~t*bXjL-ufdIImFryN+7yNsndY@0S_DZMLjHT9tbei<@TmuSQvD6YsksRo z`(+C?_c&B*rhd1rn*w>D5{P4D!*G!FJlS3$tt7#FjtwCCc!Zhb1z^lz0xC zKLxHN9zc*Atuw3%i*=Ii?N-Ugd#;D)cAp5qpOs%~bLuO@MTVXSYvi3@F4Pa!2+J)J zb8OvF3-K4dE1QYVG?vdp)dihc?F=bt^n66qEP=>Z%7$_AGqQyied|Zym^Uz~{7tf3 ze)t1a%?kHpKtGcsyO6L|F=^e~IbGERs>7Xb{xN!W-DGX^#efj4uoLpt0=Spqp^MRSmd4@u^Zkj9*+0qlR)( z5Gzf3Eg^s)2vr!fPXnAMzAO7dyZo&F8E`zoqS9WDCRIJI;pBVT;FsWgFq4T6@$_!e>oLRK}f6EYxw)oA>07g%nYeeOWR zKk5d_W}WlkS8x0EK@>8QXX7X?HnQ%;@xYLi86n-g$*xX>x3dlZp0e1^_rF{%42$|3 zfjrE$W5ZKMr|5rbP#V#s&efO6>5{qZs)&@lK1+`>1-WYU)YyRlV$BkEn(V#td5~zX zgTa#Q*eTWt=-JDOdbv7WEADZwNiOW^gmbNmPKxSkzE2>-=un!~2Aj@S9VOa~eMmDl~v>o6Gy85w-MINB~jk!yTlJ7=i8wH78eyIbw3WrT*D6|1- zlwpMNej-+Dop0WnDC;Bj-C4-jC$+-$8dNw*l5DDt9CFH^0Z@X;hBFbMPtP~{1pPi@l{luXK$n%@#*5 z&Wpp_umqJhK7bJ7Kv1st1Ky7}a6#cQHB;$ag7-cQQpLA;&o6Z|)J;gyNYsmK%&$D0 ziA81CpzTrLULs4*r%n$;G(B|f5}HO=)R2H#i#PSgQqSF=DM+@0V)W&lldG{A;!Fpq z+H+k*+3AmCIr^zY@@aY3y^)EB@oQg@Kr9d#nA6@zasy`TW=8UH(ng&$wIEDeF;mITsH?eU@q5WgOGlk(WyzaPowjb0eX;ofT$Bg# zN+&Glg*2i=tlw9pOr?0O?=9z>@EB)JJ5Lk?Em8Jd79J7@%-^I}?+rgmYZZSHDRKFH z%(Ht6+cMdXsw6`{P-&o!bRV$rC}fFj=Kdb{ga9r^W&su zGr68aFQDV3u|)~I)xoG^ubG4kFE_rPnu%#TTzqi(hN{e=r(UGsvS!0a3br+K=oEuL zciZTr3TpYj&^57acWSUejhDcWGSJWHH~ZXFJ+#gU;7(vsmVNvp0tYf`{wZu^vx^mC zu}lu7$ZU+P7gG%a8hdWayZ%CKhS#I|g zMAXC8&eDqys~R;7Hr|^6Jp7>9z#e3EQQmA`;-t;(z2bJ$IJC&HTlA=5XbDgc)B$Fn z-4fM~WRl=5_KG=?pj3c?jOrrgJ{BJjFwEV-UyJ_6tkbjpbW!wv0sa<0IB@Db;@?Ua z!bYkQ)DY>@4FuN3xBf=_O-Go~`KwWBZf;JBr|F2L!~z--?`?Yr{$xxWY}_3^A0&vZ zBthYVVnuh~Ve-@7qLa@zr9-(i7#+$N2R3k-35Het1cgBiMs$QAh^~+PwFDbCtoB)3W0dZQS>84}m@orxp?2U~BT@>`S$~~8J zRJW-P3AG5A?P^yB?Kj7jyt&*Of8^?GYyyEg$vBs5BclfvP=D;)74!YRE-``bssz*n z7T=AU)UPS=8#-KX&wmWwG*BQwdez!Aad5Wg)IX4fi{o>-jovV61bPLYvstKbUCz{G zai}Fv`dZ_&216pmD_uP&BtV(PSsRidLo^7l!XL;vcm|(nRZ7QS!qu78_8y73T}Ssb zyO&cRiEG*4%fIVLN{h_rbpp~{B!(HzZkalCK@^l&`-K7m%$-+62oPogg$L_|} z1IoY&G19--f3N=K-cll*2 ze$wW96AbsLwvrzgEMPqN`7X3b$tdx2Q~S*#m8!6^^Ud=e4^U0RF|$Q_+2-(cKp9L+ zA+`~h;E)HXdv7~{qWpu$MMV%Yq_Ahdf@D_aE2f8_ z&u-?&nF?s1L>twQ^jZI>ck7age7F~CGpkty|G7-ic>5t#fe9F)?fFh z@nps6^o=t2`HWV7_i)yRK4Mr?@o=m{m)ax?*%#YbuC&PoUWUaOAmXqH^R*eR*6H4Y z3Yelc@K?|6@ZkS4&svyq#!nCX4f?S$YHg}Ot{mvAxp5`#fn&b&1fr<-oWsTRaoUb7aJ~(RFYkolI3i* zI^;#lF`Ox`_E2VG?~)iEN5@9sQGk4ZfbF3qCX(3Acq|eNYqhjbZ^gmKuY@G3-;EFs z%YZrt17UMHWT>n>?cDk*T-!jQc5?kQj;sN&*TK-9mV_gbV}BQTkOOs9mRxT=^YidzeDux#saw^;emS#d{ z217iFb5xa@NaA&zyqIeL`NJuD(j~bghf#U86B7KeZC2zSG>uB}FNNW4@7c!SL+~c! z0j3s!;fnxmgL&371LH>5_gbLWWd4WH=f|3B(w~5*O&HL8vxi4J$3~|H6)qXv@Ev$) zRx5h~GV*Qerv~Zq7}x+Rl0JOblQ4GsX%pnb_=ODh)RX$cZz^e85JR_&ap0nWoY1A; zqnVy-WbQ{*fBTcnq~4&lka_W}xPN9U4b{`*o3vPF0lWP1AHB?WGFoF9Y!83j88k5^ zUe$@54h}&m2x4SBv8w{v2hkA;2~kzcGD2bWgGbw7=VpRA;6t2zc6^xRaKa4xZ7*mDq4UfnzlrKwN=6ZrW2(q3c2AZ3eh7Ljl=z z=)3+yTW#94o7PDXO=z!U99fJybqGm0b^iFnszC8PBuSMb25YInr?8ojaLA8!*!Le$~7FZ2jM zKX(sVn}|kiXX17g0}+x+g8v2TIM|)f_Q|n- zB5RsO?IiCdUucD9mrt}-tJf$*d*pG}Apsfz=lHZ$y61Bw_a~c~WJ9A7P2i^8=jc<{ zk%sIWKS`7NH?rLHD*b-qTBl{8*Tj+$TUkw()~r{V*J9KkSE6cZ**~lU#dW2N&BW33 z?T6Zqh6)p$EbnO0c~gnY0$Dl_Hap#XM{yIYvh<%2{X-Zln-0!q^kS2}b0<@m^OX*z zYK)Z`>I8nOs515#E~?bxWoV84;azZ44&x{aG%AVkl`cI^r6&Zey&znjR@LV%;;N9>qWwdfGpCC8han@!eEw_l%(>~AFd)vgaj zge^{yW2HIyj}ZCZgreYhl%DmMs^pMq>%b9v8)YNwaYZ?gYM_`aWVJ$dIVHi+Kl#h6 zAASgQE*e1O{mw ztINd~BB(j!F1bX#1pKUsMZm!GG{8=hvy3p15UMzE=A{0YG)`Vq>G@h;6bM~`r!

7kqT1Onn{q7z{p<;}$KB8ZMfb}ny<5O2N5ZbSU6Ep4(5pcoi>_mkZHM>v^CQC&xZLg8#|Ez#-c zAP_aT*XTvMRyCNYITr*`Q@|9+X4@TGs_qvC+y!$nR;nfrpn2?Rh_OwMv1lm@;h5w0^yLh7j0-wVr4^)MY+;+`B0;rC zj&tOBMv!p1HkbRzgYSFj&1l{B^i4HA@9^V{9Dzm-Z?8r;xz3#hNbX3A#qEJ^TdWi2 z5YbK8t9m>9Uk-ZyATIKo+mXJ!e^&cPm>rqM{Y-9s zdmm_~ZltcArtwurgecy7M@CZl-9p-^gvF$N56HZ=i3(c8zu!a!&kGp54gx_KGOz{8 zZTk4l&C}X_fMqp>G z68U`wrjaNR3F))h{TxT@=IMMl`i@iO=+YMLWX3W^g7YYM5Vjhn1sexdb2f9^mIkPc z7k{Bc->aGr@3Hhy;C}Yx&UbYDO!1;blH16x*||HxpyK{sPa(drnu&or$q2$;Kf)A~ zV4JU6t*Z`~vDrh6#heJNCPPd8^g2b;tw=udP~xC0*%4uwlgOeDc^ zqiS==)0R5;{b88uuE+L))q0BT&Zz;~Z88#<*kXVc}UEZ-_Cu!@kiB8HFh@ zs{AU-Z}7v1qh3zR-8-6`dPpiY7b7)mj)|Uq(8&=5Y9G_|9ye{p!PQ)(zH)`_HfHrN z0nq~IbPiR#h0*MFXjvIeQIy(=`$(9PCX}(#Ylzw^%THjEig%xb7~1>e)7TEVq%P$B zbT-#a8`KIq4cvN<%by!JI!31R)NI>9P+0|~lE>|7k2>MaP9L2pB*=*I8-0ZBHD^Wt z@9`WL2AtBJ2QvzOy4mUDe$QeC%XK*h8v_u?(vCQz*q(&;)wJy?@|1u0ND^DLkvR|u ziVXUTp{#MtX&4+hvwnp`0l|2=NY@5>d}0Ne(Ous-O;($cQ0qm^+~jAZt#VUIO*foP zE0DmQog1kc=r`P&-}(qY#@#;?IqahbDaTK$&a0H}R@45ruGAi>lu-|1CQ8!cX!k|a zcz;Zg8we0?5RW|pgR9V2lgt&t+FLKTYQbogAx@Twug(=YG^KIpJZ$u$&k(MxZ3{lBVv=t3G z0>DgTk6Md@r_J!S@P82lwZ=+a-=HsI_-{-1BO>1E(orau7FUHeu<6c`2Ewe8BmvDx za#U2mB0t2${X@JB<_|_PR5mt<4Kh6Yqx#I*0NtA<_~`B5A6z!)WUsjF6%knWFIDqz zdL?{_h8B%^+i6jRYi?4_PCv@(sCl8ptziYRk(KnN$PDq_8oL9Y>d1#GJDk4!-thT* zYMvMYnjZ+WiW$b&JlEfIG3fC5!MEgoc9>96oA!+crbbXPYxsKClziglysvZI9Psol zQZrY7$#>E$a59P)VCfh)<(rQao!mUJ1BbNw#MwkT3;zhT-+C@P` zqT9wS!7{09@(~jDbG^B6O2;&SuENaHTm|mO__4O$^`TPr=0GTeR*D_eUwH zs7~)u>k?v7+H#U_`ZI-`7YKgi+Y5IDwGl%=!eP_~vdHp8rGWv7+it#gG-alPhzlz3 zGHfu%X3hwJFI!9|ly5T()K?h~ccD|o`t#!`ms%kw@Gt^5K+&Gx;Los;Ts1T^cn{#c zSC6ZaMrHABg(8@rV!B8!KHT-9@w4GAU6Xg#EEBhE)&dSDL*R&9IjU@ctzst;T}5P< zY6mM2OL8G}h=0q_-^A0n#kBS}SzRAz4YxbuSUojKBT>N3Ze=rTxL;jhd5BkCRV9dNkhr`6Ng#maAfzq#?=^11Hg&Tp|eJs{qc(c1+B?s@Lcwm zj+2jF?@ZjsR&VTNRh7~Fx6RHf!tG_IO>e+(bo>XpmF;`GDlAIKqD&yv+Cl{0zn#(ZUeL112e3nQP=fXXv2!wtw3fX1rfqx8(@We8Y| zh!@d~M5{0sr>20G^g><-bND|1^gs*0WY4~RIL$#OAzbstO$!|j89EfqD@P7SEt1`P z_9}JTQGZlU<=CjM?ju8a9my*`Km-sVH`csX(YU@<-(B{V!{(3ZT#65>@gwPJ~>2QEynPLjNL|vh1KVvjPmYz%MPlHU8F%QmTyHR6}by{ zmG8eTa*1|K&Ww$jS=o+zsG`5(J+k;;VLrOO`GZXOD8E4FyQvaWoz>z{nQxU!OR9P?6*0Uo4+B(Z*Io^;qrW zGi`GhW5J`Dl^q3B$xJz0gLQ%#C4xFmVxxyRRjXa7o(`Wps%kihb?tf<^ysWqfi%7$ z*w6?Swo)9lljz#S<>DU~goPxf)bw>Sc4DG=&Z-)vm0y%SZC$yOn?uX_5f)h!R%GVn z@!zuD*IzhQ7ujpygW7_b%XzPqCK+mO4acw|{Wk@Q0&!4V?j^18ORmTH4GoJu)$ z^VV&=^Tr)vkQB$}#p84IqmLZ#B?mZC;K!eSGCp@*4@u%$=0H&o+#FB;_*0pjTIap% zlD@TLbnQ5SbdNS+!8$hbQXKMmOi4Z)(W#Jv0c1dsd>yDwp>!aO0xOSPtqldiO6kCc z=B-R2#037u6e-baZFTl5p#+ddbb0u^6~kwiY`3>XvMM|YmsmlarX_8 z1GnznvAUP+7o@=FUz}4Pv{eJQg~|g-JSPWGnH+z|ym7;HlEU;bGSoR_H#w@M6^m$^ z{d`yRb!`vgq)>zStAJpSD0EOf9RZg|u80giWY4w~+`KyBzlDvxe;yw}zq1B#&Jg z9w`bqrt%ZM_T%E>bRoXV+Q>ZzFVUV^VdD7k$Wbx}9k!F1iL&EpOHo%5|lL&|+~%|dov@wA2<%oj2R zp^VH^*W)ct)n+4#(orXmI@=7Zzf%ZJE2RS~mbbFGXb=Qet#DucimHeN3AYV%2R7jaLu{OD_j*`ZSZZpjc2#rd&42Rr4|@&_q&&`a?N#<| zOq5o9%-AoTAoj#}JiBqzW+PQ~J&`R#5AWSU{=9-0N>NuI7FJh%N`3%$XFnC8P^32+_l^qYtxO@p z2-)GGOciD>B}h1>je}baGeyIjt{y`l8eso%lptLW+%DVe^Iv=U+keX$ zdUj*f=^qe`4QbH<)K-GA^i^2KeI zI&}=Y_vm522K6k)F3d0X%aCVnC;*IrN=&N;k3*S(k}iAS-9(Cqk%8Fvga$i&A98EJ z*zI{&qo0LkArV9%)=ByZETrwEvJ{Gak1KIk`ZkahtIYwC-WZaN4GlK#xooZn$2yy; zgG2Ep@)OYqlE2k^OFxEp`;XOtpH1u7u~qxzH_Z5I^RQNFGv4tc6vRY{FFC#MD4QK+ zRMix${>b$L_TJd~#dVd3C|o_Wv?6!Gj=YVZx6bQkLx0m#CiT zq0L^5rw}wtmM%p(LZd<1G`+R46NSi812V2q_9zq>Ick)Vq`IC#g9bDB`VZfauI^$l zCX8pR(&P5Lvk`m)-JHfls>cSB-PI)y1aLxXRoEansT&VCq%DDG#B>cN(Z1$|gzErq z&2g$arNiW#fn*cG_$bF)2o6AkBbpUz7siL#qc`(y*^o9XZ2M8ksXBE-eb2)>WWj7* zvu-iL!L-=BGP?9MGSz22MWwlO-tk}!>%I5e>%ab`@CpTDy`ZEtYr?X!JA_1(x`NFOKszS*<4pEVeqVOU@$&M4+DqIo>O^9J+NR- z&fOhz3c}($n6IZl7JqUB$-(dUIaePz zq4=GP#;HnnU5%<5N@|Tc1uS}jCHdp8zg2z(81Jy*!<}hu7(t~`V;w^rG#0njcjMVV z`{`%uGGs%X0%(YOY8sBy6Jm9&((!OYzwTGRd#0bFP8y~(>8Q?X@0Op`_jn9Y_ITq8 z9pJ8kb#t&U64KE)aFo~g9&P4Fv#2&;b`dHZkg~Zp_cfkE>F_-W4G0VnYWA#(WLN{6 zsh^JQoc0y9%|gv9=HTq;G=H~|-v+RUToS9Sz>K~l(Mmkrt7`AH&u%?Y*vPlvUmY=W zWJYD5g4M_Dr%Io@vqc+saal#h#Xu~AJ+gAuD&Q~NJ|Rkqd~*7n7+c zI??HiQ?1Sn>^gCdlU*15SL#CRt+>9QB!UAy+C&s5vlUQB%8Qh#s#n}7bL7veW=-qg-!)i&0L^1$>0a>;Zb#JVMBtSUYT z+;x@UCbBjp(WLSew-pRUW)>eqXc-l_)NLw_Mybh#(lIRm1*Jn-jHB5KAaPTs8pzIq z;*9B=L*i4c-se_X<;6R`bH%q^4KCjHO-8p`lO5$3gHqznR@U{vt^HSj`}hC-e;`V| zw|z%RSvm2&YV9h)<(2OGKDO7WH=4N!%EEjko}bQ^txAgMI35bfjF~g79+0jdUkMnG zx*6o5Jq1LtVjPQo@Ljri%9scD?wQ^TECSt=GCc%+LY&3b(@3fo8abzqk#blEY3l`! z!)Dod8SrrgFuTy^UN)yDm3PpUwL+32Pi-!#r&Dvfr4yxWBz{&*D9Fq<{~97gFe@v4 z(wY{n+gdFns%n@c2D>0PHXT;5_T$Xra=q-J;NZwPB|E+~y~MF|z~P%Wp8U&Cn2_4u zy?bZ+3}5FQuhI|LPt>swLq2`Z_7>sJ0W&HAN%x~Lu6{>m#}g+_GL{rEavs%_BEsU7 zWmI+RW}HX%SWy7!jNDhBpjE?Oe1OgV&4n+mZbAQ7m%g@|S=&FVv_m~HB9UpyJ|F-U zIcVfp+8*pV^#N(?tC`*>%Ucwy$nHeOD0wB?%_2tv?$Z%j30AvddF{0;(YEc2j`2R* zLu8mSB-ecjxn<3REmPeShR)YBRp9_CkqdL@Z_muh)h(KWAcY&xid=3oX8-Ng7ajsa zbp6Mh%dLOQ3!)-W)aKV|b zCX8U87vXZs+DzlY>~Htlo&`q6@qscR!J^b4P*=we?y-NGNS5w79YyXkuDo%w;hsUP zC;BR7*#CKk;}GGQjXMUUDSYD3w;#B&xo-D`J+R8U+LR;qW=u?smf_S#+n3jD6=Kw^ zS>lMr{xe>y8PI63Ch0bnQCgX|WWUuVj{QB}zx~DizZ5q|E^dzL>)nAm+R7AMA>nCx zB0qn1jFki-#o+ecyY{@=s;nW9DeC<84SeX1=v(${czw>^xqHu^n95nB_$W_~+_GxX z?@yoF(2Ck0>zB@S6w-e~Gp#xT*KYgIR2UH< zSXN~XNy!mU16i|noef))r&J0EdLw{DVrdh*2aZJRf4+OYoZt?%sG zvj_OBia(iob#gO+WpiCEgTeMn2S&wV`RyyxV(ece^a93v9EbVLm?6hZ*Ann_? zS2jC%@ZcLae^ObNX+xx}p*Wgin>KBTBsRT~?9@`=%L^B^PtB^WY9Fh*jpj;Qg zHCBUp^wE)RV#0$`BSZ4zd^HN2n)m==L&VLYuq+R7Ol~=6qm0MbL%Bm$bmG(T2C?q{ z;!!$qC)s$N2xeH+D|3FY4Ew@@!NI|%n6A%Ru753?cb?xu;>e|*Il1G7l$XlLdye3d z(W8Iix=$RhvKcV=*uB$NZ%>^%Eu*w+9X6xu5>z&mo1Vh#7LiqM#Wallu#x2COZ`vHitZJ5r}n#W%>t8uB=yyvlfCYbWf0CeuZjd_Z4AO1gkFB@VG}x_}j5K3u(F zQ(jR?_T)FcV>1dU9nbHM%Vyk?jLb|v>}|-XJB7LFi*uGSIfxaC)e^z0e^l1T_|Qe* zFIWbJuI}CURo|9>HWWB>_EX&>Gd&cKTQI#`uyagViVgGefaa~64Nlb~%>*r0{Q_4S zT9&1o;T1TfUe&;y=WxNEA=dpT1xm+AYo!A>2MCP>q$xL=Ue(F|(|^vOPC422Omo`dkVQzJN64b~eWMJbZWM2cLGWs>&QZxn!Gn!$ybk03jmHhsGBzOqM4fzxNs z3KFvchFOV^g}pK{jQit#Sl%~RYpBu53-wUPvi#?eO>G8Bu~+=3boe0F%R9KO%@n8| z0V75=FKLf%KX}P6r>nQN?C#Q4|s}T=Jm+G|-?DOOuc&kA4jQRA> zA61m71K-dwE9KD0vb5~$WpCr|0YOXIDP9HwoEpoggF-Q~(9+XUogPKaK^?WHbnR$w zGsViGcs&YpGIO7qc|@3s^BDZCHou7A=mY{&Jup?rOW^PsMWw7y1Zm1~wu%F{2dzJt zRoXRY-g^`iaU36z0i`>?%jiGOl*FB~^Mc(#V|DA^9a9ych;OY~gA!pnr&TAZBH*rQ z%cJ|^uEqY5v94p7@=!~G<0npv5wamhX~hS+2Dp3!v*Y}!nlZa)rU=Bkk7YF;q^*us z*2ke1s21$^MZGfW<1Qj|LT4+bgC|AqiRmOA<67Ile<%nAIhoyxvT|KR?pbjiU%!3r zY=GIbmVX!!POFGJ@;SBtsR*)ereh6AGH1T+Rk5f1UHS5 zxIQP&uo={R&);;;Rps=70|$u|tJU3+RFT=U=jbF3Um65>+rLrDS>Ow_ijS6a$~F}E z=)?&TGB(T@ReXR1-m_!d@g>Qg4OXiLl^_&MwG3^i4a+j+V=rB&7O1vcN+ias#@Yf( z$Ed>i@&8_Pr#e)FX%u#cF5bN%d zrcA{_>57AyL#7pPyJR ziDPe&)IRj(D^^NLVMT$XAAO{ym0+9r$&7Xp-8#kf&TL1Cz~tzbE$l&v#O57Un&QjF z$c&*rxY2@P%3F+`>xPz%DoxYM2-7w!YjmL{%Q8;;GWLKOr2s!tHkXc)rZ0o8R;h-@OEKw-O(Rj~p>2noVct_=ttQ_4wrUq(p`Y)HAo4_>IccD85c9 zBkry8>FNOmiw0HT{x)S(+D=E7Wy8&0ic@^alVr!1p(nNZmiDpZ&-J<^WENuDROuiJ z&e5wir$=Y|4-HX3(CHN(u@d_C!N^0FqbB!tX3Ug>G$CY{i+^l(8zLD$Mk741sD z7|pS`2V}?2omTwwHSho6!w+qKCdO0Q36ZPJj0~fT5@A+3F`=z&F(r%>YI{1i4V`RZ z{dQz=nv4BIYJFcyP2dL@Wl+85?`i5N0f}WjwnkgOPL0`okEVEOU zH-{p~8kP{4Ca6btLBh?NXD)Sy6QsHyakjpUJcC|f?7>rzGiPg{kfykGL%KQGj=7gS zD~qV(l5Jlb_p9wG-F1zsC|W*X-?qu_L28Hy4&^OD0TB$rqM+VuE+(wD@5*@9Dx}4d z7sDwPUPO$g8roDC7aA4T!u|!YI@>SDOSQo*6M9dtb*{ipmK<@ao}DQT$#p&7%a^`g z7t|E+vbk=TgwjFCoKfkZhkSp*6dqo-U?+vvl|5WUy5RD#H)}+9AED)bChh&V@O@`g z)fBEfWpdUaO$gBS46!aUe|?WJ^^%k5As!x_yY{pVe6fyQkb@QweY3c@xTK^+H@Vf} zg|9AIvC!AK|J3O-RunV#56(|AWh0nJ)X#ewNRYOnUL=Uya#0(GciA#$Tt$jQCLk;e zObl-ZG1L7v%}%^U1T`VY;oEAqU85|Ok|k()+E+qpgD|$pVD_|GA;pW0FQK-FcwG^R z;A)ILu0>E(JVm{27_u+mwyH0=6%Ce@XS104K7~&wd(tX3BmUV}Jpp4gH;dTow9CsJ zyIA{V?c4sVoP!1pA}9+_ik+INSpzFc0brO=+ro;AzPA0BzPYTD$i7jM5^ehPCs0buE9Q+GcK6P$NB8e; zm^soO;LdnE!CL2g7LM7pXhx~FIE5L?Ixy@60GqDas&mcY;y3%}S)FZ~{rDFMYU-8V zc3xwru7GOTv!gz|iW(x`g1*LCoeNA zJ7>lQ(=o4Dr_oEEQ9Bxcz1wZ}d;eyad0Uj4hIt!4YZelwd&E|U7#Q8wvd1j~Ko$lo z?JI$w%jy=o{%!AVe{IEt)yA)0yRM^>)uEb{q2;1P&Zx3uShu1}=f3#!k3Y`r-neE^ z5yN_P7A?`D+_Wa!LHpP|w&zFN*AMQJqu$iC0m~xg(3P8G{jl=@hSPUy(N3B<(=U zHcZ-fVC>`_1O*ptHn7M2w{sWl%q*$!O;=Eyzw)qK{`u04H}R5J^zyKA65+dT{8$%P zoG^Tm75_2z14L%>6s^0mv(0l#0Vgp|ZtNkE#EOf)w*5cdzHKCwu?OJXrDlAfcU@{; zkF3NG_G|}L;PRQHo5uD~*#(z`202&4Rd0u_TfJ7-SUaTT^zKco=TD>fl&Q#2S=LaO zEDJl>{$-PP%p9z{V-r8*Q@^@X6h57mwT-MUVZH2S@O1cszWm5-uXCC^yg61NSGidk zK$p0c9weAIv#r`}#MH$zp4oHYGj>(ct9a}AmrfSAU9jFuUQnDfbCY0Ji}qgK_FgMo zbHW&DMx=2_dxtDhm0jSr2#60|FolrYQOWnUl@z8MfAH`Z^>NrVVq1q9+3B>dsaTMx zC-~&?U(OTn00`by6pBY;^A&r@IRx z>4&dAUp#fJsk~4-$*rF5l4Wff-|O7ro#-99J2vq{!T?aOW_L?(^mPK9MNM1v5zruE z6Ti6?_K2$mCq+3RvKnGvLB7}I-faBOn3=Fejq!Hnv>Kq#-oidPHv>vPGghmzzdc&&ceerLc&GWzWw zhk6!`0JYJ}BY*K4!73zRXT7$P!gS+UoYZGw({75102~4N(Vt-*>Ot(l-oY9XNEn#F0Tq9QYr%|&FMU%YgVx*q+P@f9&>wa zs}_+lN-=R#!e1yCo15pW++_BR9l*}C8CydW(ye}*(cOm!@Lr}2#GX{iC{SKkEB4ayp7=d@|xxGC*d&r4{5Cuu_~^;ECSb}D11fylUY;?UNK z)!I(0HYO=`9{WaRdMuORzdpNX)7@J?%^o#KCoEn#RN_=!v8?`iN7l`|_5IiTmQJ)< zZPVaKo7Z@=W7YrMs`Utr%#twia!oeI~4WlV4gd zISLm=4;3+5e|J=8j_x_yX5-pZC?IKRX)in)mj^jHIcwLgi?*#Msort*TWd_e!(Y$N z%in&dQpTn+FfUQdA65^@*B;upXZPrAGqd(o*Ywy!tET;O|L%wTc2=c7uZZ`8)ToQm z#bxi7W$m0j^!C+nE}eXT{jf6o1vj;`$d1N$bM(ta{UHRmR1>;DHA;QEpacK~@g4I6>z%3k~lyWE$}4FYu(EgMb`Yd0l-pC_xq8 zsaX5#(6!Nt^45P^AGcQKeC{R3A~7iy0OmbGb2_is)e zAr)ock_rCoA|ThgPJTB-7z@ZsTurjLcNT$O>QlgSMad`7;9X53GFZfN)iEJ%exIEF zWnLT|NSm6{tS))aq=949O;lX`3xb2>xZyKB#2Ohnq)iX9qh)71JPo`a0DaiZ;MXaQ zmpr4#fWmd3_%)kX<%m!>QwDDA^cI4J(y?LV#=rjgS7D5TbytDOdidy9Q(pQSc5dIX z!}vIiJrgV3<=^QT1wf0&IgLHNyI0yEkkqlPL{}{9twDunc5V3c>F<|L9CY;2=++$Y z!zI<31co&Q1C*<+p*@ln(Wu zJ-ik7dciZBokN^zee+VE?8qoJ{yNm2dX*ijmz-ixJ~xMer@NjAQnc+ds-L=R`vwTf z>N6E-)YjHwc+oO^yueY>LSdr&_V3qT_&T>&y}8={xhQ7|pmN1?bc6diffp%viEY_J z{l3*T`nhLW@2{GH#_{OEy}gUa>DJT0hlsqX6{#RWHSm4?za5?qGC0&{L3(?A2Ysc* zIusTR4+$3G54tfG`I!^CWn-|?_B%q9yb#}2Sb{yLo>-+iZR5(0XSw9LdD#<}m+iT( zuBx#bF}*}RAbbXBpR7$ArDOeu4S)XqkCE+<8ZC4?iGQV%Zo$HZBI09#f3Q(xtc%;EZ5 z=}?QOlqa^DSk~dqdbXr3@0;TYbmP|0O&Z9!s_ce%;?gS z&+_`_qKzm!d|vW?V||UWVi}k%z!TBj@s|{4P=ONl)Jmskw|4SLEZ?1f+azAYY zb}@I}Jo{THXXE1I8LYkbwQUPJjQCyq!;$9p%n*4lG2t(0ALWUy-Lk9=BfBCp{{7$o z&^z`l8tc!R{l9i@k4}WMzKrEXuuYMJsYr0JM~3CKU)~@{jHAn(KQpY7&5gW*cr5%Q zbE|Wz3SUq9;5C?dC0yzQn_y;hwg zMvfFAm!B4UDookej8oPS9rjFo_*hmxEXxI45~T)DzWe6WCy)6sxOi+I$sPXlf6p^4 zsm=oY7Ov~cQ{(w|fxVEbD5VL{kYVZ)`RmKgVO(};s)O;FU$-DkVz1)Ng?(~Nl@5ia zkg#n3<^zERd~QQz1s=H5ShB;H1qtH1Cx~@LE@Uh|(6;MfaO`!&j4bc(r{GX77f(XB zc{lp>>GRFyE2fP7-h&6TXU|cKOo6Pc+lcAm)_2}Do$Yn&?ANcqDSdREuJZDXY=IsT z@GC`p^z~JRaOWlG)QIpdu&OhpQOWOYg_Opcn_GgIg3P(MUzh~QMDb?V#zDRMALpX{)YvuYEa zyY6g2xUqH;pO?Hx|E!U7JYbJ7PpA32Lz6763Q41uY47DvJ0#v&Csp{B5x^gq#JAS0 zF;zOKV7__F+Z4Cez8LmJidC*SblC9MO;VWdx2A7jl_oX~|HVgSxN{n5Vw(`RENkne zK0jPI%hpgjNF;AurDJCI4B%5Jp7qiy9lkR0WeKgo)N1&GQ**jI*Y0`2m#zKT*R``U zI_GtWEsPJ#?GQ&whvEG54#!l%(3Y)=Hu}M_g#(uO{~si4sJ>0OqWSB47js1LmxNiaF=7YtA_!W-+X~dUxM1 z?=uWG&4iwwIe`O=KknY1o}TWW>ONIdT~$v_6Oqyt8!#$s;u+P?dE7^2F&@`-3kPf6 zJ$S{31cW&$De2~|+j71KUUA~&$=KM~+70o$#EIXIY$Nh+n_x{+(lCb9Ah#6rn=?Km z<+n6HECK2}GfD@P6QchvAKdxRPr-xY!|Rs-Ka>yZu$rZ5LGVzD?9)kaQY44XkTDQE ziixFTw4YmkvNxl#J#OJ>6rO3x7U=;9*?y$ZqeqY5KlD2P58H-c|6W1v?E`yt^6~6n z=bq99_zdY&vEVj*hAu8gH-_n%Klv=|1&R|uWh>X7y(cXL2rb>Y^=0T9-c$4amujbL zR~!q0=NKiP>Uk`rK1IhBnJ2pvq1ia^3fp;)-Hg5q>EIHb-n@M$@lBg| z=+d^IFCyl=mh88=;J~;+YtH#E+9gLyr>DdyJ4|*!Eke#;vSgY*a%7)CuS`ftxN-BA zgwf&h{fCbW7cC-Y4$`@#z&Y08qetaKG_{)egakr)M!|Yuiunm%E=sva@m+zSLjJgt zviTEUJ$)c9)B9HyxHP~sZS;tLUTO$mb1uPVpnIJf#`gFp_zvJhR z6H(-6CqRpRv`}`jRlxb_AG`OUfdRb*V@+Vsj=mg9hxn}K$ra-A^rq?tU-ive$fXw4-fybGYXFltEHI6}*} z@7Ng<5<>T>R_?|JezkbX63Hk{@X}$n4{#?Wo*UB7#iebFPOV$Gwre@qt>fsx-uw|I zNHuux(ux07dtCqe-@jK5m)4`wQ9N;If@gOyt`Xkd8=}&I1ceD+?hziHkR;uD!HAnZc(^AbRXa^}gX@y{=}44)9R)(TsRQDhIs ztfaTfE2K4g26c?=fZ~Rvw`8SAVX(#fk7gR_!$b*!P#p;yKX>6mVqzlcO0xhBmk1+9 z0muH5ftuiDdU^(fMC2B-zZqZ=l1IR@@M8z&9(Pc|aoey~<=%F+RP%Oi#aztuMphp+bAKxK;Ws}#9}W@ac19kls| zCX>f0kY#)hA}0KolxsF_&nwkt~^4R3b@+&YuRobl0v=pT8hT5cnjL z4mB?`GBO}^fB>(!10|IoKYf<4)24PgW9Cc=O%yL@MOk&WpB+08mRY^=*E_S*k(-08 z$h()%OLE5%hU4JE@eNC0tgou78q&LdECp7+FCgD@N5|g3e&wioYDg=Gu;y_dyZNHU zi}UA9HKueBzM&Z{hzK|~w--X~=B%>>gm@*Uhi<#gZrsrCIzV{0wNi+ zH`2}n$ZVp>n&g$yF)`uc;nEJZu3;crQi4rc?&c4=6lj ziHt}351*MU^qSWh-8$zjyUUL9mx3Vn`;DG2E)-I$Ovno>c_60=a`no2xV#2STxZES zE)bSZ1Mn6WEthvIuPG@lZJJVpy!GleYvp8-*JK3uaSUTwIWp+X_LYEGCo_c7fsE&l z8C^2Ux=FD}m@69VF{KlmmP#5p|0Tf6HqW2&;OaTf)R6V{Mm$la_<_enDx8gTu!ou^ z2nvwzZAne9u?yvl3pF8|t^)i@=qNn4zEWT)PRve~_Ld!Ra<(MP;xCfN25(T!p9pjm z$zrKp@^1-6EUe=vRfBQp5%cEHCv2)|7I02T6GW|?=2s`%pq-eEkZSPtOR^Ax(y@R0 zs!_pq8jjH|21Pz}Vyu61^H1bnXS8?DTSa4I?_4_N3`w%s^npvBrm+%WL_tA8{A@w7 zC6D35d+8wwLk=%{=skI{x38bjXL@FM*&|7V#&>CN*%7dGKg>pT)+izlm267(omQ;I zpd|I2>1!jSqApy#L>LY!AfdUWL&eJxBSw-(nr7kTsnd#-kyIjIIhzAmd3S4O>a$yy z=_LS$RY}emE4wxFc$zDV>~7MO@7IPc2$QRDO~^sQQotpCbaZnEfXuR@Xguc6&xmX77*;WprrPe933baZ8x;oi0XB6_G zlWp+)&ee@m6Lj_942?Hujl8gHJqYUzli`^IQXw<;o_I?FXGHTK{<0>Xst_>vTP_5y zJV64Vk+ao#vS5%I+M{4s*%7q%yw{MSWWBsB-j*?QbY+ci(OCnNS==oM{Uf8u3!$N* zN3>$bc^tgm+}sJTXqtsjU%qPoa?zlFw+D1|&cL9-1$jPZH=_vcSE<=?(| zT9Tcv`K-+wte+Hn`|M$2tpD--JLa}L&EMt&*|kH6jH7E8LY1@YC^qjri6a@M0H1F4 zKTS9z;1hx;hi<=Z$;hhlBgNtPq=kl2KJ3Ba?boLrWd~x(=Wc+@0a-(@xYWSn(|X^f zGhg}-2DIk1>C@l7dr$Km#WLKtG#MlEo{OGZiaj)u%B~z5JuI65vxPa};_i($;U2pe zPkr zDFAs-lOc2sPw|;vXz{J_1@a1ugbt#Y#aYuHXFEK{IMxiI_N@J62i%*5;7al@EYg2b znE`Z{iKpHSiRXfNZQHgj8I2TRJKIyfmwY19%!e+2_*k_hKcDBE6Wi%|MFstA6D$V= z1Ze)O0EheG?W-Fn_FBUw#Ao3G^ziCA37sKI5anTg=X!hCUzqjbbxn*aru5H0|D4^i zYDGg+Ixu0lI@il_pI(B?+e4on8p}d(6*s3ml>=c5oCSbvYwq)Iy=t=4qED|8(-hrD z)!46<^^h6>Cl9HoKoa}O4*w;4EP=nlrhJh_y)b;&Q@yl`+*g@>y{(oKjI~zu}VtIaI}R-fbFcgThPD^{TMZh%N_3cp6yohRYYwg^Z+cH zUOQMlF74d{6+q5d>{=t{L#Jm_`RMMJnZxZmsM&cP3Z(htgb?S1p9rdRd$`?E{Jq11AtX+?q}dKWiu15x(oO_n0iQ99|=*hituRV3Ns) zE7RuYi~VS(7#24Y9Qnw&hzH!Xd5h*L)5S}FB0mUuic?OVIC+ZZAx*HnB)>rO$BPD& zBdox8O7lms^XHG!BgZ$-AMczyst!xBzrzypp_P z#IoJHCA~GZ%L9iF(PUREC;Rj=#!LWjSo!3>gsMM({sIc3gOv{CLqEBt2>H#|_#0k{*<^9KH8>;KVvEz5rD8&D-9} z)m?4*=z4^H6fIw_m@$fMJUH&ISh*7FiF_js95|5fO|86k-Fnhn(=0rG`b>>DbbVm& zu3XH4QXc?Ld+%aR)HY4q*Uuj9m@`suZ&tQP^qiOvoyqJ9H!p)WHmY$CBU?F`NV-fedsG zV?FD7${w-$WLnon(G?O4BSy3>iXGUa{PwS+iv+z8Wl|TJ<=za$eOtg+#yr z9^9VgP^E*;hfY>j2us{wKVgY9^$?JV;6BHje&{(ktSnJF@D+h)|`fTCH%@(1sINDK1MhRz{$bAZPl%T zerzr~fa_uzJyTeK$atjfFfb+Y5de!>VpGUM(tz!x&u)oRG}f{Dwqi2b%Ga;w&dnzM zvkRJ0LKtUuRu*9_O}3Deo6EBzGa@x$+vV6JB1v&fgqRM8eq#fBWL3_m5AP&vDgZFn z3l<7>riTccb0w>xg*iUR#bNTIcAzwWKuv!C_KhqAV)OfN80@lxVQ;zyY%5Q26@o`}z$V5Tw8s8T4Iv|7s32W$ILVl%`oebmWL8 zq0oSVd?mOu9ovI+PI3YYF&&OQCW3%~7p`O`IPJW3`XE?$EoY-xy2B~~3kd+m`hoLu z`1?wf4&gkaKc=jHr_z3m0z|0{TV&O2~P#lW3&xYAkUM_L~ z{P2$*KOPfP;|4|x2zD8v>zV_N8$VvcXPV$8qWF0Z`UZ5bfi9tcp3o`I?kJ`q)(HXO z5R3B}N7|<8eCT8vC?GblZ2km#+Kw;7K3;MEW_@7@JNkVEOGgo6I>c4@_Vo*J_!W1; z)FHMJAAUZTv60?|DK)26*XwA7AJF=gD{aVSzN!nI+ zz`6n85rmT?-xGrfnz#Iy9)MC-!^xR|?P6C*C9KKS(LhYbaqq#yvEyX0@NBVRu^>(1 z>NRVSwN`VWvExkf@qhS@_w3nAlU8k7HkbT7_b$uCCne3ONxAaLJ^GA-{G9DnfUzEK zRB~fIzCEB8)vwaAep1}+vq#|fRqy9!b|Su{TPPhb?$sn>gF<@qd2MD<^vJ+Uz#o5|W?*NdCC4IKftd;1KO$zp1pzjKK8zEk~0o%n6y%z7| z*)Rq?y&-F$bbSBkr^rK)4McOG?0NHOhSOxra3Rp76&i&1@3waAkZVVG(Gcr2(Oy2j z>qx}c>U`)o=?T=7|NZagsRMvXalFVNBOWN4^YP8A_mvg(n4+Cb#sLLd>G=5e^}&_d zJcCXM(?)B@#*;hl2K!p3$4bo{7;y=ubo`bc7S14IEA!9d``Ho^Cl2ZiR&txmj=<$d z;Z+kPBXdZ$x4`zGO@)eS& zn&xFiWhIaJK$~kf6u$NWa=vv|ik-Nzq+3AC!tqtnSdX>4bM7egBgrEUyTl>?jpKU} zT7s;*^=_ihH09Ry74e@SVT-=qbHP~x3=Lf_h55hmd80n{)a+&LV_>Vub=FFj~B!HanEOwaE z0nbl5A38mgFCRb1{X*q@#!fYGD>}Vx`PVO>VXVjD9{=aJo#x|+ZYiY$hnA(eV+{;C zjnDH6n=>-NdtRc{u}U0q#!zLYgD?=zy=^Jb5%LDNRUriuowGZ7SpCM5)4bY-_6{r0 z^f0TMxIz)Iz3d4+PtJ1Uffv``3Six5&Yt5DA8N)jvL#ShxMybVA z(-Dw}xxv^`wqT;JXB%i^qI3XA87U48XJ(ug#f425@7qVj9+8j>apfrys!9jp6;NJy z_O|D|?VQ{!aQP9$M3erV$4V~F-YtjJvSTMs z@GK=zM`~9`R*H&_K7a9|oSD3MSvhM~rr4Y(-T9?IRXLKp^Tu5Rlo+0MK^ue_{`m33 zVVRZW`OxWw`1+~p5TBJ+!g*|R2|%sK*Dqi`&fp=Og?*;O05M8NAab)|&$$uEJwL}J`TKI1%Aa&fj!Bs&mS2mq_t z6vKe+QF|*6KB=Q1Y}s=_lTEd3*-|DkYAfc=%lY`J4(v95zhD0TCdPV@c05t%kDffG zc~Mg?L#OE0y}Rbppg}}vuw&A>;!N!1=4Fz6==2&rxN>&ggcvzvaX^g#sCB3Wp^=ym z9F2A@n(Tl<>wO5Kbb#_GTR)%N_`y6|PJ(zKC>`MnCUWxImlT9N5gh;AN6wMU3sM8b zSMRAyYRw$gV|b-ZuqNP|bZ)DH^T>|ijh8LMCm0572SGB9RX+Rji~Qcd{QPg-%@6&i zt<+peoI6Q2fOr`m5pm*_G{F--{0<&E3^!fLBalIw1Ifh@nQap+%$PY-lVWH9@VV@` z!Pc`5b`J>I04}cDDj;pgk=1$Z9_(}%5bMX*FaA>XL73aW{~?F3m0#d?nx~Ds{jGEW zg=Y8SDYoi7KbZ@0H)23HGGbP|Pgqb*I&#TRo^i>8tI#=YxFQ>`hFITT8yqbT<4jg^ zaoWxzJIVz_dhcn=3Rsx+5IY!IM7{RjE^YZmZXE6;~cugl{b z7ZJ*>*^fOMz_fu3Q{rS0mWVVW_87(4`b38M7x!+!XZytFWwv#b;KIWF;}1U%A>GW< z;eKfmzVNhE{Jk?Ok@BM*2Vi@fK3;P15xD9k4Fg*U3y(sV*19e2 zo*KICwtzz}kycIABqY+^nq^RcGky>&Xk!ILB_BGy zD9>(P1}LIEI2gOnYCx^c@D>m!^XdItxLUCvX&iS&rQ_+%zqV%DF{r0|M{UO5r9(R( zkH*6C>7||P9J@MjqmY>ha7@6Gt;G-jJ+5FSFFd4|CEB~algN(n-OsE^m=e9O zvi$MizpCT4zy11e>)lVVo6AYpZjko(tr#T)cy=IPNzRwfUAQoG=+NKmsrvssp58d> zr@50^1_fY1=aIblp*3&TY<7&NP57i@K6H9HkT60}I@0`YGMtW1kT;|_7xJQJGEh3s z91`;!>FC7aNa;41TeYPF8NT)vX4;@PCItp`@2L4biQGM^KXs)Wz{1K+suNup?aAd9 zGH8C8-=bY!VG3zXoy|%vvQ{UN9dbUet0v?4>qnmiD>=l+>6hOU4=4x@vBQ>KHP#U} z3+#xDF=L)ryrg-^{fCdnPne*zSrqC#JUle_96DkoAZPKYze9!GNxdB|4ySY3{d&kZaTIu-ku?pZ+YGw|l^|rXV zxoPf}Lr0|c6v8W-asdhm5brgqCpH-A?*UsX5KHt%?Lpiq=0m3`kMkmgaywq>SU)ND zc3nU%Ag*erj`OxW^Afz2Zd5+_p)dwuqfLd#4 zKrKX7JKzAv!LO+}9F&erd$%|^H6&(|;;Wr&2Aj>@-CgZh52Fao9KhODd@odDS<8wS z^N0_elGO$*JEfIe6hMtYcFa2e{_Xc)@XpLS}h+sO=@^v zIXGj8I7xy%LMC(n@)^BamE?UJ#$}p6M5F+*uJi2CCU1u%GGs3?3N9`#ia+_NK=14X z*7gIc|JtQ_fqp(bfnb<`Xn3^*hXG@jFfOMmG<4Y!x%cJv`(F^vaq0DswRt_=XhZ^fbOyeLT2guG+garh1&z?OHgg9x)#C_yW)6 z$4Y^|7UZHO);Ia0zz=-?ss*EyVnn9Vv7@$)9-A5G-p+%#E*D!3U3QE-_6DIG2q&L@ zO4U9te`~R(-JoDLS4Y;=qUFo|{J5ZOXi@;07f-3+M^z?U+*@Zq7>hjh$GVa z2Mi+ed-wIWqz~~~s+97BPzmmQ%QMFYq3Q2`J$m%e8br9?X@IZhA-o!Yvv++%mmQ1# zs;d0^e=D!OH-O>`uV4h`uvZXE{Cl-^{D0p31rHxT0Tz~MUgv>oU$b@{&AZI9A_X{M zc(JAsG{bxpBnTrPIz8g+XOFgLjU>N)2NVQAtu2KBKcS}qD3T_kbU1**oI?QXzE3Z0 zM;Gj|!Gi~bDI|n?FC4}?t%6M4o;!X7PPOW?5YC)~E!uTNb|iZX0t5Yrl|AX;6~^G7 z?jy1cbnBQ$;t#z7@W|n3-{Sbp9P(KW&e_3uckx!wo;~ZXxyDsYOzf#MXCzUCJlSC` zD`g3xIf+>Y1(5kSC@4sC)kuS&J}%3C+dOF|fEiX+Fe#0Yzi+k|p~O z97M(_$xhMq+69(7Nr|q=)67ajf!A-|_R?B7dRM!&Z#^^4n~@Kl^o+v0if0I~U^4{y zT|}1{7B}!OdU*9bJqMJlQQzmu2Qq8yM*(PmNNX!X78e#Rr?-$=8KHmd`K%fpI(i5z zIvox(YMs;du5sfe?5ln+16H2w;L19Ab6VLExvw(&(uWzRRYN&62@6fod(uL1cumt4 z7FQw&)GiTtzGG*JS`=aD&YkJaATNi6hDsQSdC8!_tvh!CVksx1S`7?OW5%dySad zfob%2TG@dEtBI%H!p}kmy6r9g`o8rW#i8r0+ksfW@rXU<&Y8T9e-A(fIs z+qN1O7D>icnwgkoMG7FV7U!26`ANc067v1-{Th5)x?5!BgSQWZ6)4__g>9$UAF^`JAI^E8fmLURQE3;_^>&1=`f$qN!KWZN(bty(k( z_@SH*aK0KF>8;8RDDHq1*o^+^TZmATvpB%XIxM>faJRf?6nXjjcj(MQ>vCGz0qR-l zfe=u1*z0#L;8CMT)2kyd^PF7aoGL484m*kv_BDCul9~gD4$<7qEb~y{^qI4IB?!ol zWd$_lx${CwKKubp;OY_Gslbs?1Az&~q6kapkFR{9Ai{tNziwizoEMoj_M-sIVU>^W ziaP-ZhQ~J+5R{uvZCgoxq>7iB(NdVT1;c!!0u(GAl+dVCY~8xGV$YIF$@vwsbq6j# z>LA&Hd>PfaTVQ4FySYmyMqje?Tgk;=L#ct>@tL{Y%OWf*;`m_Q*7V_N-@bjFWv+Vx zT_YtWMQ-M(+e*07^sj&t^s(v_55qLuNGO14bj^c7dVAAl1lsJ~RjNA`c$)wIqS^3< zB7BCQxm5#doj^t>$y-#XnwrnwkJ-|C3SjvFq9sD{|NQyu%HdLp!?4Aj>vWX%?t{`X zG1|wEN9&;21d>6}+fuFEqFtxZ(#Hb7EwAujvL|5KLC5gkpta|{5=LXbUOv9 zhvPNRoE?stl7mMHD|rBPN^!+z&&~p3)tB%8bYz--KqUq!0m49#XOP+gtfHoOH-LO4 z{KUNEr@)p-^osW9N#W++NYcy2UDcqqTJD(KCI1Xz4=-Ov&*>2+}hw8f%9m zroH?2W6x|pecfk%DSM@0Y!#il)fSzU~@0F9Eppp3f+5ex6% zZRv2P>;CvCxaAyOyFkuoG;5%(RK0s6f1P?vHKjS{M%zHNbbJ@&_=ndo_Z7}od(-KW z0~mXT+-l#tCBh7+$NC}ar@H2}fVAu8=C`oK5iE4i3!m9*ECJQx5XRlf zix3{@wPb%s|CrW2`m}QG)uy)>%5G`1E%^tm$*JLpchTb*Aej$R+ydMf%L>SmH*epa zzxO0|!&$U(jh{d^fMTI**RFaugJOHQc552wPn|v^=PhQ9E(!pZ7Z}Kzq*h#Ov9ec} zb_)|Na%Lie7G6G7B01cUx0Kfa?yuthO~n_%NALQ{L*hs@9 zOiZL#UtWfV1<48(IgDAUmjY+bp3@Z)B3X`Z9opn4*NFn#Uzqjy`bFLLkyJl;-XfbS zoPp)90Hx#Ty2bWml4j2e6sXQNg~LOv$jws+IJ4aHl4P>hWDXO?W;}X$A0TFA zZvf8?kzbPCsCd~mYP6i!*{UXF<7I$r)y_X{a_G)`w(7hA^@9|*UNOT#hcRQvK6?6m z!QKnuCHKkv2h7=`xHP1aKis31)UuM8nh+VFNVkfGw6qaq7nud?De(F0-^*6L z#mBd1-hKhTIh(ERx%_2#*&}N^vEt~-*w6t>_gex&MDAU3?&gp!S0w#(^ox=#isX{c zY_7Zyv})m$grjRU$#IR zTZGV2(Tf{#Oq^rk;9bJdtht2c!gt3&&cN=u>P-R%~{ccaKo<6&!WB`)b7BcckQ}$$SMUM^5ySu z?0`W8vY9Tsip~X*31-W7HZRecI)!SDG7Snm)YJL z3T&F1@chnI$c_uUHyDF|ha+yMwk;*wL-CRUtP04I%<&`lugp{P^e&q};p3;zfLCSn z3Nmit9ZDqb^g>j}h2Dn9EHqmgyU8r35qA>r2TJA{YqJ8*z3x?&+ZCWbUN3-+J@ zGH~rIDe2CKj4iGa;tCOT%+I)BQonX|H-Huu=l}iN-zPQ}=oLo%qnj-iC;<1WjRjEm z?p`l- z&j6cASma1ul&YVL<^+jl7P9JA846o5g5KUpER!3aMO z#_yfn0>~cpl)pc#hJ51d7vI37eFG{$CK~%|gs{F0c0u17 zG-wdbjUxhlmQG27*@ZC&8EhVOdpJ*~jvTQ`Bx$Z0Tt zaQ2|s3?>77y(26|@vbvh`p(_p>mQIdGk3^_3+#EirOu*PTwXS&dPGG>U%XVC8xEO1 zCQh0JF~m+riLGLuT-jDkuzQ<6Lp!sixFv%7x-fqA;;r3_r@VRoL~TTznc&pDAu1g> zjW5j^W57#UlVT2N0PE8G$`?n08)l;{w}=L6)j~UU6t)dHzd``Ww8YR2TAvMb5`2Sy zTdIlN(fr^fEUQacGMm@Q?*e(lZ~jh8=nyiTQ1B1*%iAt*%wH3{;ZIBQSW9|lSVM~( z3@>|P89mc4B08*Kk0u-z;v$>3X8{oyvwF;(n~kGOk&Qqc6f9jTVkc^1l_2}M8uKyh z?Lh&=h724yko*7{1!PNS@H%`_KDct0F+-T$*`J+^&g=7*kYRi_#A1EUf%{lVGD-Ne z0rwsV#t?s!TUK6r@u8Q1d%(<*8tz>T?U+v?L-aSnE>L@HH;)i+T16vWZoK6}JYB7015AD%sfHsiwwXs*t@MBgx_ z)KP?Q@GBr~`dD~UtcGm64b=cvaWaHZ@b;IEav5rV^#lmQHLex~gtE&Z32 zgC;Nlan2`b^Nr@rytIH8sY70^i^)@_yng#u9J@Zqoyub^x6u2G{HpAcXdIM$F5S?v;G?7MdF z0nj%%$+H&~GiJ_|x75r|YbN+$@L{{&>esIyV<(VXx$%PuD}WKUHkXi+!ia1U0Kri6 z%q0CdTR{YJym#?95|=o`+>mukNY2Y`w%EIL*5Tq@_DPXV-pkKJ<0L`cHjpv}bx{k* z=(&l$5!@*5*rMP_WGgZXNQ15xMd-hHk5{;W^(Xn~HF7%VagCh83jSKDlZ6f=6N1-i z7@Fme*Lw}{MuOH|&kPYUPy)44Goj`(r!sriDx77oEC=HfW7|E%4~izLUuSfuNE+MJM(3a>g!s^ z>0;q9-w}*fr#=$!q9{kS*5@a8w*m`Q~l6 zgb4X5yn@56%`;M7;kTq5c6G8>LJ-7ikCQY0@MkHhSD(!siTaDjv8Kqd_#&u$Sa$* zZtJ)Dg72KQ0BfQdQBB#~$7gz>-V+;0Z17A#!a{{%vnKPd{V0IX0J8dw z0)j-;<^ZMReAzk&9J$+&0RqSo))@q1Ke_oQ{~3`DCm`tx8U!%#&y}ocC}hlw_iD~( zk3a&c#Yi0$qRl9j*#}kIp+g787Nu{s>(qsMuC|C&M-Tx9zS~3LuQhsRjlULRLvpql z=!851#m6#w76SAn=WL{bu7WX9sA~wZF*~n^8q@%xKH>o{T)YGqsjb_#2L%O@dPYIh zXbucsHNIrlJAeZC65u%&h>VI-oD6K}2A~ur%+tY_I2}T2Bt*wMgL{>LNW5d!v)fl1 z92q@(bfh`9S{Vw6We~3)4ug~67W{d5_Nq7&g%m}GLiwuwwU%4_0>rsl85xmHL z9-9&b1VyVg0vP?_Go}VeWqtp24?ac58R&>u7dB3&7!P>v!Udj$=42bNjpn#p_4$h; zUotBlMge#Co@&2+QV*Cc$$Wrn1^o7g^0h2VC>*ar-N1`DiPEtrfBNfZk1ikF$xhYe zVDZX19KQiwfs+#kAu9kITvk_G(X*%aUL~6rjm0Ou14H~4meS0St6culfAMa(_0|k8 zoO&%a92){f1D1L(1i4#nYRBZOL*{qD3S$%fMUxs~rH@;?vHT?%_$0_glVM;V#>B*Go`-8@yC$Qt4`|egtQM@ea35Onk6_aVA%muX}AE5!!mq4OecnW(EDK5 z$dQDq@`8(t3n7%GfV8#%ttu=k60t`lciES)q{zo2HL!_PzIyF=ZfTAvp}>TR6Um}5 z3V&U>iU+}g;exedL?F#cc*^yqr(j&bZHYjR53io9clRm?va3gS!H4bQo=pbG$U|y} zwMp^i1;u3>RRK>iYSbveRF;$i|2YY~PxdEr@I$C?Ig)mop4} zl;Q(*jH6eN;)vM-Sks(EWwRQ6V_T1lXlMbhD%YG+9)5_S+u z@)r;ivaGNWUle5X$P35?^Xm1Rdf}Glpb`oIZA`vE@|w}ZhOQhHq>DQt{0*r{jfJy8 z;uNQc>Kcx244`r$!m&Ci{>hC?_3mCJhU&w|P_T69BqRM^&Q^~1(s0Ws8%eH!j2$-) z-kX4};O8x*r7j}~BHc7?7C2V&iWo}z7YYJ^l|Iddu;QT`&RW7_gia#ktqn+r31(3l z5^z9v_$}H+hHyXup1N(is-7T0g3F^k!2GeMfLIsaUH`wNq$C*G{r&yfp9izEvLsB* zysR$@aQg1{>e5aZ?$9BUAsq=~{xBo_)@!iKAbbq8;} z3{wK>RwzJUn7ziBzL2{AY4E7unWx6h0}8q|e7+VL7-DGSWox?9`)pX*lMZekG!5x8 z*gHVf>k!Rifom>434DEJ$orCZN|(?>6B85B18%ad9yl(0{iX(AvA%ewIWD2V_kVt} z0WHOC)1rAZz~!m25xO4XZwSOQkRt;k1Her%E7QH{D5v=YY?c5y0!H4!;n5!;w3`86DGb9Xej( zr&JBGz5s_ywVfiCJTd_|CwiGJ+9w@;J!aLe8lwqd+n1CZ=!851Ly7;y9B&_i6$6+H zX|2dDs|w{6z)0cgp=)Roy>@gNUjlMGc4(2D(Hu0jNf{c4SjK4>n;k7)q7lMOIGb5; z3>Hz5X545jnOOX_(p_Z4OyS~<_KH5r3eJ`s=*@K^sz2L#!g z1)o2@!(`r8JT1vi=b=CYZ36|QZ7VJd2-r?)@W2pjg3k%NsV=~t!jH#`UF{N`UZaDQ zS0Dws7a-Q@fAIR6w7>v>70euYCmuy74zKAfDFZfc9u}?G2Ip-4bJnJ1jDs(MU^khw zPO+JRN;qrzE!ZiMp^E+V8oN-931AUDJUnQ!*|zNJ>Z&$0>JdTk*2 zl7+xbRuc!^YAg?Gj-)3&6<;6 zJzaq8Akj2Z0@~sl$D3@chndivlchVdS<&(p^d?a&4|eOM$no|r%e;N&(AG>nU`^Fd zM9@}Xr#QNHAwMiRJpmkc!Tl9UsYF`UyV8O5Qg_ZB6_Xddd-)t$Zt2-J;_|^Yi`eJY z^p5J?ySFVkO>G~DMrS9&rbkB^M_v+NQ{b)xUr~*ns?}$lc(eQJ6O!A=D+kEY6SFyT;<4wt8(U)jq zB3wCAE^v-@=Il9onbgYdTep<(K;Zk`yL3Vb#M9|yTMgDxeDmaf!{!M6FA zr2{I)`O>xDzX@vfumAlE_o}9#bYL^UK@QP0c zSdU~?9hqL8%-zo)N)0`KwQ`@yMMw^(NIFGZx%CT2_kbgGXg7+ZqY}4}h>(+^navzY z0URfC{`%&`4iY7Z82$#?fed#NnWA|KZ3QS#z@E}2vI0K3iqmdl8Kjta<6jc^RL-@c??Eu#>)G0d;xK@iPY*k!bbv*@)O zH*qE}8HjO-4c|XJE@bmnHD0P%AGxn``Sq$>PbxBgBaI8OAx8aaAtU_fZCbpd_|LyC zi&_kN<7D-U(<7CE00)js73dZa9Jt~*sb>^=Ph6%ZJ6g8uAotN_FN)r~&<7FC!C0^H z6DE+KyjgHI3ILjhv3BGZ%pYR-8)Dz~7iQ^YiO^OMg>n6O`I<4|dY?sm0b>2kA@Oub zBw+n29f)dqen$w##~+lAD~C%B`x_geMm;_P-3qbu#NH%Q;N+>(WS_7L_>z>fBlvAH z(gvxqBe3z?ckYT4cwSKfZ&LQq^j%~p95i1C7S_yj?;d>oxu<+DWSlr3Afgx!01qfS zoRKyE!K26P*KeqCc8wmUSDeYkfe@KKdX@+djEp2)Q77dU-G@!1DMOc$MBY;o`d)2G z4AryqdLUoe+jp$g*y08-|65-afIA$$XVl6Adv!-vJ_Gz8+RC+~yC8Io`DMW(f39RT zAl3R0K&q0Nosdtn?G=K~1eviTG0k)JzqXb4Tju#kli3tzu{KD}+Zr&}krog=A- z4V@Su5G;nYLF6Eall>q@;KR(K zPn$lyW_n0&KBGu2mPF3g=^Dt0$Z2_J&z}b#)QAxyYC24xZ6$VY4LC4K<{loyBa9G| z-_butjYM6CjPOd&;#?8K%``3M06&rJH}le|C;;_YZ41%$I0D@`dz3C_1=J}RN8rVJ zseH2mzbuTkzes>sr^!{1N(Wqv;bR7FDb5G%3u3W}C>^kHK}LunnPfR2Lm^28T$)tB zc|!-cP(Qw=HxkPD;0zBB&&ryk7u^Da1}J=r4xHC-+yo@Ju6Pj41YzkxTa;lH;|{*s z@!;#XU;hC%7PA#Oq=2AkC~pX|+y=}lT(@!4w;%tMmhGwucJTFs7cnhgbe9pCzNAhv zcdw`<9*C`=%{SWgR*|;NTezppuq5k)$u%ZH*y|M?6C?RZAbZa&I0*&d(!gFs^4lL3 zAWdM+kS4npO@8zIF%qB~%V&Y7p53}klc;``4xIMCt9VA{1Cs}W>lv@#m~H_LK!m#| zua5%G?x2j&ugM=p2PwciJl3hNq#|r*c%iOT`}p{+bue|c;?oD zw;HmyGXHYboA19qfBBk|lUvIeN6$pOpUiQ9LvB%-PwZV^{LKrVA}QyY@*OZ>bJitbK9&l;F)p4=pK!Dd9|#UTCxI zoD@h*Op>gf;-z=b&NRDFD{q>X2ps{(O((Y$@@MWQy#Xof`msHT*QRMzk4nep8N(i3 zyFey`&mm0D8dNUwrVXM11rT75X2=!DOJeDceN`*!P~3bH5JQM$rF($dndUb{}u zft0UYy(Z5?)T0MiM%~&eHEZS?Hx6JO;K`HEyu0)MC;I>E@)f|yi;NTaheFsLhx@Cf z4Z=54XXMW*{jxW+JfxfnDc>yheASrL%|1y1}rlY;Vz1# zfTjDT;K0=r^`5kl?E?U%!)-)XvsSI?Hznn^F5L%mWc6ZGTi0CxXE6djTwGnvgi!Qu zcm6VdtzGT;h$PB$=hlgyrp|8W=$7LY^ z2TmSGx}pm{vsSYE9F$kus+)3L3^IDS_4FW)aCEo!E5qB00gVW;a_Gnrdd1DM^HYEm zy`*`wKNcl=6Q+l38bWf7fB*aNy3)X@4q`wAi1nYsQ8WElUrNV@$#p=qgem>|->p*z zjK!)DDm9=2DDeF5HL@1)ngar)USNT&*g>sYC_^X7zf2@a>)^_J@sg00Uhxm^ReGJZ zzy=Z3$i~Ew&k8jyyLRtAX_@AU5MkXxYtJW6&%JT;mN@fcCr%K5ErAt}%?{u7j5Ovi zROdikplr+b_VLTv!srSqpE?D_E502nJ9c#?K>GF*7LuMJs<7f}Q$oF&(L-_PJ9#CX z92n{(z1&IOJ;4ug0DfWDdZbLY3UhNt+x><{sij;5Fu7kZXtjIJa1vWw&&Oorx ziW|VJbaDy=hlD6@Hc6#h=XQryW`BGuWUGJm^uf-#qxEta`RR~Infg*XBp_PCWN;97 z=Fplk5qe*(fwqTw1=9xEpU85BTvx{4<>1O}AXu(lw_dVs*q0+ljs({w6Oa^c-ntE~ zM8b$PFJb#$xMTe|k?`8Y=hN-Sfh4&f3D&>pp+|TO0); zfkPrAYv&do%N70o`;dx=l7ONkh~TL0r)~+JU}!)Z(}loI*Ii=AstJx3ZQAv4bFbT( zlvpb6s7^sWMD4Y(7O2?-vV+MC! zqstpZ_Ep@k1_R?ia0^>b2`M8z+G0}A!<&YK7%6^wV5#Lo3&~05|iP(>Ws*){R{R@ zoVVzCMNL>Mto(WN7tk~GN}0$Lg+Vial;P#&mG(PpA>G~YGV~GTB9uIZOP}Q@x`d~y z365qhTe)_3Q_MU6yJP$QKilL1d((-Nrxe%AtZWbzfVTq{k@52(x5kW2LvV*KCZl*d zB$5T+x{i0R!icv{9|T;LWNGjbZXjEtE>bv8V@Q7-*@*xw@RvTZu>gmP#->Nhpz~)= zk*&gC=-IQE#NP&xRtA&~1Z%+Vz;^qDrV|?*%Z@uxoq4ln?fd&7Z^-GhXUXOPbOQ+z z5x6j1wqVgNe<^43j2a;K!lxGra~XVG0JGY7h3+I|=l$Lj3R=6X=6!44roF32Uqu%M z#y~c|#Wr~qEL}#3X%-qN1>kP2`m3RCv}(}|ndbQU3~+I2h;>37uq?+b9Rgzf&SDxw zOPmk9j*<6}|D_swOMCzT69Dgy2u+|M8Wx(sa=Em3iztJjlLDY7q(5>WU`UMd&Qz zDG-#7RmH`~f~|{*At(=7Gemb;vd82FuzH|jpl5uF!^4W<1tgiC>2fv1`VLD-gy#DKZc%(NWXHX}(~3L#MMJHSOpIJ2w7i?AUp;CZ zTDFBx_viI19xWPSm_@@M7oqpwdQ92+X-oH}t2!;QcVgAWO z2WM-8@XYVugyVVycmfRB@bnOpFZgU%TZ``fc@nXr1<5{bT5{>IiW@8;A@SDjJ0uem z;XmvGxc9tyIj`Tor8k(o49T*ru&@rRuNEQ*U^J+SRKEjsb_AH96MzYO4NVKxnXfho z5bLoi>=zX84i1m?U2)1|d_JJM)DEdcsCGl&f|fIrW8aVNh8DS7Wt z;gA^#N|1iVn%N%TSOC{MbOk78f&ezsUpd5p!9XOp@TIDYM~xgg5)Qp&cc~Tb+`B() zm@HE*H4wtuyHZ#^tH{Yt`x75f_LMWY7@Y<{jnRptg2qeM6x@VbOBNa?`g)_<1NY zpK6HpHS*ITkphlaI>0aijVl4s5+{RH=^|jP;)^uCO5j++8yQP;cE>6l;u(IywG*O6 z958?k9N(~nwwS;%kKQE4%A67effYcnRfII5e{T3F0`51QLV4IFGzb@W57-Ng&0O+S zOP3xUEa9$0$9s%h+;8R@MDTepI~uV5a`4t$UXvFO_7P5&#D7Se2r&V6>hA82P)E2S z!OfWWV6Axz=p%int@6v?%kbCYd41cq0WlfoRID=aF6fmq%MG0ZZ{L65{08gZu}zT- zheQssP6*<7r9(uFM=S}M11Wr|`gm}~T*Lgc!956Jf$$v2P((pm>8P-G=`2VMgr#3T zR3h1xfP zmf?5jeGpQ^65eOZ@{sL!HT|^|U(>FY>`e6VwYz+^Hb7OraAr*drNG#6<2g6*gs{GZ zk;);~>DPbo*J*sRlEw}wh=}p@97q|bHx8bR1KyW01P<;Hq4VP2jh%D#Wo(i33HLc9 z_&`w1;~N*Z%uJTt#bv*49XNLmPct!`P|o6J&B}c7vXZQ(S^?JBUAy zfDhEO=cG7AYU^m$H!KQVxptj%tGjh-3k5_GVx7FQ);w> z?0Wa|x%D1y@Pa@;_*09-pB3$?xor?q$KWdR$0a(*@ZrOOqfRfVS{Y{a$x~R-6AXrl z1c_aW=|5lq&b2TH*fo4+t_WIp0nr~m znZ-Q*T8x*q$1TVX#t8-#Iuq53-d&BajGsB@PS2Y%`tRQf_~dkOu+jmLjX(EoqaoJm zDb-h0yMyHg84em2j5`;1Z`2DZLwXPkB8Vc6`_61%2{&EIU2DJwoDpq|9`Q9n;Z2wq1Y!Ha+^ZZrcv>1@8+ZGX9}}OZmH&=yB*8M^?`-$sK3?oB_8BEdA|SBQ?A7(o#LZBtL$tNfVC+ zDlIG1B|*~DGrs>LMP`;P^rb)l65|2&@<|{ZBBPU}H`Gj+I8kp`Li^w_OWI`bjM<90 zIe0pR<0#mH%5!06A@zn$6umV}{qK;?uLNkU}vvawPC!MU8`qkE4YurP{rz!8Um zV|Kyw(-2$+z+La0m!39|6~U<*7^x=fYfKHGBa~#P8zUx72Y5UGxqln5G3iRR^314# znn?ziuUJXeMJ((oFV}U71xQb|7y-ls7A##Vi3j9il1PIKE-jfDl#YG-4+IB0C~d1` zp5w-k2U-_0+Zr?aOL}wICEHdGZEOF*gAzKMmyMeOoERpMG9qM+5s#)ce*_pBIGkTK zDj10I-@ny}E%`z`zJ8G>JDwU#Y>@S7{tVj${~IAW6mm!MFG_D0jVK9s_nwN8#ju0u zvZUi|1epaSYi$e~ODzp9yseO|%3)lW9tbd8Cr+NU#^_J?=EyP(`VbImUz;!wnQ(}b zP1_VM;pL*XB_#Fj+P2+1Uw1w}xJbd>*TAPTqDu%!tb8F576*4Der{>DBosiT%(mHS zx-2H+Li=sslHB3c)azAypgJt6fCq5yjh;~dhpTeqt+{Z4H&nDvc}0>B`Wa|6Yi0o^+i zE~Ht2F#^EgY-_AyC)=||(CP5x)CPzXav&-`+kh&eTh+^K^^RMZqMe!+#~N&pDSV|M zy|v<|Qmn)Q`}Q3>5Dz$N)F{0S7T&y%pFWds8({EeWzEsso7f(T41|th@iAlOOxRg~ z_ioJSZ*0!CdJ5hG4A}w15;Lw`zS){i&AkT?`46Zwg8OJPJ%m5+E1Zq==$b7h4aDdY z5!qFd{*6QFfJnvnzg{*jp_Rifk$O^*!;?zHES$e^QE|QKN-!CG#FD3Y3UF%G#RC%) z6VG2%o(cR6qoSjA^(Hoka}=!G5FZAf#Uli*i+}(d>!-e+8Z>w?e96=nD=0V^e%kaZ zo8=}*fvh=m)OLuZzGIt~Y#?{wT>$Hq|4?0IgE-GWy=^(kqpG+BfI~zsDu=O6dkh4u zFc7C~{sen;ZjV0m;s~fD#J|gL@zfBsE*x0FVc4+d!ZVgV+8_lmUV*VX=^0}*k@Mwyz^rL} z6o9`a4lo&8g}xQi&sC9A;forXi3CfB3?_?RgZKqRIy0yWrQ`U9e0C@7yUy^bf1qd% zl5SXuM#X+jo8KMe){$O%c^OAiYQ9p63kvf(9CYRVFlwM0Gtzb=V+f>!S{hu#j=qqI ztJkbCrgYF~U4W)fNJy{;d$(VoAZhlz9H?DtivoQFu&aveYgRT*3gF{SZMR735j!>` zav;sAa2j)I-`1n+7V9;UBbNlcr`QC4cKZr)OwhyWD&s&5W@5c5cXbV+*%*Qq=(Q&{ zFVk%4R1L<2uzAksX2+#HoC8Z)>LUgiX2#YpcdMqU_wEt$gX}n#iaq3Hk^B&j;>UU_^9p znq}D20VE=FPB8fsr&JSXBhX{$(4l&HEWWn^dxao$9NOr87VT-YE*N@7j2K~{lX`qa zAnD1IOP3WgBs&zVr_Wgj1^gSpY}v>t0Pj1-&XN4OeS3A;lRq80gBrY^8XrUaAo525 z51dUsIA3j=YFz2qvt$~kXIS*8O`gAA6s$m!zkF~fOdk9XI!Vj;Fh9wPOD@68A3lD< zUPSg?Fe1dwNxEfU!c32pPryKcK|!%|)Wc<0uhN0`xw(0WE`f`b0R~Q^bwQpYxoyLW z2NdNd{M^_u6jP^7QzN_LT9}nhjRJY|=d*vm^xY*{Q}vq2k+BZA;%urSz1_(zg@!pl z@Hb9xTT#DC2ZYzVif5lbyxYBaij#-~{%PQ#uPAR8z0itfo1A{b*gZQd3qnD02(?Nu zXCxMs?;?Qcva<~;iiY&`bXX`5gl-@l0|6;Zmn|buE%468;g8}d&RHqS%{On~0c?bU zR}VcA00MG?n>8i{XbRx#0%5;uKU+yX5?<%VdvWq5I87l_HWEqD!^z9YSb<1G&ORm0 z1QSg8rut101#6C&q))&E8y6{=q4Qq~NG2x_0=-JI){;wnrfOyYlrOGY4I zqTer!DTX<=^|tjjW5RJx1#8atZ+{=e&#jP;V=q!=jnHE015FZARui#8YTVCMzW!TiNYudJI zEXqxsv%v`N=H{+OZJbX+$F$*hg61|b8#Dq6`x&})Jrvjuc5(!7#O0|hvDRX!1{IS7`Ak_A1; zKqvM7$k`pMe*N!X1dnU_PQX;5xu(`M0A6C;(4mqIrg;gWhT|{I0K?SO)GJr7;d9!6 zbsN8k1q&CxdtdAF0SxMeixwH<@CeES3YM{F4L=1H333w$eJfV3LPkY3s&?ws3C;DIK>-})|o>*+wbMW+lmRbNmptG(eL-=fN44K?e$~6z=S$Zb`_zYp9j;l{Acs_2b2hk@r0l1_%NmRme*P}-d5@QIFSG0Wj zr_Wyi>Ihh1aBp4wIVL9d*zx1^w-CI=kXshYh^~Ib#(1Ob?0I?tgbfTt9)VM_C^sSg z;u8|oh=zKIl~bqBSh;HE<0b_N1*S}$%Ghs`Tm5@>uYAT82mr0Y*pU(ZeqTR(gpd$p zh7yPygnmQr7(VO*D~2_v>irv$L;&eJyefympPl&@4({Muj2A)v-w^LXlGT)4;!vwz zVvXU*0n379GCY@)DvegeRB4fAW?IqS6NU??s;RqoJs}uah;4Kzs(ZJNj z;;vj(%(-Xm(QMy=1AY5y=Nyr5R2<`H&zpxdh0sCxSv^|LotrI5Zi|h*PJiYRbcOGK zpr9B~d~{7%(ik6pked)3C@|7IAr(95^ZsL%Jyy-^)1&~rA~mA`=$|drb2Xw>KDiHz z1L4M;h2r$kOMAC~*WJH-##nAas45UW7j|y|l04_2l4cTX&d;B}1R-e1+%M_b@t2r3 za@4|PgZLCs25t|UF?$GbP+L=n)x+jeym}1-i;3QZ@-n=$Ab=!1R`C)Ff;_qH<7dwk z5{4s7+gm`bKX>5*ezt7Efg?UNFwGne+rUkBptI-B^GAZ< zmz$HDE1?y>a*=jcx2Yn{|H$e*9I)VY1#q6;CxS{nMHnP*HAbHBH%uJkUNnX>uG$~+j3gC=X?f0lykIjrjo{M`n=~X&#LUsG> z5qt!`udLX$aFPMu3$H53tf#mBg2lwZ<9Gzx3Ld9P`t?&4(ytrq&3;b-Rgx3y7+wbm zOCeGDaJ1IU1J$v8J4d=&(bVQCBlZp936KJc+mELb-{DYXhNq+`eu|$wbt)i0UuXut z{}K5JW$oCB69!;=0|J8$s5vmoj~hRMt&t&{4?{92U{e6-$IoBC{@l0CfPa)2i}Cm8Pe|%#jA?_xUOT!Q6QJpa?CS7w zHP)e>o>D=S-{Cig2kPOzo8AR8wkF`o5I2l)LhP| zNVDo#3;|i|{$Hm#Kgh|mVgayMCpRyH=%J|%S24p#T$286b&0dM;~NW*y4P41t;}f8 zcAB!IZ5!n2qv_!MWmu@;wqXGCgxBmaOMn~4h8UW1s_QI7pGZ{9N4{x=_?C&ETj|! z4H1Y3^bFnTg=zi(U_qb0BC?iY3p*G)AhX`Scq&=PH_x9Ka1~P!6Sniw!f75NU*Je) z%mg!S$N=CZvzH7k6wVS7QZ$sy&tL!EzGDZJ5r*xU{rcoC0wrJ~adUHn%NDVcNVI_9 zkWidc;h+^?R*RP`(G^RG#xZe8siP+P`3Fe4r7t1Nkm3YqQ*g2+b5ko|&arWErMq@v zJ`H8b%y~8`3g844zAI`QSg}5+k4s^Subi(U0Q|=By+Dfs0iWHvYyfPqIu_#=jM{)n zF<@cGlrZRnD`%xE`0syL4wqSjqbR=Y+6mFn5e(bzX^M%FFW^-0KsFZnGBLcLro98c zNjSriQlr|A+^{NPAO`#+A_o;Wq~1zc+rhmdSn&_ZFQ5XzNRf~ApM`}XZoz&}Q;AN>lDl|VRzWAn>OL4P;@ObR$N z1>i1@qgQ$ZYnHv-J1rYtD?wmSN0!^azkJ4P8Z%Ykgz9!RvKEfKL^o8L+47WEXN3K= ze>;w+B&3EGBV;OMYD}7UA$kt2%(jX0B1XPop2*&7%z+uRMdI=nT7FiDFRPc(atZxy zdwKHI>D06|4-exOcE!Ejym^a`ow@`B1fg?i2k-~()29!96gc(r^z>B3-4bOA?Bj{a z=_Aso4ND#8|Y&FsyjfL$qoue)BoJQ#aheygu* zhlPn2ure@bgdT{~1M1+q2{D@7m~K!Vi?IgCS^$ZKj$q&z2Zw0@8-bXRljz~qbJpM} zit_}MKVP;E;)$NNk+Kl^GGBxifs`~XjFP;2HrLANhXhRf4<3{gq|wwod+`FCHhK7P zek@S=9@bR@rGWki6-L+NYK{B%?~kOq5cK8=RioLQP4Gn^LG=-?ssTIfn>?>d4Fs}zJU(uM}XyZ_rh_TWIP1E z3eup6lSILoKLC<>1@>`KV??ALhx`rK-XU2>%}Y4eo;!a5j#7ZV#bFd7g3}ftgP_hJ zNE|*?X4Hn}`kD5ZKcds~#` z4UJE8b$YnD-MlT}?l!?c`2AkKdJR?sz_r1m2S%+)E=M-Nf!OhrCjma(1eeBq<)%OZ z?Cp@yP`$sY(0;C(S#AkOh1vbk>IGsf2GDv9oZ;ZKYEit0%F6;*RNnU5lHjo{HICq4K zvma5rJJR1n)5!|!1@83j!$&frSr93}6NCso1^!W-d%k7MR&Cn0>(s@ihr37L{)4@| z0|J60QPzCi6d&fEYzh=W4jqIkY5p7}4G@DcS}D=3$Q28QdC!X$*#3fHzRz!8G2qs_ zEZI9ZroTjR;4*jUpvSi^Z_k@pq~uPl#*-!W2;~O+AUtV-d2Zk&jqXjH=gNsg5%wtV zmN(BI8$(>lPxkTc)kQ*Q#miyCl7ait6gH>ccZ7Lekz#aZzX4t!K7GOJpS^G;W85^0 zw=V)Tgnyo%K_Np@Mot_xcIKFgbH+`XH+kkl#lOLp0J=lPvME0FuASMw;Zk7J<}I9_ z>hzBVKD~>RylHj{BSl_pjgbPX$La~OdJlzg-nC$;r(AHLCMR~_=6U0m4)>!+)KwOM zd=HfXMi_acb}gE$>sd)-$gc%)o^vC6ub(~YOI3{`0BCvx?quj05#?Pu4y@n;G%qIy z$Nmj>r`dJpJmO>EAfKl%UKOs|B8rAdGZth_$Q+q5b^MfUMPVVYG{uKq7t!pzAyVMz z@#6@0qNM{*xnrA_lfwIf0fL<_j2|?&+PV!^4&BLrv>2{OX#(9^5nS;m< zm{FDv(=Crg?hW9Pdw-q;Gzuv8;@)**ScPI&%cyg?Ex8lOfz|70kJpTg;t>{fo2A2j zqXu@@iYBk2I+6xTGI!f=12pKK9UwkVo&9tAj2W6g2UC1B=#6Af-Y^Al4zsFwwJ|gX z_s;ERMSIeGl2OJf5X>BNhtxXd5|Kd)3x*CvGe#$Bw+N6g=m2AfH92aFQhgV~91~fs zTSfOfv2)F@f5ii!uDRe*2#y1gpy8!#Y7g35d>lD>{@%l9 zfx!``_-JZd%Y0v56u5f*2C(2Xe+?_msYOSRPL~S^o*D!%0PkJm zmnHIWxb@~#yY&(kLtcQ_t}!b)5JCuG2+pjoAKPOfca=ELrNTUG%`rO`P5bus3+VRY z?dy^yGa**QW}N?BGR!Bue>Y9=Ly@+?Ze6*m7c3za?vv2ua zoV+a>V1*1aeMfc-Ziwcr`0GZplZ7U)g*aavZD^{*D!#c=1>MfY!Lodb5_9g`!Ljfev z37%1+DBvEKjwScl>#^#+F4TKYDFeESdDviX_IW}mi0SM1Z-KblIwTPt@fntKQDH` z?MpRT_K<9S%gkgo>A@%yGgEvt`i*41p#3N?cHDS5 z>(g7)sZGnUKAk5A_e6Yp5tYqQjV;sl)xahL0T==ZtVcKg!kYrd<5Kx11L){tS99t* z53ib(Q2F$cVCIPTg5bbemZlFF3>;%a`VQ#c(VEmkrueXO)AERqn=%FLAwCErg>j^N$F?vZ0ErRE9-{6b@%UYo8i+I^Uq4qNHMyE{p;ix! z6hJQ$0YM6dVyck@w;$nBv3ApB0bzuoCkMg2ogd zRxXqIcvGf;UBw5@W?_IH(7i*{0M|61?$bkiiLAb0WZ1h`6;E#dsW-Q5wV6X13LZ8T z(ab@l2^|#(g$T(_ka?U3Q=OhaDMPm+Wk$giA6EXXOz~kQ0nNuv3fP+h4ig^|P778)^K+KZnX({JABf`OghBA{BGQ3TfT0}HWP0SlG{0UUeOz&1mAck0-NH`H2@ow6$tNCMtIut&#`ey%XS z!|`cq!~j5`LysVF?l^ra_zkg6i;US3y{Cru8XMp?!l(N%FIQj%2YGZF*sWc+_N@RN z%pRBLF0_r_UD^z{xQhPC7>MU7Q+!ytbxrYMB>~OHO$ykX0zBfwrClqqYcS7L?{58F z+j1h4^YB>CHaIPUAn4S#B?OuH*SbZsRyBV%5D;q9XxFN_U(b#cgWPFpWr`1b?@6(L zQ+zmv&gLj41q@SwUwjZ2IwQ;@ZlFtFm$qCs05#U^#Pu-Kcy?=-?B$yE+X0xoI|`=w zFud7xJ!py#UF0$wn-p+71q_G}!b_)w^o;D+#l2G-PHVCgOAKLZ(5m{mwoMxBni=jv z-cepK#fM{dsVP1jLuYdolLCe*V2$_yYh5th|F0vv-@SX6nK8`b)}gH}Yz+>UGMzfK z^X%R}agZzV2a}5oy2cbAhBuq82Tk#zi(F=7lLC&XfMM~G9o_%X`T}Il`1$J>Qf7z@ zc6NkEy1yITlW?>J+k}G!0snAqTQv{#8ZdoK+T@4m!X4PrwkbY z^j(0rD^6Rpa#BQp9yw)tUK!q#;)AC6u#$l0<0b{{O#!{)16=q1mGk1Pka20_+zd^A zD>j%F?lIc0N9=&E{=GW(>DmSkRQ3}n$O8z0)z77Ephu^no-WWA=0^1q6MrBK1TpEH zb5?9-Y9IFAlVbm-_;3uJ%~4DW7^VQf_?VyQeSYsY994;9ef#=VOq`*}V|gm!*EBiU zeUxvHgh8$meLKTNc5sglkSuN;TX${O3i5?`=ZatZFm3;K)@_C$6xa5x-8;6%DH)y$ z=+zNMd|18F8~RlAnBtidPa9Kw7~X8U9&~{C$eg##KPX&Nmqf})T{AZun-pjw6yOmb zVAOk8=6$L9NN9rG8O2kQc$jVDYh#KJvJLE7;1M6~J9O&PZxH@^_Z{fgvyXePzTzdI z6!GWd7vk*~5)={@6dD~KnGg|`7&A0AHep0UazDlA$)YSieiE-sosF^k1QsPW%xqh^ckG|wvjdC6d$cx zwd&cc7dQ{t;Pe?Y)~;KB{=&tNRi6kY%>si0RiD3rbecQUF%6nGZyp&HRa#bNX0B%} znR%iAB&tL!k|Mt#;&5D}~!2hN#6e%q&?(Xhh9E!WkE{nUn zLveR^cXt-|#icFn_iocKO-C}Bx%V#1GCcdVnM@`(IZ4jR@qvQ|Wyz971zIX8bB{WB zC^;c!_!mMT%|n1}=Ir*k_yNUBl!)*EPMkFP-p%WyTUGIkY|~!*2+4=K5Rj5?-MjDH zwL84lio~=K0}5KzToz$8qZ&_@Jn8)aPDam0$gI( ztXo<D4dlD;xj=AltO}Nrk-M#{#^f&x#c*u3EkN3uH!i@7epg&<<7#9^}yBBWV(c zgp>LLA@J(W+vziA=8qn`VaJe!Oz-voEP-i{C>YL&xL7F=j0K?<%8@UJh}^sXAV`{ zbh&cn>>Jx&lQCn)x^?S~8$WT^o_!A=KYRZ2&CA#Cu;YF4>doaV*E43yWdFoo!!c`J zE>~J54W9ENry-8;cCg5rufP6!`;OhuU%r0*_5)=7?D-2*rcSF@zkVcQnRe|vV8xnN zH!$bLskqfi^TgMt=i5Lbpw;a+m@Cfte2oqV^rE9mnYZoUyvpRRMSj$(g z{JCL6Pdq8RQVWF&6*_wSL|WaJbz-M_mNq7j zeOfn@{fI)trtLCh$mlo>OC_i8@zZB%bzQ=FrBw(Z(!jC-5)+;ggK}s{E;`J z4bk-c`MxS)U{#K_o4VrhbznUPfbDzrAGKuBlKF$XsBg{7eOfoQ&<-AZcJJS$QVIQ9 z%XJCeKtA7%_XUm|SB`PxCwN|Bixw@4kV-=@?62l8_*EVX&qDQrSuKZ@NVb-m0FT3) zlnwAz3VcGiV4^r`z>+>)I#Arex`nTvIp(=7A3seRJ$lUd-}_dMj2Jo6v-8iZ0dhG{ z4jQm`s`Q_9^Mdu5Hgn<1slx}=^PRCpY?!$AEiAO7N3S7$fBAVp?Lsuj`-2e!vUJ(9 z&kNw;Xuntpym<8*hh+^C;}z1Xe*NQwcEe61^fe6{{H*U>z9l;?>G{Ml9Nx6ttp2Ts zHY^nh8Xw=T*1UucgX#xF1(E!;$+soE#8$~x&9w_2-L_W0IiddOo5U(yyK$>^>o%;H zgsMrQN6(&URrJ5|8NEGm>a@wMJ5|j6?=sacG<3+AHS?#BXkPK(N&_8-+IZ`)Qx_~= ztB{Z3z1p>jt6NOAsb9=Hm=7agvUKTZ1nqFBUn~T;r`4)mTYuKDI$64Gg`P%e-l9V{ zzY=4v(!5Nr<>Ln|9~&ll7Y*wk;M#1oU0%$01Awrlwu{pNi0?!$9M z-y{}d%hnx!!^p%B7@+^5&*&}g9{MdU-m2tdbi2A!x;2Vq>9;JH42bSOdKx!)0u-cI zmmd8aTG?Ls9g~5D+{b6M*}mAJqI>m>Aos%$KO8u8L_-}+UM*R=-26U_K)y>|--a&o z;3w2Bv})3zb4T`!Yg1iTrnW+>a=G+|omh~f30gNpCsraw%FEaP8Y);8;zr^fjN(j? zm28t{^dNY-%1LPoD*1?ThislVL86fhXU-07?@Wn$S2v2-uxRmO*;`l$A&?3ofJI}V;Aem75 zR?ok9WUqH0oCQimIVQxhg?coDJ>iBOz!Mw&uY$j63R zqmu{l;kVQKw~cM>&G4Fd6NbUB>}wj@&)du)PaAC6(3$+F{$Cmk%UcG#Ir2ZEL8n zQd^m{?4GoP5H6(6dXe<(?*04NL{+L(iGbedrxq_+`c^Bg(yYkHQKMC;1}-Ck#5@@5 z?(*f!-ru>gLUxWB1NYvPh949QGPDYRs59Yu@|?{Fii2kQKxf`aN8~egh3U zGJo~-*^6Vlwmi6ZUwndH5Z1r?pSHZs|6@iZ#?FMGcEM$1`agbfk0ZQy)q;U_i#Rv) zX+IOAPFj}9kzRZC%$X$vv|~)Gs&{WEP8&bEd9_lFD;2L+t`y|smtR_4ymZAJ>}pGl zvM|je;E4sWv3Nw=h7quKnph#6R|UyJ8wSsz@|-`<<6ZO(qOKqc06Td)wy)} znu>y=SiW-g1`(Vbf7h)tONMlI2jS_xn%=s2hGk89_GICZuIA_WleBDDJiC^3d{rcS zX52t9S6)1QT#vf{dbb1MdDP^L`T!1&7KLuixVR8!#I8U=q4Zt0_1Ryw(B{hxn+{Ohm3uAMu{ zb=~g~PRaIhHS<@>|AXEQqe8wP;{TS>^>0v0y56JxUq5Ti<42E8KLFS$@Y~Fk9x;Ge&=S z_Xfi8*PnmxTRk6-?3APhet(NVUI^bb)5ONCUQvgPC$r<)UcYo9Fu(~}xqau(YSpR< z!cnJg-L>mCCcSt~z!}Y8Qur0z5Vn8F`ET966Wv42VKJFYVDjO28>sCIoz=f$uMk#YkgF7po`JxOZe~h4S`*I_Mqk#Cmo$5p1+8x{pPsg^l_0xVS!Z)!hsw)a^%XDD{tPsqs~a2X~+-q?6h1GFBf$RQAjvx*llE~t;@zX&nTUAQPfTC-Ly z&)rLd{Ra=LXeUEP4P+3N+K0;QK z^*D+_G9tKDQ-(gc|BroIU}&Gaa2b1Ac0#LGtq&hLX7A_F;bZDZ+{(Fg=i%bPZG?Yr zZDLyg%HjU9)D*>eZ{0hXuCIvBSOl51QcBQ)kYK4Z~g?H-0?V6%4nqxaPV7Gt1Ql4j0Pu z-FM%Sp4+6uz-_qgY}~xr?zklPvtz+fc-8mkvS9U7d$-0^gN9$y#p4I$IHB*J(7?1n zwhs#-1Ox=ogD+pP5=$74o}SmpoH;XGJQ}pqXV0Mu;q&tsFLmnN*-jnwHA99Beg5*5 z3jeCrs(J2S8W3Z|5&uN7a`S@80*z1V(%{^Y0}mfP?bWM~Coy##eBK{2v@35_BE*PB zxOLmSbdDdjHklZYRnGst>IFHfRh5HV)Jxhv zk0JdA<1Lh>aN)v`6=+J)qQ!FN%4O*-@<-g4(6C!}vbw7+~d^k}I@=T{y* zell{@D7Y2RgRC~d*q(&r_CXq6%rJ|J3R-jPWc$+D;Njs-%O>a1Q?AOJwrtCt$0#bP z1wWu>D4IQ!>?kv!V!*a(ZXdBIft@!jC#tA6{AUA=nsMsnr( zm0>iGOiv4!;)-AMbojP^So;|z%nq+~J{t-4DlXc>J+IO|3 z#?bO={nFUFnvVXZ>fM{y#Ms`vdAob%JQ5J(^V%u^0moj;jKaq+76LnV?kZWbl;#{E z0YK%AWI!BJ>0R~u?K?tMNb^h2BP<(mmd~6$=Lqlt2?_c`D&9ioNJM+-%5|(gJ&}^% z2D?}Piih}`>7yP#cxe9?o8Go<+XZ7oAR-vb;@^$58Nb3I4NFQSABzHnqj-+YItBSx zUuF9Cn+ClK|1a0|%Nk zNj9PJ`;S6uIjP5TPD3un)yHLdyzB}j$5-}g}>u1xRU{PO7&`ic8`3vqW- zbJ+W#CHu_;hUQzYMT-{dMTH9w(PFDst?JkVGAIOGdIsENc(g&ePgq?fY>xN@qZE^V zq~(>#iu-Cat!LAuCyyE1o$FUfSf+jpAL==_frAD)&MU0^5+H!4kBkF_3Ke$SC)~ua zt;Ocba>@n`8q5JC*eOvLEU!!+x$n)MJxAzD+~B-u@e;RDS?Y=PZAU>7)?7Vz`t*U_ zhMhcl_F~M~@g%FV49xuTyUdv?6v|-_c%mNXf6BEBPU_KoY+H|rsr_r@Cz3p>7X27V zn@F-J)wFojFO?5%TlYK$tehb*X=Z44#jVC19;DGX%HjwF*l+8%a_Ewd_uYwyJ7`jAkVQOB9Ll z4X_Z7zU0b3{v^s`+g2_00i!%;^h3tnTeWXA@A zJrXwLQ*%5Yqn5*lkMsl-4Z!M_ zt!01g(6J+z9J$%9T)W=AM-O{5O%3}H-5i!AXxmLjrD@ZsQDX)m2SWkvp{Bij6$|pQ zWK?gmejHf8l<;M852%G420=?OT2`kMmeV{0xbtt=w22_Ma&xK$ZghBdaOrY9P=we#@uvTfV8x9|QVXmtcN(Z6ABU{5rpO&zc(@7ldLMySlZ+q;R0BU@DH zS~*WKvG&R;Eb^?Ag1IgJ9bQ|5Omg8vJ8FM53l$`}Ui+ zY;D=HrCS5f`Y~h2k~+{0usHBy^eECs(3P*iSzWtzk10a)>>S&qsXdy=14yo=Qn|9| zy}8|1!BU?wW2VX#%a0sBY+%RcJ*(ywKY_x1jK=r&GhLM-F*TFvS{NxOBzP8Ue|w+m`Fww;%TqvD45yz&@B*_Nu*M)UkK} z{;k`$*Q;lBUxFpa6DktT2=>E!_w8qR3x8eYxKftN=#mezL&AEfd%&@*x9%1r?A@o2 z+i?!-(-H(=;ajw5Y1x+YQNwYFGX=}vr*B{NeEBLv6d*lr@Z^eUKc^fqIXuq-gir5B z5Nqs*k&^ukl8lcSwwb=wg_H7}nxz5Zrz#f7->6=Fbi0;UZjap3Tekd#$gx{CZ|YsA zm>lQCCKWHQSo!?94~w-YkDuO2OpGZohmRQLHW5obH+lOeghAf1bEn*CKN2FdF;<_Ccj-+7T-5TiYvCEPszIF%`@S$U;PWB#5P}{aVB3&tHHDu67Le_T7hx7>^aq`rvHEW-*fnVaH#d!%!|kN_sz*(UFQL?3%7IbPTiuIa!6VGq5u-6NlvKQg zn&pp=A78zBr&dO{{N(D5%T;QgEcKrtsB`1nKDvE_+^258b?VIdQKQHDO{eY`8i+^G zK@T1>^x)y6ge7eCbIk>9>fiQhV*vU4?e{-OS^_ZLrW3{bW@aG-1t^H9!&YINO_@4X zM7~Wn3)#4-cAYxDHY$xlgV%yOxn?9!caxX7)dmvt9i~7IIC?XuTr0qc5W- zJTfrkAWga0U=-SS=pb>sVF97y%vrNQgNE&8vjzt~Ki zdiIpn*}8CwFQQ=HnDk*L8!{vx7UcH1KVH9i6Fs%t(nC|+jB@3>9q+hH1 z0B3OWlxgoj{GOcS@2?mmy%(=<^i6xl5zIDhaWxUfXw5`)Hj)S{25dBO(i|Od-wG<(`L<^3vX_WtOgGr0x#fe z>(U;{D&j=H*1UX3Y&SQNtl0L44j+l4lv0w9`GY!%;8gE$_?V{h{v+qiM#fddEmwdSRN!kBwHy@Eg(*z7rTVe{Pv z@2ej2F`<2}b4T_F)I?N66U$q_BtvcAqiSB05r&4lpD(dcM^5l4bboFu&NUuOb@Rg& ztR?=ryZ7!@M@1P@vSQ_`0Oyo3WXhDuZAO~{kly#`(Q`zH&eMvQT2Y|zrb5N`7cFt5XvvKQi_WfDFClIK z&IpE4q1*t4#T{Yi@7()06y%eecVAq(DhNk1?fCeos`u9eB=WZm#%-u>^~CG*n^T5O zg-V@-0>PrR!KyqNRUg=cMj8wao5~wU(Td^2;y3U@B>WFlr8&;#Qm{U;hoJg+ygc7{dSv z4Y?D7FVLn&07bWtFJ8G^sd_T)s95#Z>;=!CzHs}kGv_WeY}iO$3%7E*Z@#Hgr3zUv z4j(y=jO)>f(^p${l-!M_aHV?P#Boz@FI&BB(C|U!DwHqb+r~f+1FO81tJWkvNlKo` z-b0dhU~&-sI52-FF?WO&fO0b|mqWD|h~epLJJA@jYp8d#^o)vxNLiNcZGXIY`3gy# zE#LA8Q*7u9X`d!FGMi!2(fUnh7`)?Y@~k9!Fj3qcF_l{-_PxmYk@xGxHAxSjUj4b*<AxMCJvW@i)do#(4j!2}cG9(WT`rd@XCWERk5y}q>Gn?^VdNy412Jm= zvtG6wSC_4nv;(UH#_u+@SkyOe($sTJ?G11&wQLy8Bk|cV=Li<1Eg@l`CN#9bDkQrZ zJ!T9phi+ql*!eOHQ0FVi$Kwb0CU&f=!TC{qWk^17B~E)t^$VF1av_btitWdpC)TtB zhXV4_ssKl&IBoiLzgGA5Lx(7=VI!lfyL!-MnNS{vhz<)|F53cm0#e;qFJ52o6?e5o z+lNPV!OYK|zgVTJcf7}P88a`;Tkz7~%6Dh#pnY||Lgf}^{|#B$v1FNJ6|1c)Sfs`G zKc@E|a*MDhhYlrkAIR08K6B-#bii?EF7#iKcuTIDuL2@L`?hhb(I9rWPpHT5a{G=Q z>h`vmu|g+^DBD%jk9fs^HBti2+#w(L60eVGRW*tPLf=(LKI{vfmTIszCrhkm%jLq?127NH|rOQ@i&g^0NUpzy`CHV^lAQ|$LQ>Dr^`+uUOdL>J3s#s0F zqJW~L!w)}Y`1%`95UCBg8xI>cjNtR?lw)0nNi0yHpgIi0GO{51wux>HPV0^agen?A zjqXd0!gY>==~s}od+WyG%`4~;estf4O+2s4I z`tjI7hvVME$Ism681;G}W*>t|jXvD2eP8*iftA>_d5a!tT)&yf5%AS5jnUd8*Cph& zFTGxuYDTHSqDVnP@}Xb-&-X3C4>9L(J7OHGSS!kr1I(MhK)RF55bJ)AlD$3b3}i?y z4f){QrfFDD0Hws+_bf%l{iv#D{tlGxi0aKNPnIm(v}9={ z>;p=bJzK7_=Z7l`6e;X8j};S1nfQ~WKG&%2^uWX*#J+!`QiCtUz55U3CbSnYz9Ocg zUo{G1UNs2AnRDmOgPcgek0=rdeOHF$qi?@{cKC!fsTKmqPoB!*9-SM$Bi6J7{Ui2N z0zQ@y>k%Ga(tHrzQHA{ajT`ki#N=)D8a1Rq1`jyt)F5exr@GuuEG#uwuP2r)RZ24$ z!UrW}&lOnBA!!7(1DRE;5~UATtST!#3+GCd>6|tDH^~{IO#hWHU%^gxEwhgB@z$OD zdGZ=L7dQ?YB|?Pz&Hg#YZ)?}Bm-ixdD~d8qF`7P(fc;y24QXz;^;tS3lqH+fadwu< zkbGD`7d{4nz~Q6Ei1TCFTJjOTgCtP;Z5-iSQhtau3LG(ei1omob8I(m+N=VE{;8?p zo|;6?+N997UHca=->7O1NjoS+;v@nJ#ppDDeqDf|@6x54pSPeVlJ{%??dV>j)M`J3 zL+x{MzCu~kd57SZ@GM@U#7#dzPJB@ltb!XgZX$mxKmoUx!28Yd!>--B=@Xe9KXH$Dq&I(#$uA8Zf{xMv}KFQ+(YsqAr=;bL4Ys_8bj6;pdDnV6$ztJmpg`7*Bm0v zD=uahhmq4~&bDjUj!%4f+v$&C|Ni||k|E2U>T*3+gm&mtHT{_WTYUXgG#;#cp=8~l|%5=Ark@WiZCsj^@DXFa&&+o8jT>(|TkEy1ESo66TKoYwJd)i529 z6>N8X^(h(?l8aFJn)AMK^JdSP(jcYDN9}^^=T9>kSeR{4v$(0})xkrDH70+!T*Z{{ zz&sdU186*a^w?J_1pSF4!U=)31xXU1M&^uTFZJ?6znWjoo*y}Kq@)_6V4^OU7|&iH z#2;zaHNTiWefn*MiyPwhlxcRUU6=ax>S@ModDXB{W5+P~c4(N_5co^KtR@N({9NQF ziKIYID9i0dJ@wc(&YC?tK(ZV3gY0chZcTpW%-M6bYSpp;-0?9b$p^Uxj%-^);77-i zSSmyEq3)K{S>Au(pvF!k)_h0PrcDvsg5(!1Ug9?ug63QkJBYOD65#khqK=17Sw3NQ zmK__(Bn633U4H%MZH)l~gUs^vH=7FBuR0#SX!lGU^ z`rW>Br;HI~`A`!9QeqNcg}Au5zrD)|=;RvV(DNew=t)xL%2hPK`|a0XFVA1t5UZz5 zv+GS;?cKbkdiCl+7=b(v2%7O*UM*O-$P*?e4UV5Utx?|bqr_lmcqWS;p^1p2E?Z)W zV6opBITQgIuO$M5?3M!8qy-CqmDi+HMLq`CFLwUuKQZe<@}aKUXIj2?<3`S0xh!W{ zeTjvQy#UtK6ka7qS4FpgXrVM6A{S z;+ULyQ-&xQ{>rtVn~fhlSU|N;pFX#5-+sLJK;<8^>1QF|;s|;A?0Gk67}n#1qt_D& z+QA@Agja#XDX_6gDd?ulhA$ujk19TuThX(?6-Z^M+Vaj3!ZKu@vo*F};qFzHQgqt5`sk7C)Swio48LOzB!DSP9>X%#HjuV0f(qbY>C4;5&s zr%dE1F6x?v<05C@jZvvVnTV-j0ONMeuXCLvpqyapQKP`un8XO8Lp{!s@Y%h4cgKz$ z<)cXfV*`?pOZ;Y1c=+gP_Z~gf*=&xlxCmM7G}ObscmMvt;#qw#UWBxWv)ry>seycqXkPL5)k_i@?>>Aux@~Pj z<8p56rPlY4i<2LQg;W9oyptL=a!pgt@}c^4JR^>k9fuvx+}k0^)| zIXe_en}yQV21}&dE9ELZm^S;~@G%ZQp?rI)boqv*N{<~o_W84o;zezyA2kG}Rl zofD*8=Crk(arlC6-IJph2m42sLsg5Xb}p_-LfPcj`6nkIgkijQ>tBDyYv)c*>(K;< zbVIN6xcGQ=%3(P*K!7|r_9G)}P%Ih>e!24uA2FhPj~;Hj*HRyOm|RPTJofC>OT?YK zcH<`DAnXnFH7IxF#5IMvbLV1Gg-(3PkRh68_E%he2M-x)Vw;KqlKpc_O~$Xk(Rg{> z>e&zdwH<-`t-0Md;lus=4`$BQe|V~7*&(gkT)TGd)u}T#nkVOEcl&Gpy{j*(Wr9S+ zf<{0|NnQlNJ^7BwQ>STc=TLSG8$O&3K!&dyH*N@{xV3B7T7K022rr}GHu5c0iS(B! ztnKF-v_E#-I5)mP_TX0FQbbxPd$*znOM8>VBA=FgjBi)#(Y-rjz(j*zHm3i8+W!RC zG9(`Z5)#}X5Y~SZ2&`VaRwEt(-5I)g^yt}>?HzSi!tFHK>mf!x8lpV8C2tis>hl*bo9J`t>W6Q>*m#Zso*EcUX*O-F zUyT|)8ZG&;<0r^q8~JZ>(I3^5~|YWZ}&^MTD!ikjUveM zMLU=;tnty~uGz8(W`)2?lV*|CEMB|>{+myqKD8{Fctrc=231+FPZWi5EPGELD_OXa zc&l&UevxcQIC>HDP4+1Yu-L>}3}9_is8As}DNVt|ZE#TiqMPSUSUxt+P75qGGyAoA z`TTj}t4eojdo}AAf+%4KcaB zSz@<7?-FmxsXgC&;Id10kAJ^4OmzD<1@TKe1PsY7Yp1Z(96x!cN)^{MG<=H#ECx;& zFJ6>0vKP1s=vPW(waY2Mz%S{=OUq&BLN$BN+(=Y=#Kpo~5HexunMY!ev~S-&zz&BA znmKE>ezM}NC;3=7r0e}#H&;wZkoe!NFekpHW#VsaZ`<)-#ID@=Ju9#O-0a1H z!|IG)9zA}gY$eYR%^L)x9ZVktPP{Lbf{-61Vc;NQuW5jT!eZmbjY4mt&Py%x*3(hc z?H*OHUVQ{pmXiy@Cj%z7wVDm)`HCD*iMRhzF{}Lt4y7m}VxiEFJmT(z_O&k@-S_70 z+nMq0HRM3Nnm?%1?v?X~H7@Ph(vW;$ccpw4{fEBZ2BsZiYM84D@`2IX z%vp2vAOiS3dh~er?wvX#$1)2iLFZOLt0h-f7O>#5B#Yr7pFDM%`-5x~puj~)n15K% z0xXghKOW(eGfA8Mi!7ZzMQiKuB%8zSX!?T%aU`RfO z4jX2HO!%0>5a1HR#&$a_)I(Y9mb!4$Ff76m@9DE7b7PMHhe-bk#xvNlkP1ZKEbv>{ z2MuuKtF2qNf|0;c^XAR7pKAh@bnV(T02^Xxa3zOfFZiG!rOV;U@q1E|1+~7pbOoB? zi#q5VM@T!EBe8Ul>8)A2-ZQ8^#t)Y-U$)H1?eWl|Lv{dKYS<6zUaDQE4u&F@GaHo* zn2vF=xTkI1whc~49fM(6G96;HIELUiVVRxdqeXay+-dE!5lPRUCI>QIxUhSzqJ~7l zyqO{SfNEPHG<{=OWqr7Jwr$(CZBN$Dwrx*#O>W|3PS(UplWo`J$-V1&&pBWE)OEF6 z>%Z2%?;lA;zOzB?!6LbAaF$>sST`<6_bZx-R1HcxSi+Z?cjT1LC#WI0y51nsGxYF# zrLvlcAO{@OK<>D({b{eN?rjkM~z(VtI>pb^2_zE42VDZXAr+qt(?bGP5=7yf$)O&66{zyVDNIRn>P`UmIB%#{2{cDs?8N? zV1kU-d8>A>2KbpQpn&SWYK?_RfZ*0TJu~Bdp$sgUA5%XGcG}6w9 z4Y=B5EFR7^>B7G$1J}GJ|4ZsS==FBkeZ&RI{p@}CQY`hGHTTmrOlo&Je=-~V(Qg`$6BI#lxcLVIO`08g4AwD`9hm+7#i zzdw3W&8GTSpYU4*`CFh-~ ze^r1{x_(Q@;bi77kfM{mr8n@(+AW>%Sb4Wr9+y1~us==+zB~GHQLK@Z+GF>&PwoUF zD!IkmZm10+A2xuHuC77L)Wm=Q6iUnW=vKQI8q<^_YSmWP(>?xhR>-^!)|@O3QqE|_ z(L#j5sW3DGh)&&SDn*=S_Bi0sM5B_Z`BxgYS^Ujq zFC*r|C=m4BXaXl9y}51@V+v5hhcoQ;Q~o$HvC~&g1pYYcdxO;!UGf^@?b)rpA)p zx+E6VVHET@p-ZxE+T$a@XWK2MRmru8jmHLkC(JmVeVPH5YK;Rq)QxIO#mBGIm)R?g zSNqZbknRE#NI11wWOe1_;Y{P}3J?`@y0})YulLoWrI66F&nxA=o-7J3<=ppvgu5D)#m}h_@X99j zd(``{bKCiz3~u-NjRq;GFxF`6NglAauv969FbXGbVoDOdJq1k$7ZB){uc9=!D$2KA! zw&YslbAM#=Tsa8+8&nZ-0>XDC)*pL*;q|avM9E;UOiFe!irO{W%$<@QMoA>X`q1^} zIf&T!qf_B>lOLDRP6T7dTDYDn8*v#maxSLM4!V>%C~q6eZ~wgt^bZy9>#-$s7W1Fl zSWSd*D}is(1bji3*5V~DQIc$@9&Yuk4c`SLWHD3BlD!mJT0pBnjhg|N?&w1&;>$_l zFGzu@NKH2e<*K*VUwyIGs;K|w_9r~%gdcru^~SA>k=_VF|nEP!x=vI#iIPc;^dTb{71N!W3g?Rm`^zr%i$RR#S9qJ+(n??7jMgSx1vPk$}YtH4@#<4?z;c~e3hyK{b zi_Py!UqSP9{yS2t`BAb46)NADn!&yj33?$}4X09~Vk4R63wWLZPr`+;tb(}6hc7M2 z25ha^uPXTMvVEAPhoXXb3T2FJB~&fd1SV2$|Ccgcy~31Oe!}C`rhQ>A=y#Q7#fdgp zzR}lTQZjj=xS6v3jXOAX!%YDNNe4cIf3!*1J>qTfg!|^Xl9gbu4tn3Lk;i2-Qla+LPB_<{zd;D0qFL!kKpMlTTr+1`NX@>8;vpq>8U zaAzByhL0}+Zy^TWS1zm+dF}`4a-Rl`KK6LoSoed}OK3^L{*Oquu|_FSi^;p(rb->= zX`d)LE9Ht=LW?&8bZ}dV)-(C5b3OlF!ld8du^E1r8q}w~qLRTXegN{SHXdSWR86;I z&V`Kdfrws7RNnlT^Q9l>cxFbQ#Q})-Mco)XWl`Op=i4^Pc!Q_=k78;>Lm5wN&MP99 z8$AXj?mlm}e=1}#6x2D0|B(t2@oco4$B;jt=(4v{t|cj0o>xm3Qolc9@WPG4@@@%*Z_Z z0TK@o3u^8$wnNAToz9m-wYMV?a)n`yTrv*5fMH3o1Ww>8*}$#=P$LWysmMmkF$dIS z2BS`yO^m~cn#E+an)S@7fuRlaD!zCq=-WZ8gt4-FUUu8^CG zG_#0Wy_ldR?IY5e`>T0X2zRwI@K`x>(PG}Vq zmzn8+eQB?PT{BjSypms>{!yWRJR@6Hs<)|#=HX^%AUqLAF#A1xZy|GFf{kf7gIjB9 z3>2Ii27d`=SV?tHzVr|h_Ja&7cE=Z8mD!~C?cb+NI96fail47ltlRq6Hx>rb*vMHb zU|amrDBoituww}!s06ALvbi=*D^G%cj;a4ra^NH{ z4DBX(<~^BS^@r`VAAQIIwX1cvvIHch@N2k}VAqX~8pf%x?8EPEcAiQ$o|pmMLOP6mM0IC3aUP0lTr_{R)3m~h z9!G<$Cmq!bl0@MQXe4~71up|ua`a-v8@hi;=6itW9k%>tqx|jX)XlIk!bsu0>iyeN zW2mWsn!5|N`-V!Qi5^2rE(gY(CM*q{yd$+pjyBvT>b`(cAAg)jOc2NsuW ztxjQr9s_0Rx5E)HFg6kB({O6$@BT0MwyPqZ8fb6aTx0pC$^4Psgl;(C2xxx_g#DX9 zrUPDow|>;cm^-T(sLrS%sRUe#)qw!UV>A@ldS%O_PQ}hf8mrZtzt^W!ew`CF1Ecqk zp?D@skgqt46h>}&S!QD6sXO0G>7g!nVZuvIs`~T2f&?lrN){01U^Uh-U zGa-BITC&|L>{M(?$_ApHr{IBTJ|ZGClcYpKC8zshEq4r{|RAWLi8Ucb& zEdTc;9ouL1Zc!m?TF6{I?LW6Gbw+|M7(@|(JQx!-b3m8iDKO%+ADM0N6)zQ>LVrD2 z!0mRfQ6E(Dm#4~bO3LAI%!W@J7^VzYG*A7~#1( zl7NnTsUTybU`B2&0vH}Ct@6f$<4d4Og85`}neyKq;AxfP^FEmcw<|vdhsEqc?Fup< z-gBg)>2TtNu7-nz_qf2J+P;)L+ugbUGki7e4r|8F5j-F0mA+M|e z0|2ooNP?MEw=b8E(kBACuvY~JYpC&#nOglx z-&&hv9trRFHv{DQvcmX%1Fj1IH=yi7$mtYXBzhzXsopAsdWt#u<20!ttT7RvRqsN9 z#=fglVr%;pr($XxV{f-2qT38W0;<0uM0J>qe|pf{$mZeAqKw4>Z)5;OiHjU`V%FW!F2RKgDqgIQj(yFo?(7e0YrOj?^1eB7ctVtBN&(EsUmJYT; zLGS4U10?N-nwj~DZ z+);T=-)|0V_+HhkJo*L)zW-X)zVx|&_3kiD8NsCS`@liATds2?t=J~8VRxmBU8>94 z^z{;SE%}$tjL5Joao|G%OIoMl1VOR7QWmoIEj~0|DK`K^p3vl=RB~~UDh@+br%uWC z0?>3r4?Svj@#=Go4=HImaL!NEoX|1J5<|T2@7>d`4Hpqdl94Yln+pc*Ssdhiqg;KX ze`CHCR+V59`(dmNzaBPJM2q3>5JJ5O?D<;VP}FO^fnDb2qY6?6G$=`$%^w~uN|C6l zg~r4jw`yAuLGZAb&u8PkkW%&Y&OA3bAa$w)JkAkEC>)r0`cb{t>ihfpmV*?mE)*nD z+gppU!5{iPGHU}ez2uq+E-}RfsY%+0cS{VPe~~e-O6{j?V2vZp4Rm<1jK}X8aTc&d zWS}AFZru*1szm2roS&gNV+2PH>`#Sp;wIZhaqi=&5jvGD~jNOJ(ra67|_g zy!3|qC^9<`NX_n2wHN0#K4TnY`(C==k80}M4#zy3RKh7o6ky1R#tRR||Czqauwy_K z7xc+NN?E+5boEGgg(gB)NT>pJ>Zo?YR<;H9aU)$n5z;|uF$Z4vE3RKbZHH+K&o*)* zaUY^aSk3>l<3}Pr$MpY30ti}#FWp#~rHG+`=KpMlWBC+=T7mD%@yW&w(XFouiT>u1 z*hIXTSnyMc@nIm2x{_TQ%+Hh`TQesMo&ja1Bn%E*&=?6EjmBhLy%QTDAWej9@u@H5 z{4pQe%`0l$UHxTJbqXZ zV8T-Ip&ETCK|OT?FBSE^0p|j^p6C#lYu?Ef{f!|OL$1f}0%VwvDW+jgsMzN#lDW0R z-c#raj}xZ+^kPYNG?d_y?#!LUsF*k7B0P%9rOuqv5+Zd;-zq;?#OIjb1p)K;_aIA+ zD7&ZIBev5&R6}Hm3})nP;^cJ@-V9eTw&wn?6r^7!GB1pV1ZiTaz*De*3zRwUMT89) zav&@)uhae4sdcXRT@D|?lPQvIoNa-clmh5p^Te@P;Gx-u3LNLrEi8d++o!ISH_f9E zINq`$%`3N3%Or(JOPYMg{CK%jgt@cafTU0) z(5~d%khgRFcfVNFp6Cd3)0}yr|BECK17={nA4o7PEIAF`Blo zx=n2)F$}(4(s8LNsdIFO+G9Xk3*I~L)lJoMKvOn~EIc@Ex)JXjN&V&LzEx%R$2wT; zXzZD1kUvOSP2%^%945*k;|hhj)#!GUmdu>*EHc)MU%Emj`6}rpVmbj2Xonq51=gOL zYkF{IS?wSCLjWlQFeXJG455=(=pIfRbzNEyXlPbxSeh|)Aje8sIi>u9{JX_p1qbQR2rSkS;&fHTd zrs0aoFre&2)T@uO3D1>O-IYWudbcJ)^{X`+CqY>#F=IuD81`DRLNTyJE>HLpr373s zAdioxmMd<~>gbZfL+$PDGY=2m#)P~8>W4&8@m~E}%)>fFL>xGuqbRf@nv6W+;ws>M zytzjeHaz|j3qt1Sh~Z^?83siN;TA+;Cb&rTHil&!+{#Ch63ado>Ak zrJTc};DRfqEEXn~DWzgf#x{t){JsI{%`V)*DXzCWi&|)BlH;c)U47A@f7bo!kV6TB z$VeFxQZbGUS|kn*Bcru*pq>OAL7^eBYH)^7kJ^`!aE)87_Byg)gNM+Z_t;N&@2~#= zAUjRlpsbgAqON#o=P|$Y%TzrpDT~(qNGBqOZC_`OPn{#}sA^LXK)n*K+d~MVPOw8U z0$9Z)RgCb;qHB*xy@D5RKy+zZJ+OJ|F`HcAA&(XycP1qV@aAya5pzfHKU*drd_}mJ4#^F_kfXxKN~69R1+YLU znTJC*pAMJCKVNhCF(C9}HTG8rhDz?XO?ta|%o1q2Eds-|WA0pC_f$?av;4s+@G6 z<*W`lNG2$!`Lf|D0h&k&;!BJg)6}=g-=#}UF@+DMbi;)Kcq8eKa}CKV)WJ&S-5 zmyC*(0VPQr-<@7{XS>JS_K?2EB7#ye-PiSOs)kV~35&Uy7PkGE)r@T>kw{Rl zxuCb)N08B;XNFh~66Ta=^khl0RHxn;xyR~sSEM2Sk*Hv^l!w~ecH%7){#gtOU-?W; z@wiT2&I^h!F!QvPAL`U^XUHQdEf%rGu7W;D^4bg%h)GuiifU6rR*Qzm1L+csnzRo z971aTGZFbjgh+Eh`Oa%nf%J?w-*B)I@fc2sb$pEENm{%u+aecr0oyi++1%>18THuV z4<+-V>k8zP+;UD}j5rp`CEfla*#+_PZb!~m_C+c$0MhX=kemos6Yd=O5tsYXlzQu3 zlR+9%c+u=X)dHd)x?iMUA8#W`0#keVZ*g1t=9jUae~k$j7EgdiOG2s$abfab*rhSu zBuXCqNYGBzYwC>F81s^okWMvX0+1@->&^Y;M5shmcL#Gl&xKS+0SEyAxG|8P-9u>= z6>)JXOSF838-(!rT$1B_C`qXT36AQdr>KMLtY-=aSk|v`0~lY6!MLST|3*1Sqmo{A z!V)ahw08wq3d4uknO4;}??1LFe}om77lBK9=1E69Tzj7s%uax$i=uw>#=<8UWg=X* z=<|@1Zd=M_aco4tFh(6vBI#pz?xnK16dgA@K5zT%L{)^R$z7AyHiyj-51GW8aawHh zH2~NrkG>MDx#S$c&s=|Tf5wi}uQid=BoR|o$<~|S9k7vWAmc29flq+x%C*3AxH0G9 zog(#pkF4v_W;VI%M78Z#a|Ug`G-M^S3TY5KIg6)_KgeAx#Jp6|$th4Lz-Et)?=rfOf)-On_&_9!1y zJSb_=;y`@;L7a4Ie}P|$hplo*lam_LTD}d|EnR;(37U;n;)Bu`(khzm$*`|W%Axb1 zj+zcn^f5*yZEt^4#85zNvTu}3yCfei=vP1dnwUraTPrs?sdn4a!Jt)+$tL2vs^l#? zj6)L3vk%ZkaeT_AgP6J*QaSxp+;02lsF{z$N4KHW>+dGv2-O8p>IMy>HKmnV@$!?% zgYl`#lRfV6{#%eBOaYqip3=T;3hKu>cLgH5gwMQbLt zh)B`e>;w2x9y17rRzS0%fo!xmZJEAFnN0RoTplDA{RRDVykeXvmmQwxq5~Zlg$bmh zTX!A}MYjE`8?IezjLKuO#SS@UQj}bqz_J2p1-YdXK%AIxN`>ry?m}Gf+nlNX3s3oN z&<+wvUa5SjYD>V!JFWP4wM{x=;ZmtG_VXmibWUorKkj6+27NgVkC?g%dhp5H)Y48i z{DlBBdSC$E05gLiAvi?ghgI8yB z{Wes}4BVvbD;a>*-~N-Fiw2xS244V)<&{1f=2G@Nqw|hT08w^Fs&Rf87e=C< zpZJmcWy2o0C#M^FTn-Wm#`tcepgMQ=dDHnOAjG0z1J?gn?`6t$yJtwypv7q-WpbabEDF^aKXG)XHh+)COzok z7>ENAO2Rcz3ys5qn}6AeQ5|@K$5e9{3Vucij3&;j`l>0ZSIK`R>LbT73?!e(TFN!( zcSH;My+LV$m-sxN{h1AJ&}+8BSl(?7&4m;tctr&rd+q;1UY*wgzcUrM-vG;iu*5?W z6MPzGyW1H{p$z=J;JiOPEH#7H)&E1DmEoanG|EK0+Us^RfGKFdW2h5o} zU}=Y5trXD5+qEaNwUbd5tfUsimO_KL8>vx}L2P)JJB&k9;huopFW;OBnazq*k20O| zEUxUi3I4e`=}qCncbGNQ(Jty56xM;6B0P8hi{@bD-n1- z2%V^^4x|q-*3;kqNtqSlMsNkxRSA$g z0fen(V1vYTzRal}v9OaVK8;c~8WR}nQnjw&7<=9@c~Z(yQPi--O!}(3!8{q>0~a|p zz!mY}gT>R4KSyE#XLS+clblqFH5Pqbtqb4`iqC}Nq%4l>HVa0flJq$wZ%S1QsZ(6o z9!S%kp1@C<@UL45dDp#9(4IrYmnEZ-Wj$|!Gy{tYFVT1~QE(Jm?{3;_TT^wR#TuQz zD~;wfe6#aMkC*F#SnnbmunO*}|9lh4aZthu)?7WutPamXO9r|Ef!^RaG#i>2{Stfcj&8l$=nYm)=3FiBk^QG{O$` z3o_tWMVv*5%$RgzVb|l#I}}HXzb!T$veL+De3>@$dN^BTMErRdaF7O&UDdt$WnF>y zC+MWPd`LXg$@1Zsr7sN5d$pYjadWw1G-5Wm!nN111FEyhK2_%!rSJI&UEH*!o7K2Z zhE=+8(#l*1A`*ZpLW4Bq)K|qdorKHAg<)g-EZL=lY>k``e`g0ZhCTI#M;G6%(|1yP z*kt8pI-6hfD~PaG67A`LUbBEk7?-gla8yNgCmx0gJoDE<@vOP%tHB=M50k!v1ai0j zM-T2Cb^FS6RaJBx$}Yhi1eLL?z+v#`dyZv^W$m+^sb0uwt#6$z+2kFVWsM$}h^dbn8c$_ab=N z{>)_5VNreh6T*2uIdL)&4hs+ec~cebnak^3Ks{s1;EE??Smra|h{?cFk? z>xK)WsXg6DEe^@#VzPr;B);!__r9J5%^d?Z>J+MPc7v3xtm zm<@^9qlroJ7c3ydDM!7ZWS=1moe&QG>Gp!8zUZVI&Vs>xvpAyoSoLteIqL4fg~x4| z{=VMN9TC7jj+7ywDm8&d`9Ck`hyT8%;^HZo+W*eZ-6el-i*b>2lM7_5jmZhpicqw{ zi4msIqCKIZ_-BV6boEqLgGiNw@=%7EIPVT`16J&+C`aBv-EN~4xq&>AmSC>)UA zKE9o{={5hI_{J-Pb)Y-KU=iD7_L@Yh9+oiuZ5#MF{V2a*e4%E5QWP3dyT(XO@PeaB znuAh{x&^`(Dqt~^iED7cxMq0J%??45O(dXpV(o&DiM91?0ZG&5xLY?#4!uB-09V!ZNe_5Qu@ zk7nWvi~7E3ZAQJBO$ef5gwH{dnQ)vBz;Ke2MmAS$gBFqQO-82?hK!M4bSXFuuO@lJc zgc+fsuOwd^|KdL!gYHFeX1n(a&xs^Ktio&e_&S;8hJ&>w>f=)^TNsW|VV>`T@d^n960pR&5Q;e0YhGgd3M0b5=;t#_N)!aqOint zugp2sNs@vu2+unp$apUlWD)&6pde5$RsWop^$nQ#^Z0caFM)i ztSRJfX+Q3_Y491xn1n|rg_I;S5pjlhPbA`Bcuz~UoN|V9{l0fFhAC7$ZQSIMqh-CX zxK(fRDMtgXk0x@O`6Xluv|_cw8C67+M;h%t5OT5JKErNI9dsB)(_2=0`!=G>hxFg3 zJ|p^(?DMhv{m1CUmnJlnn-xk;oEh}_BKzgKruKelNm*$jWhC5%d8DnJrztOeXWPtN zQt5n0O!GV@{P~eYCBDaQ8=oZiW7h18Ou(}>t3{Qx@m&a{;#b<=CBT+89sR_BVPZ7R z;=hCxCnnS^@2=jdC+g_PW6NhGvt=sB=$&WB7oJ>Sb#`Qkeo+Y==y3St_<-1 z&5G?CY}N3SoF`p>iP8OcCK$tI-yUvC@#ZHHaaDPpiccrl?#L!6+xZEW%v)c9_$j|Z zQ9Q!L80?w^n{xPudjE+9H0wOHKR|jaH@a~Op-7!okgO1C{Ddz&@m6=B|H}pc40hQ7 zfMXq!BO|7Wg&6d}_um~(;+n=&>_cb_~@fkWE_{<#jzFbVoLD{QKC+*%l*@m{;b2$7{^q4(e~W>z^Z=Lz+Kt z+84&LeCyd&a5S3{0S&F!gE7$M4gdIibbvRoiQ82oi72S49N4r5bV5m;w>#}2T>5@W zLEy) zi!IEBlZj`g#+;3sn`ITBE58V%!1UV!IuEC!k_O03F@6vS98M0jNscC7qvQ&oJ|a|o zw4DA)Go~`3Iw0lcZ5sF)xTlBul}xOzT7cX^ZdB!)kmv#znWR8|JW(-IzXuY&fYM#@ zF(a8;r5Xq`EU}`v177mGJg!X)tz|PHD9H5*@Ug-ZTK-On1l?GD-?F3j5th_;wXCA8_oWsS|rFtm8joZmE^&8dDxxUwgK?r`C1K0P@%1KIrqW$ z$73^EH5tWfP8c!b{Q);oIuh|@@xI!Omol9CAmy;A1pYG^*1376s}-8NRL7Vy@3&!j z&*UZ|Up_NFCb9;vcfU03;@_&G?_7Z|9trhS>TL8o=Z#js2`uPoP*99GtsBYQpW(1W za5ezOr?ol5d2w)8Lb~8e^!~_-qDAHhFB72^NyGqGPHzu#rb7W3ZBu4(VbRVv;%}0N zEDGz(qGPlCSA~g>Uv2jF$%)UyjXU~cnB3izxzsJQaif^ zxVV6;Se}aa>onqVQWlN9$8M7paU(+R>5nB1_cEzdYgkkhLIDi?tiz1m(&9TZFZ-Yo zZ!iRNqkF#s7q+?VA%2xYcF3*ggQ`D?IIcn7Beb?jkwQ2Z8Xigo+_lO~lmy-3&}|le$vi{3L-nlNmt)ydoykH=s!^l6y+i1@h`3U zYj2>zg=~btQ3@I_NFUG#1cSC`Q4*8%oi&b75>Oz%ixG43Ub7f=z_^0nvUGl) z;#7q~@xW&NeDZ2BXpu*`eH>L;0m&R3#i*auk zfjxf~Ws;mc`o_>Z8Y$fO)+mwmZN1q#d(-%g@NevAQf8Hl<4Psvh@x-X0xz2fNq4|= zQ+_?D7{J8}T>8}pG##k1sm%m{MyckRA9Sy zyI5}V_IC3geRtV)g5K-nU#2UcW>w&b^bNL=bT)kOHdC#K#zMdTDcl{an-c+I!ii9X zdl`|rkKsuA>3bGo9#o5U_(OH3s`Ou{!vb!EMHUmHU9bUsmO=rJh60v(L0@M=ZHBFC zg_KZFL<51TyFi#3qpw>gB)bi0dJSv|;B;r`f!StN1ihWWKgQFu9|$y|xr$hCFL)5!nP|0WWH!?s?O>$K6G9EM z=@%FAI7x=bS?ll~n@vvA2+>oa!`aAZ_(2$=7YA@6O{iW{BU9%T1_qZ}^u zOCEBgLL+-Cg6-&gLCBNwTsMb}M8#^M4EYkvM%Ip`o8Jr8#LCWKAwq}36j-uz)V=`9 z%Tj-*yv+bckpfpEBED-A`efhslJW?!_mkf(O5H2NYoKUW_b+l)A_>I6bal1iLI{Qh;2Xg%K~yNL2E@FQs$v>eBYS&)mtIm%yB8d^!*&#kRa`-AP9_U5Sn@GkQ!AsgD#PtuRz z4^;{7zaX>}jeVh%Vlj$v9dml;R24)@>DiDt%Le7)+`$(ny4S=b7|%EZ6l zZBT*+k;@!t(|iJg8(Bzd^%f zREp&Av#feuc=Fi`##hE`Jl8@Jp#Tef@-mC1i`4<$pofE{sY|HxWh_r&sH)$tp!Jw0`L*TS7K7 zI&7wRt{jsrL4||K_PZ1IS5lmfUUP>yLEsKHAG5BE!X!;a>TOCN9g+z9m(Vrd$L^#T zMIL>tWG0rZt$CNlV3n2#nPeDVHj}7F8ERCrgP(!MK<;3c{IaOh5959`ouL%n9h_%@ z7jZK7C{L?GOs`LIhBcrQ&CF@V6FPJhCQbvHq4hn-%L5 zpIK2fv|bpHh#%1je<}1(JZ2+)%3c@cs*;cDf4qc%i1C6%GYNv`hb+z%T9)Gq2{XNC z{3WC1lHf_KUK!iR-<|OEIDQofuy>DmZ1*TY;FmHL>1sv~*exoJv0PODMKD=N0!#KX{5^rD%vcF1LZC5mmY}vxyI!v} zu0SinE*q3=a~9;V2Paq!>l0;_P}HFfBm*iVICk%GNc3v%&pcIBI!azNWLddXkHV zGWTnEJ3lY{ou@{ElIb-vB=&4$&SlwBG+jn~2M?8@LB_!FQ|f|v@`A^CHSTf4kt)|u z$uhY>&rg%|xf4L7ns@c0wWB({@i~t3kHGmwU zP}qM7Gm;|9=iw{^(4U^n!v#7618NDjg!DPT>v(TfKBZ!;s07$e;tJJlEf5Z8MwES9 zcfuy<#a_R03{<5ccm*6B@y2q(PceVbyS+1Ekd5{d6K^7vtNX5!$8t=9QvwlsgGrN{ zPv5zh8%9Htp64C@o%bg0ywE%X94m|O-Z#j}IphbTlx#4(_z}*9E;x8%nJz9-eHebo zu5%d1=#`dP9TZ6X<|{>9tpc}&FCdmKU_{xdOUkR2J)-|yn)P+L*&A_dDghgcT-kPC z;u14Tr11u5c80$Ry=2+KFbly8CvzL$8<+W7Qwq81!ZguVw2YDPLd9Mm ziIs{J@_-5x{qL)_8tU#x65CCd_|ADXMEveR-%;*6+6DHUjWSP&$PxA!jw+h$IKy(A zX-;=-jM}+A^OIW@`-c7@zAqd^-5n)g2+uJfQSVpQ+xT0`ARc(VQIj>q=VyZ zeV6=@Oh^_7ZHAjy+gl1QpV9m=l=qfi5HtY7D$LU?*_n!6*79~28>THP^)?9j( z6FPt$f{hpl&gDDA%D=s=&`+9yvz#uNng#?p9i=737V!g1Z#iCcJ=E#ja9R%4XBgn* z8+uYb`+R-~|8v2N!DdwtQ;R+ef=hT#N!=9-<;R4f#WCRfy(jZA@y9-PRUC~nwq=NH z(X`ux&+?25^Lid8oR@v{WxQo*)o}xN5$$U*%hiv8;~kqR^952hzkuT?tt=NTPg0Lt>l88BwYd|VqxS&f+LSBwhMRKQ8GU4d`bG$52Z?fbsSu@+2xEVGO~{4d5J2rm)Uf^LG9 z>iTQ*YRzIkkSAm^{HUs*_GA`&kL-@kw4#m6VFxKi{Xwd;Tk*)I%;xorj~X5mG@IJM z#F*QAS~I1P7FdnWuLi420ojz?iyR1v9k3EML@3kvpZwIMI-ypq=9UUBrby-;yldM( z7mM(D^*A0@9#7`>0p}AMI%c#uK#UhuipU@XBkI44)$lnEFs;xXZKuWR)}Qh#4jexU z)-hJj(+>HAX|v#oJ`oC_{|h>#gqL zKgvng*N!aR_%Oo2GT!YDW^BpY2ANhxE*fa`(b(Yon7-C`5ZmsFLwEf$&zpEK==m70 zaz&LA+}9b67K_Den=zEKYjT%Cd^L3oSm42d3t?%fxtYXqRUR3~MUOVY1!Hf`sL^?y z4|j>Xf#nZ+>xdmPJ-o+%BmWe71`s)`f`BEH<4@#JvlAh?23E=FK!}sZ(cw%}*rxO- zb-@K@^0dj2lJ!>mie3)-=2EsyIMd?e(^jf>0rt>m?6d*hH8C9d&T~36v~Q)V2bifp zbm=13&4FMvC+#&@=u^#RvF^08n&7W*kxiCvuh@D?RGRfy>0}6q17snX?GbI?!9E7; zzKI1p^@W}M`pZpXAr}OdkWTbEe1tHUW-00~Vpi*O`Ac~eWpM(G-=z~Dc-3Oz_R&}J zCG8*x-9X~O)M&1^SR#VIbDdiTNAlOjg1clXZReQ#lyqzx{S3=jJ1QK@^hrm1dROZW zYx>n}dLjg5p_?Ng;cJXU*&#hA9bYwZC9A`d3&ZKWr;_kM-UM`$LS}beRZa_x>C(bkv`a-3ItUUq|e9?sjS*V|>@p+OBnoV3u`cf%@^>0+r3-(T4 zbiH~rzWG>nsn-6lo~HSUP-S6}&w95nqP(CkdSA-MO1@$D$ZuHlA7F{=*;eF7$YRYx zjXyVN(YU8m;L96Y1`L*dXKHvQa@M|Jx9!oGW;x!zB{xcrY&db$pnO5pVKJz#N^^BC z#aLB_XdWtnH0EDxK%<1~-@vz$-E4BqvqZX34I>8}&ex}z7cF+}hCXj=0{T!2cFvg` zOsOU;TO{a+vS200Ro0`;Q_|jdnasn;L!`6KjcXxuZa*?0a3(z(P&i@-$!BV(Tu@s&|SVKM2PcRc`E zE|B+Qk2N(VCRr5m{ou1NWqtJb-dj?hB5g0qa`18TU^{yJcB*Y|R!i3(`G&KbWFVUO z;I+!}f@OC6LO>3IjKqij^8A(1ijUjR>H2Oa@f^FTX@~c;1y1O1x$*m!sNWmV^|INWM@)p9YAY*Pv3@)60`TCfLYs-0xv_*D{`dy*7P5ZoB{h%Ozntta1E1Gz zz4s&8;%m)+s`qJ$GEFAY;>F}Ie{0D6*^NJSNoS_Smt4B^av?g89gVbr44PnVhcM#7 zT{rUyw`@HU%jvVry(vTr_fiU~4l2d1mxUm6oS~e zdel`NGhDs4mLv3LP#+CG$6?)fgBt`gn>tmhNM3lGi#D-^AwG+#YscxooFD0@2KN`a znThpdERDYB+B13)$R&v2X|r8!J+u8sV=0i0@LeP5j`|GjcF_24s$Q?_ZGo^^j#E@f zpNl^XP|ca!x0oLIcnG{0bBpU~C*sO6vuS87w@`OaZgR`g90dbZ9XDT)GfkF-DAvrd z@$lMYdJQEG?5d$;@pspy zm?DIiIw-29k%>U0lE00=@#KC!;>EQ_a0n9hQBz>B8l`bV0j8_sAe7 z(+$^_C*%-&xj`X=G4B(hQFd%UN@8|CX`fP1(}73%Q`aq*&@6|wP+rktE$LI#PR(P^ zd?k+r0_ZklzmaWYqIim{9aRh9L9#RaVEh;;GsTsvd;uI71}9A^b!95KLaidl^i#U zis$k=y-8Qn+fV~2@W_5nYS*IS$A{tXpX!JP{O>RJp^2^Px9W3KxRtIZ;nX3%%7er0 zbpA?3rv=w>?G}aGl*hxoLFG&k4~NC<&eFM6ZQbZ!8gY*pwn!@`Y(V0IZ@gNqumPjj z`WAK>#YOXOdR9g7Ou0wN3%kTXvu$=(tD-FMEhpf76$TgPRs+;dlMuWC<8^!`%%P~C zt&k5@^L?h_zT)C|-8&%Y^5@$RQ4tzKz42gx9UH#<_R(1TOYUhcyRmw6p*Sqk36KRH zjVL~M(gi%ddvk+W`15d>^&>tdB2&w)j>qdCU8;@4D`XS(MR1e)K5x`f!UxCGXh$>a zyIH-rzVf>*zAO!3g0b`QeA>ZDjXI&v$Kk^lQAg`;H%jt_^R=~W4Hnmco>$d@uyVG! zb+;HeJxXK~J*Fj=vuw0={l&^H46{uRT$3a)ZRPDDDXAj4K-#Xy3w6f~fGgVk;h$u; zSTiIJ2&XUj-C7*i6Wu-Dzk3T&yqgZTS3yBQIZ@=JcwJO0n^Tz&Nr!!#DKsE@k`ox6 zAs%k>`>j7DC!W|B2@5+k1Z3|?P2WiJbEo+jCJLW07O!RFm`~M`;$_<{=5m)!=b({_ zma6YVD(4!Xk^VcFMfX1@4f=#!_)RJz(yD+$6|KshPq9cpmHXqwg z$418;TOB*;j&0kh*iJgO)v;|m9ox1ltjYiT=4NKi#mvpr#X0-zRqsCMtW~>e*L&XQ z`FT|9h7lxD_smnPyj;csUSEXAm(8W4(JGhsM`DFG8m@hXV|#NnrMyKnuO(uT_p(B%Hj^`$LYs@A_g%3=0Sg4POL!i(l*epxE& z{Tx9{rPy(o+)WKQ&OSCukM8@6j7tDERI@XGxJ2zBFp{L{jBo>BzX+bi@fde_m0J5g z#=agAMO(?~Ij(k<>+$F$MiE5|O-v(~H5f1y{P{T`8QO!viTL$_|F2o|pLrn)7yMr{ z;Qw<6gxC%MLfse|!PL&g*~Q7!(Dpwqdm}4^A6%p?r2lE~^OG`*TDmwZnL3Ht+dA0W zncBIKa+5NPeL1^0sX7=Mo076}a(=y8g_K#s(#FNq>1%Ie=wd2vYHV*}O3Ex{YH4oa zLdwea6(nuv@}F?#ufdE>9b8-uZT`E@$-(|VA*3!&u3r(V@`ldVq(8X-dr(zZBNtDH zuWo5uL-Vhl+J7BrC>mLr8h;I?ZfW9T@!zA%ncA8ESDTZIgH%uu;eXzd2l%CLm^QZb z{naP*^Vaq=-I4gT2y4DkuRp>OAsS{0_CSVms>O5wM@J~f-&GF7X>ex+xJV3W^oD|s zmeS*Yr>FR6y4cTKhdeX+rHUgh6_sBvZ@<^m?H&L>guAoz{`{7HYbFj3$JEl&()4t- z_KYBA$rK5<3nlUC%<5{JW)x>OgjZ`@8%2GrV$f4Ir1ifld3dzimX;dz9>WRF%kRJM z1`A_ikh_%)AoY8gHoYPutQV`7?RRRgL?CH9>@h)o10#=DxX}*}%hkrI31sL*yzYf2 zv<-fR)I{xW_Nyg9fBq~A5q+EpH7{DP1bcva6Q;+ zbyTAY{^9@by;wFh@T<~OS#P%3?C)B*{aTeNwyMt`t3_pnu;~CG`>lPzpwtpo?Q=Z( z{tZ4SH4^J$L#5<;2T^az990qkYM?5Bs{hrQXc2c*=0Da{w5ypVTn7l zi;`rj1=%_}o^eL@lvE~1f-JtoW=F$9Q$Lr91vw<=Yp}v6Oe`_v+dOm%?=}> z1xH7_{!}xbSu(LjTB7--O`pln{?17LD?!|Y#$|hz$oqJPi7gzsYb*+Kq+D@&km%^` zc6)mImtYOA2>%P}#$6vV5cu66Li~i|>!Q*9l9~3ARQ4!D$5|wI*X|O)0JI`SaAhTN zo#?63QxXQVwehf;Rji<7p~g0eORrc3g#nuB!q}{y>;m%igv`XmHx@CN--9oHR#!X* z#n5PRz@(80)!}v{J>l`uQX)1yNhuh%2)d-iXo>*my#<{~#Ln9*Vr;Gp-d9EN?Xj`3 zsltMw!i5#hiRSFipTOMCEHD$6_glumJk-Kc)SOYv-X~Pogy`eqc}gvRG|jfSB6d9H z&;&)iB-On)%WKx)OC+%pw^ zwF6tL`kuKQ`1}bN;{ofRgiN5^bhwWDAMk>5tpw3m<<-&UxR&k3&5x0h9;d^K9n2jP zHsi5`b2`atnwk~&gi5rNArft)K_*#47@{N92ygWAk@N{Skwlhx(sZ4%?2(FwX?%nt9B-iz;jw>2t%=pqq-QJ}~eZSRA%yEH@~X{fv5`BoB}IQ3ww z7X?|b`7dds3Bp(m%0xP6M}Da6atA#++NinG2(=Q(yb4_FB26k29~W0wu{VIp%a`t@ zSj+Xy>1ISu|NX5yiqO-iM#yVmbtq)N$8lNN_&vr$CC9||8w#_GB8oA(xf(QkB~*5m zthfy0B|ks??UV88GbBpD7sJnc*)S=&D`?=v5)s}L$}Kla$l)cSvIEv0l+s0G@;;|Y zarLKHJtQ$aACL34jol~wvRFp>8x|SESg}Vu25+1O91J2BWn!)n>8Fyb4z@OUFA0Y! zctFoxZ!wYi{t{t(B;JWAA&BU0MkzI*mf;M%u-`lRr~$%;mlHh@)<4J31#AoGp&9g3 z=0qyv0wJdNGTg?VP2OPfUF;U{WrjolySkr8ABrTcM$jYOVpqAGZ3M8qdv8VJszH`x zNHugG8VW;>xkf&s@)F&uVi^f#e5W6N?5SA<++C=X{&oJt0M1^h8$kPB>E%ffs5p8r z{Po=5^X-|iqv*6`<&YTxQb1t++*pZDg<5EN6h~Y}C6>l`Txd8@xNth4%i|3|`}uss z?)a$|Gnv{uQfR(-*7@ddhPgbqUV1vZplxPaDsb0|1e} z&kz*mIy~-BgdWT+dc=H4Uc7Cio~PrRev=^+Kf@ewpiu-LKR~pl&yyq}?~C&n3ME^E z9MD?HIt=xXN&pb|z<)=Z_g1TVcoyMg=rh<;^1$Qm%+iaef52Q&Z#W1DdW368qCJd% z2cf5c(I2n#MQ5?=53aJjzkNnceDaPpG@i}=X@75mfcb`nwoghR!nmB7A5Kk2#h&XC z(|I;a74M!udnjbX_wc;5A>!`7YS0?vseFp@RYD$ejF z(Q9C#mzE}mTDiW-&U`C_q3Wf@)tnkKe@v1=qr+mq`vjTw$MQvb$L&tw-;rkG9zRCG z^Sh79Ki1i_6qircK+wfuc7^qR+fB_d`-6C#;Sy6Q^ zGr&F|B(Nta$x8S~)7}CopJ=gSx%PQB{^R({S2Z5_MY96ER`%j6Y*fxRa%XQFPyCL1 z+@O-PM$0CB41@p;V0xPKPs3E_yyWE-H1ZM#4;KBx$SUfFkcaF^b-wUxnY z*F-7uGx6~}`gmTI8ETi7f9gTd*YqQo8h>~sXib}_rI=Z$RqBZyeu~zET4_-zmH6t& zm|~PT8+$13JVh9X2r$BTCxxho!5ArTST%qO@ol|G4Igc_z+BbszP`Q<`k#Jmdh?M= zOCof`|1?>zxsV8A#6ugp@!Ly`bS4gZ+qngn$Hv+mUUHXF!q~C7ZhUqFt6-Bxz~(#s z68A!$jBCqk5fcn3n{jIn`kN6Y^OP=7zm@`>Zmq%j?iObh*QC3!wr#wyt23a@jIa@N)h%R^rnJd&!L%8$olO0I6yK%_=9wlII5eff51S{U1 zmLS)OvK|l@jHKeE0TP;4=l2R$50NiwvoLkT{ED49oCAU-v zHEXl-Hwj(ig#foD<3bJGvH5c@lY5weanPNA^DnsyYi&CXHe+wH{pp~(VBy`pnPvS9 z&hPv)uT(yG0l`oAxh(O;CPpdOSf5zH3LY&BeyG$AK0f$S5CSgft1<#zX~&@pJGm}~ zG8Ib?V>LnsSRJ59HuJ5JAQKPn23@z+i2{~H0@y!9qD8d^&l&n5f?B>c5>d>aQP}hS zuD^G(Qje1bI>&sBZG{d`P~@85C3Zh9rn7%Ys8(Hw9ce_mD3&tqopQ*7@`n-&lKDX( zi#fOfmh~~-IBUD8KYwOLFePvrB{K2X5zcsT4}I!z9t%{XN&c`jfQadT?^( znTpOe=kGLAn%xMsfF88ssaI?fqXIJq2W*t9JZId$dvH4@zPsZj8mM5@D?zLgDP40~ zX2~g|eUdGlR1{%?N7sc~wHRr4HP%Hr3A21|R*G{}PsBZwx6fr7bxJp3b8%dG>e~kX z%o8}K1Jz<-D14|ne7=X^RlnYy4=#wR2o-e|^3syjF`BRWy3R+TS@Hb@{CGYO4n1U^ zVjv`^H$@hWep;+&T*CGjl#uXxWB$>T9o-Yd-icD6dsEb*f>)viCVe2^=~EE=8N-r4 z+xSb9g;AaWn)NR%TsZ2Yc?kO@)?ac%+}7cZh42|{KI`9Cz!GLRiJX5U)VIV!^%e%B zqq}KrPaQ!NTm;c`DdZXR4Ch{o#q_E3S@^3qCXdQXg#Og&1TmA^WnS-_cm@-$Tr@6w zRJ9d*=on5uj^Io`k(yoSsaYIm>i(}-`l5lj!I>R^MW(PGZ$A>h=DzFww*gJuFU(vX z8TtL=0JT)P3Fpk2RqCtLL%(h;STzAX)@SJp?v%eE^?iepVIDCV7-PmJHt8)flDn7I z$tzRJJ@!CoR__v>3S`k-1%FQ0XZXJU-*)x<9mV(SUkxd6g22I>l~!UdA0C$tHUb9tAaa&9-&SiEBY)?l4dISUGSAN;3Dehg zv9YZ37u%ZXoOKxEUfFJXTdlos!vlzG?`)L%Irm-9&MX3u15+Cr48i{ik_tM-&;vjq$p_^E}21lo;-p3hVE=3#1f|%wB9(V0Uz9w zo|EyMi!Ffr1qpPExcvC-_idNa?7=T1<4u6ztBU9kdL^F;kl#^=V>)5)ZTlfQSic)m9E(mWsP&eS$*ri zx7wSC2-DM2kUzXh$%2?-gxQT<;i&<`c1$B1=a|5#MoEx)R?SiHgV0NDb2Q!_VP`_431^V0mvSD* zUDDO>mid%n^{cxcO78f7{99U>uK=0(QDPim*TSinheF|?kC{T?X#9GlIzihpIzSwT z7$ebXh`8|j1y1AA>;1goY%sLe__i|7p-m$fg_6t8=W}P%`qOZc-(uyK~xIId}j3 zMBEXr&vnhigrS^KWMNUY?N{scn1O`6Tv6QdX@>qeYUi~UZCs;OYoeoqz!6Owk}Q75a+w|;TU<&w{rT{$`AUC?@M+3^ix>MOcCY-F zc8jhG$pmG$RiV2bFc3b_;dXtw-1)0T@57+=YU3|1Q|Zu8Ue|N3;5b5`UEpRjhn1JH zZXBwcdU?S+Wa~N(liO&l=$hLJ#`{Ft>3wQ;tBbx4feN1|SlC?Ww-&LwS#uev>;3RQ z>B%w$dV?&v4rB0iz%qDpyiU=*e+A)W?}aLnVKibo8se-Fn$caq^8M`V^ffrJlyDN> zckh|;+9B-0qZB<4x17`9tylsukXwe^N$~&54r)$>%PFQH4tywyQGN^P>bJd>ckXk3Ik%vAVEY;pa#R(RGsVnqX z&3QawBC^Q1a977a%bIR(PfH)mvQ$_Ravzq4OfG74ImA)o#VI)n8WnFc*5;3*LZc~) z)6kRv()B5g)0A{1D{1>L#F3O`_bSDO8AsPSm`^H-VQ}v;3mpuch-k8EmAd7sZ4l0{ftwMs;eG!>7R0lEqh{dT72d1d-*r-#}Je|0EcYYPbCi% zq5-($eywmvl(y`L@g7fW_Vsp=8D<wofV{6+^XmLlxz2)LeG(SCgc zbIg?$F^r=7O-cuJgb!npsJsTHY1B(qn)g6Wly?$tqY>ue-A*vnb-oU4#J2JoSyoWG ze|~;>BVMw~$+ksP9}LHk!h&`ni>;*LLui<>LoMD zWh07dbd+3zS~z)!^63j6aB%Q1ia>BzaREHwq+NSjutZk=I}nA1fiQzcRdDE(l)iZ7 zU-BMiBBNYF?YHuqwK|IGP)gEIt~dSDc-Y@7qe%xn52H8#kW-jpcxs}x6$NTtjh6o; zU$HDGL9!0YketpP;bK8dew}3UB3kQR`E6dPxnefI+W)5!d|8W>cqBWzww#ig`Q^Kw zjat>;sCK(1N7g6i0xhpcA}A?G#vY46VI*;-0FBr6AXE*Xb*Oq6?-#ylsbMKxLpqNY z+flQv^B4jyr<+^(meKmA9JVa)C*-5C3&Jc}B%Z)KMywT60$uUQ$E=RTck`GCDJBSl zq1nQsgm2Yw;ULEsJUoqo#rAa!_8$5ec1q+ZcJ>51&AYuz#o>J?hbpMWNSZV!Ce3k)4;o3hD=jbm`-YB|D-lM{a-1l2IEYjG!(1@ zx)RY%uq~UijMn+ziK6c`KJI60*=S(?i4+gn2VCn<*;*~GLKkLVOS0GuUQ`<7kBp|k zDe%~Z_d{-v-B?9P{hDtaw|7Lht%NAEyAC8q@krNG0bLNyC@aYZ8Btkm&n;gn-wSS+ zn+If@;yVr&6SVk+k&MZnAMYGz!)duhe8 zEuSz@O}MLok%_+8#3C_dSTB40Akl_RW~h#hez3kGH(2NvFe3=**)`9!(!UKF368y0 zCyRPi3bo(!TgGPFou1O?F4*$kP&ihvozrHoYU=~Gk9v4&6qv*AECSlu^{B*EfO0-3 zY@&vL0R*}fscMvv1N-W$$jHK zZ^0%E7%p5sFlGH5bRo>>qhKDV_md>8rNGz#rSJbzYH#|MC9)O;*A=qoB!1mBd9Do1RaIayI$uqN-S%@v4 zd4=DHFq0nUQK$|@WV+Zg5|TZudC;h)Q{^W6shG`66#&|?RCtb2)ZJWs#GUH-C)LTZ zvpia!1%9JD4G30ieJ!hk^Zy$%EvIZ_WL0NqF1MuY(Eg$;GzfC}REMk&B+!PA8Vx%3 zjOM%}I0a=s=N$MlU%xf{bL`c#ca#XBOQhwDqL`dBr72B0YsyLekIAEd?#I#o8!A1z zf{;(kUVmi^&+t8S0@$bMO59Ee3#8@DFBRDpJvj@zItS0VP{swh1~+Ju#{%VKF)?Ar zg{5ZKj_HeRC5R$4hT9t{@P8Q3XM}ZlGv`UtZQT!Z9UsD5qlqHt<;!V4>wkUE8YqK| z9>7~xPf6wL=9V|;>(!-SUtR3@jEN}3SiNo;TdZFtQVI@Z&&wChfkG~n3b0^+d* zXZ`dVgm4U>@ZOAh#4Gl;vDzK3LiYK;ID{Tr<~tvx!}K^`1XOpvCyc1bD9Byb3r={Z z@Ddr&gqYVnIzJ>AG7GZE#`WnN{YIJU2?gHAjtITXmdkR9PF6@DY6upahMS}su&XdQ zZ7`{cX!_gnY|3t`d!&Qr?V&d;VS74RzPNKTELxe^&)cT z!Vujlh+BjlY7ZT9WwknHOah?+J3(;|&>0FpucyY1&Pf@jH-PT!%Xr|)^UI2L3Kn2& zR#V9=^`?TU3TOU+)h+NNuFENl&O!uTI)!7Mv@odj`4`J?Vu1Ztr8DbTuJiKMIW)69 zQpXbC5BH(aY?-JP^$-}5=z%7iURntCYB;m-lnc>f@2ZkcLO>#D#gkL4RKsuOg~E{6 ztcP5pL&RqKu6V&(kZLC+=iger*i(bw&ywECJ};|pmTw->ybn(Qs*i8ZcHx2Ur?Jrs z7Z*f|BRMn|xji4iX{mP_YU=j(3PDQrB(phrc?|&7DN0dc-xqvdc|gWJ0_Xg27liq$ z){OYGzRTDYVFy=l^^Y|lE@hrmE%l+2a4l&LYa5(k$}sQshELuby->o9Bn9K}X5V<_ zc&CfXW0Yj^!{(jM@|642kAp*p+g)=TqO_5TL@HTs;4BO3P?!ApQeJLSlJnkR#LkX^ zmYyT~jYOQ_M^GHGP(ljhN}&PlZ!C=HSON7PQ&C27-x}%rgnOgGZkpW4IEC}FKWk>i zqY*3VyE{|nyZd_6fjy810P2oJ@|tI_4ZjBrYBr#EuPkyXosJAl2e{A53FI3kJ{4MT z!JoIzUGJ+sp_9^~N=^#I&b6CvN?=>S7;6pwytUE_;g%Y~aU^o8>5`tw6W)VvO55?% zTW*VK>byMc%3@PZpIy`0Tp?_W!|;Z0!_A~@__uFx20;8DX8+0zyFJs?DSgGLg^&AI z7ipNCa(m{=Ncd2)s4_L$md1%))XqS1W8Tyjhr6izB&sRNJN%^uN8mdicbS@TXtCtki6|GdURw5qW=4(|)rXTXQ`}mLx_Z z!Ni1YSHj)c*z`vI)?~D7xptGmZXBy$={A@`i{OjT|B$L1W?YQZ?>CWYe!Zj7e!oG! z67^33N&^m*oT)8mjowsMYNho1io;*X?bws-Po*06M3@o0z7DGd@^?{qzMW7(weZQP zbmT}j2L15huGp5T3M)((-$*PwaM_ zR{QKfpb$0*PzioaKy`+q+5Sj@)$=HBKC&EFH0#Piz7q z=Oa1g{uZl6tD&|hI;@-u0^wD8WTcWviO?Q*ykA&u?77&;Ck(mMS-f>WJ24L)Iyq~7!(Z@JOAt76>jo|z>0ax<}1ncKgfl^b0)UuOHp6hJ=kC5-v(Km5*>sPA+Tw_yqq z2ACc+&yDsDt)&ETgY4sC*1hQh!tfcZ1+_XHy(gN9$_<5y2LgyMGm&Ox$Y2EB1_z5Z z+m@$uDDai`}6AI!zT8J!HmZ(F)*t3o<#y`3}ia~E?axw8=)-?TO(LB zx`~T9y&=El^on8@M$Nc}5$b{MF;^RAfgz^XAu^Uaprkb6qTOF^rpYWkn7a;o$tDmF z7ex||BfqM5tdsy6gB;&t+-so?anmG?7&m-%wFZWd3Ta0*N&~Ker-<&lQc(RP*8;NR zUT;jt`ypX4S#eP2nDxkqsIY`8;qkbT1hKk^nZz;55|=J6PIR1SktVTVcOdUQNCxm$ z>@t&{zx-WIe0&b#PW9D_VvwpJF0;G$Q`t0w2}nuwY_pONx3k9_?Q1J0cIH6?EYZpF zdwc!?1s?A4QvMsehtHs}um7#Y=i5Kv&2Ct6s%gp>z)2tq-d7#3y2Bd;`2hntb{{Z( zj#yHAkGC2)WMHYA?S)+Exn-RJf0(O;6K*ztslygSrlNPtj42kH~x`SbH6F*49Q?t7rFK6fYhdxR#Hbw zj68h{ayaUk_thVd(MbsG`{zoM_dc? zdcJVOfY=|?I3X9letehv{Xc4KOEPV9+!him+0T0W@cB(FtgNhDT-cYE#i38mC?ujc zJb?^-C}RLUbeUjKg#ZoQecA--O&0<3;F6nqt6-^=?`5R{j zZr8~$WIiGO8lT4m(J3E%w;WDA(v1R?> zzYzKYvIzM+h}SRS5OGFCbV$g*PZHCikAaX=1?H(3vA76sjsjk8CG+auS|0BtTcD%a z(fHV{_cxdh`^oh6*t)rFglKKkmFojx-7bX0pxf1-`kzL|f(ae(>vrp-Ykiqn&}W4$ z8X26ov!AoQ%Bvf4a&o?GJZk%)-(Os|%2RnroP~UV4mUTug1&E24UoxHu#z-->Vrj= zep6a^4z{_W3r9?HGd?MwqI&6j2W)vk2iNUsZz1$oCk18Z&DD(UwByi0dBsVS8>@H|~X_Im`AH;9Hiuo$C9>VpV zBA^$=lR_uKE{~rp&^tg(5G?JT5I`7MBm3KaH^jg|#wk>fs_kw@R}HHK%!Bccf!j1U zHH@Yh7xKp70RL9EE&+j;)2ciljH} zBlJ2X$T@CniuZQ!kndgsZ0`$xw^5@n)DNDMlGandebDWbi3n1xW95%t-uNm68EhKN zmmTUPC1chi_?OFaPk+RH1ryqN=o=>W9@inF@uC$Jw0i+h6~@vR8@<*az2RMM|H1&1 zGuu*%qWL6I!qQ=}2V48mnuhD( zM@nnO;4yE~+CDE1pP*_MyOQn8zso2Ot0KGs7!ky6UVDrYL8?-@dA{D{vay6r=+b9m6r z>zhr!D{cda7W8(m{OTpA%?5+vG|BFJL~&g>KrcpwUno1wRCl${J7UQbI*p=0`cfnV z1JYP7hV`u{;r-cqi#OLR-@z`5C&X5K`X)+l`AAIdZqrH*YGqOM1rNd_f^l0=*vPAc zoj-TI@mdZU4Bi1!Ly%)$u@Nz-)0B5gLUPAP5OnZeZsd7h2*OG$fefva!h3QH_a=5H z&A@!Ay?}nVj>2vK=x2OvCuafjrPrE{u|tViev8!_Yv*~P)U_P?)uIOG&8BIX6i zs3Ebm?+~W8ROAAU2Mu-2@B?mHCUA|V)@F)R53bvm{~Trg<-&}99cSC~o(RjYKmTRC zbizn~8OzPwp%VVVL3SJ54W(k6RKdZ-%nZVo)Q|P_qucweo6?A%|L&pZ@NZyj%nOR` zjm=URJqHSlWeuA@Paja5bDFpcktrjJ3HsB1XsC${jyu=LP54*V%B>e&U>Wadpg6u=d`U7E*zVvPxPu0a>ScUSz4Y#L z*0ae_8GLKYSm2IUj! zW1DG1`mhE*luKE#MGkKqpa5|<*idbA0f;Tc{AW4?_4Us!U^$28n~9YPd8HW{J@i~5!2v@3FCZDSNs97V z;EhY;s$nrZj^T?FK7?e1@O~P&faxn%M1mUJ{apZZV*%t&&BSibz^}bWx1#W(Hd3%V z^)}m}6QUIi0zHs?$orQ5YVWf-dD)By%0K#(e^n01&wyI-{mmKH?dmlyO8d=Bqti$Z z9h#E5%caqi%+L8^@qW>sZaD;d45UKf;Up?je&4qE!)Tg65NA>A%-EBrZJ(O!9Tbrk z1eR@nbgTaS!zpg~m>tcH9($e=7g>HlT*>BL_d6ygFE>vrL1V{2dudwii%u3UXeRnI zTTHF5^bL2*m4#_~`1j_=vi^t&P%*bf?Tn2$|Cf=Z#1^g+ipBmRpOcrV%V@%j6|g?_ zXLrQ9J4(^gYqZ8xLfG^V56P#dgE%muySy)gGYBE|M^-d7pKx6QuFd8@c`-cpL{$|Y zAQ0!aC$VaL@~^j|(+_C3l>AFTwdAuCf#9Bl{RlM)@vT;K34ag(N9mJEQ_84$*$yeN&jji}m zzX#+|Xq-Lk(f}gAHG*D@U#jm1qoLuPMH}i!+q@!e6bhy6u#ehB)CK@#L*P^@#hr|poSoV{*t4_#&j7+fCCIcL~i+racQ%|0=b8!Y3_q7 z@0A^8$gC^KE%rZtQw4MxkL}>$E_?{}l9b;4y3r1v?Y0GvUmne6yDYg8y^*&#hb%aE zjoZp#1Y-)hIulM(UYw8mpzjYq)ovSCp~MN&jiQ&+gLdyScxG<081Oc~R&msvL{{_S zcoBP!nVF=mn-Z)gSM524L=Rq|y}0n-BMjsdt!s#L`YLY>g*58y9c#dGYEOQC3t{uK z%X8ULslxFHc-aO(N6w-dlw@v>%;HMhtjnqql;^be(AaCw5gL)eEX1t!@ z;4Xw1TWYhNvkr#7`DZgkMw=#) z(>=Z51tlj$d-aTp!bhejaqSK#y-U(+K-13maH^Jwl|f`aLV%7HuZJf?z)Kr=yAcH5 z?=N&MbMND=>~GtCGbVd6@E*rPZVy!VoSj3WvT7?=W+xaX19*Mb^g`|86XdW?+zMhx zLauPqr3GXI@4uw;f<_pQ<(u`O9rOfQch6}KMUv2+1t;xKjt3E*BzvCMN9npk8t^y~ zy=lsV7dNaDY zCm%;8o-t`XwfM1>qg0|vYkd={(+o)-h?=eA?Mk18>7W#dGnz4IB*9U|C?65L?V67A z1L*j}ZE^8fzwaZ+SiAQq;Lv8nI#IZxTBoPXfv@21cL-%dah-%eSG_{lU<9^*Ri9>? zg9K(_A{}{~+N_rsb5P7*$RcrY?KhAW+x%e~)KeL}`9#5PM5~{;R>H1BnO_D>MTUv; z#RFRPzjzqv4qO5LI<;$8vjE8B0nl{C2DeLbgf%mzB2zAVc9a+Pu}v=H`bR zznKQtx(}|$jxQtEI@M@)+Zl{)S?2-vR4b0p?vTBL(izWPz8?#9igwvedYRR{4v|s3 zIlKH-YOxNfkViUynah!a9Q&6^-pAFrO2#fFjvgAfHp4oq?HsGryR%k-rv6`k75NOD&$8O zYm=Y|C#|mO*5G>|rw+q8g#ysP3r#fkA4uAwJ)3Y|yM(C}Lqfg!aqXfHtE)Di=#8Oq zT$h5vy>&rgrs|oC+mQVi1YcV%@OnEE;aUjR9)?FwM1?_}+6t=G_9&<8wC)-g~)$ZG=yLVrASL_M4yfSoJtf{9#+k ztAp?_Ie(RA0;iCh1N2rC+mlV1YgD|yb04*3))`-i0is~2jJfJ~P&~g!yNR`>S(k1* z#b;-t2S1D*NfljXm-hU0yIinL-n98;Nq^V)VtdVs^C<}Yo;$!c)LU9fmmD=VN!=xa z(-6p=;CVq-jOgu67WL!wr{ZEo766$3euhhUl0P>2GAE z+ho4av_zI0SZshJA%AnS59_L+h0*OhNQSQ;-zAFSS2Zkvt9w-`Y{8|SLgYlZT;l{u z;?A!G2PBsERZ382jF6<#Oml{Df5JA2RLRb!JRbBSp}NTXFA@XjFXwq_t)Y45fhp1M zzT|PsYX*-50@G^h>SRy1)4f0j%TEah@#Z3#5x#%ztwzA__r(?kIC{>(41q`_uWEU= z=FqT;@$ag?6NOCDqXPYD(_Xm2cSMUMLI0d`k{;zIVC;vUn9--0&xvBppJ}mjfrZM7g z+UI3_AOd-P#Ui5kMLFE3`~h3BFj@=xizx=TD$$i=wo~dy5q5XinvTTLT+^zh)`b-G z%}lQcT|BnP(Tr%82hM9D^dWqyw3rj)nRc%RTgs9Sf^on|{h!z#lGB85YE*-NFGZ>k zc+);GHbVYtr;%Z>{kb=;*tGhAnUKcA&Kht=rQofH{=SW~OR1=hQj~~lbg@fFGEPo{ zDG#6I<*jO}p{|i|HtSF!wFPpgk3K@n&1b})KGad3Z{b$TA&_flUUR9Fl(+jhC1aUi zK0re49VxyO`WeI!Rf(gD1wTNFtq?|sQO_>OG3$Z3L3ICqrjA!+(*;d`#R6Fl?vWtE z5Xx(GL5D#OR82G&q(aaf4m30gPfaaMq>Cr3XDT)y znb8Q@8Na?(h{0xo$B&87BRiNoSYK%y0Bw?)IcUV_>7Xf7Cbt`?u1cNLK-p8c(gX#o zaAX=4@q(kj<5RGK2ve03E|gT8Sn2=K2EIp1)&IAQK`P9FR zn&u3@6lH!SWHd|e*pj(DjdHqS2hvM+KnMx5f%Bmh%`5eXzzu6Q&k&qeLWD>FA>yA$ z;e@fp;1*NQ1s+z=)=#*ft|s6nqU{@+-#%~gHtm>OaSY_&rXmvOGBn35L~zuDL(W1- z&y@ZsDEJqL#Nz;&MA?5|TtpbjS^`T0?3Hg;am@S1pcdpCU%0dd66({6sZc`xRiTQg zhwqfpnE*A{6$7ei^!>s1l|^f~XtLUO7)VGKC5(-ZG&vKjRvi~*0_ zoCtRZT!+z{G1z!Tr&0V)2nCQ0^Tu_DJ!rM~rqSkP;>#=$!Sux=h=gs1*wTv6DjhWi zBMF^Z;HiZDt|W!!9=5SO2{{bku+Faq50X?-d&KumWPg3>MW%#9K1g*C>ZG8F?Nk|l zijq3yI(foky^vH&?kYePr$Yzv0tLbW%FeKpifIBt3I-9*Z=IsUPA^2lNF~mC(n_P{ zQ>S=HxzOzaSZ#;P?&Zb5V#MZeL817OJ>RB74{>a+-B6nXvl&0h{cy#X1k(GMYqM zlMT#}3_TH6_f5&Dy5I8;6@2*jN#WZtnAou2VndhJh^?~$YTFdEx;IOKG=*-9V`cE(at$hYuLKJo=f zlCk4KT@SERny!Mu5ap&r2EbIS|@0_zG9d+)>R0*ghk68WAu@)98|IZ%He>4z-fY#^H;2+F{?*f8d#L}gx8h5%8z!?@Z)kAgsMu*odEQ_~@6n-cgJGzNGo?moX-O14J zt(fe=C|#aCGr>euTS1rrDs&;y_n-EY8%y_OzaLL-bxG?31v1+lo%xGtj8Nbu8@1(> zzt8wMQL-IN*J>0i(oT6$po2Uw@F`t3U~=*KhQhz^KGGeiQwg6~U6JbyZ;$K@Vn0aX z<1(;euh6ZnY&_KK0F9sHCa4F|e|)^6B8R=LshpeN9f0q907c3PX}P^ZJ>nbR;rNr! zf~gcpUQVg9{+uliK~EtsIDqG}X9U4d*8Muy9#z2w$vOS-%5nx@ zPZ>2OxLd)+@JHu(ebGIEo`aHh+DDfjGaPiW**PvCeK5WG8)MHx3estZRmyifubmjE zTx;U_bl|*NXzkGYGjF{3?iZiDaq=zmK^{6rdx|LdgML$`9#N#tV^U@B7Y+{xLb5~ zm(1C^3E`#@We}c3=uD!_fL?33(=tS>)M~nUZFI~cb&}>)MYSUM9;(`Am*n@m-g*aa z#S|=Y2(@D6RkQ<))HJprC_g?|)fl>HpA$i0yl_dK`on^>cvb z%xYN7V(4|()+m?#-KacCsrz)H1PJ=dK^e}#W&Su_+y8NgrrDcY>4-lo?5C+Ri$ebc@bL0H z!vV?9J3og;yJ3xm;Q;1~UpZ;;7rvo1{;h{6)=q_7oxu}nxzESWKI12S%HjK3M$gxR z%f@kiLIVhdt8!~Z0|~C22#ePRUT#Xi>BTirPSS1M!#GjJS6+)?4^$Eny~A#US8(xZ z?pfgRNC6Ws3=&iP1socCJ-QZP@N{4Al+jP*P-v>dwvSam7R`b}5rU>if)6YoiuIaW z+>D`Q!+B*1;@oB{z=yYC`!nKPLb%L4{|90399`S9b&JNfZD+@}ZQFLTV>{WgZQHhO zn>)6Rm)|+(yZ8IryZ606R;#vVjT&QA&DG{=qx!7g*C`uI*)KbHjlxaHt^==34{Y&02^2VQsKrBYVeSX^rnEV+##@#! zqV>~SEQA4Q%G`4{!pVi&oy4N9&%%~dqJ;;%t>%T7)|9v>bJZOv*0~xQh*IwIwcayE z@giG8k_-;>R5-wYA$TM9va!~NppkHe=!+jg_fOYv|883Okw`R^$enM(P%P+tjB)`M zSii$PfxJ?}e`?PD%O+N0zT@RalA2vE)JVb{58mdwkAF*7IWmp1%o3~%p-Z{+$M2D# z+*OG)cym+e_H;~Pp0}+5Iug{2aM~N9cMYHt{DsKdD2#nn_Yom|o(aDbC-2D|SIay1&rVfrAkZ&*xqQ3{|J+!InlLy`G zIBnsy@WFakwf?*EUbE*FUcOiGn~de=RS*LjKB1!;Hu(Liw+E%|ZqyCKGuy-!T^Y%T z0ZxQWw?43283M(m6#jdOfBUWc!9TXmJI{xxSdKX&4SuChuJ$A!u04Z&nb&$G`NMH8mL8_bgwtCvHv$PX;e_2%&DC-%ES@s1B~I zaom(Tt-oz}DcNy?lM;f-9_z#&zvHt)fRBRElVd*o;Y!92WhEnqNB;s>l9b;M)xu@d z+<6|X4g62l6x<9!6Vn0#$0ak{cMhV_AN`2K(}1H7+_nQig_y<+`!>pTxBir zV|2!HEdb5LvjlH6P950-~WE8dWLgL81eIc003&QY87drrgNj@$_e3AHNP2+?owDDZ- zcyqV6lB^18o_>PGmFuB|^zS)|J&eax$C5Mf`|aVHJ1yqO3PAGR>ZusvqxB=W>B*yE znCOczQ(mf@>;`r1iv-R>P)XGmiz2gSqJE14INgxT^+Wa3RozLIS6!k zn}Zo8%=9hv|4uT34%fHOBS;2c z${#DN{52e7CQ`*oN@M7uY_LyVU8+6eG>n3lU^Z(Pq|v|RR@kET(dS$6g#3U_E*C#+ z)#Znjr%QfZgB}bmPFaX0?Cb6Wf`$Mr6lXeZA%&Dm2|+fRuie)oPN#!CTE7|w$Ni^@ zI+1Qk3Va&$3iZAdibK)5^miz96UvQNf0yh7)r4_tfE);eKl{tp{8p!%r6feuQ<_Hv zBW3I$c$t!7)&8z#p&(;}Ml3+(HOdu!f<^9rddBt($QutaGTUrLDamdQwf!GOA-FIN zd?$$CSsy6g@HI@V2rnfCUf)60*HJNx(pwi*Jt2Eox4Z^t1h&v_n*=7zAR5UJLMfRt zo_lmBabBeFmt?>m_?1LR~AiyEKd$?m@>ajyv7L$&Z5HM%>f3yI)MibNIXGoL^ zfC+>gYWLg>y00Y8+n?B z`(DSM7ug8kwA&l~EE!+N?u8@xJQi=rNiC>{6g_G z=$$T1-_cg+X}qitgVRRs?DGHoRXUM1M9ZPmW*%-h03B;{v}xz7-*}*D$GORg4$VqQ z|CVzAj@a`Ey|835?5fbtMa?N%W;%1C^}Cs?h==Cn^dmb{Eqc z5xT~J3sa=9JdW`#FC}53o+3R5>XQS zSZ=dsQU?ByM_66nVVYHVPWvfSXz;LCjQdjQG zze&jW&WZ5e}q-PNoMQtMi)gB>Tic%e5E95A;cS~MwI zW!lQb2%S9lpl}+nOT8kCg6{6v3p)Xf7B3RiALpR_&OtxY>z#JypEMn3JJVY|YfM&v zNsV#C;*c$^NBfY++0W5dJlupHy7?f~tlgRDGkD8N z{=ZM#$ZBN^XPjZbmasf0wYT6op~ZL;DlY=uu@qwf$>SLLd?nM+c{slBZ(xUb=9*#C zrly``#sFWwq-mL5#@P%;w>3Kj!@ncS9%lX?QLCoI3G@t9>%pTJ8*E%3$%JN1ZYhGV z`|mtek`+j^)!fq=l$cbc#-7KlTL(;`Us#ISZq=zsS>AU*KaXwGyq)L`PN!Ts%6VV8 zc`l+I;oWWwCakiueKXtr^^LfH%Q&+|ghZVUWG-3SF*mIGTJrd! z_o%_!zVZ!w=V^Y>!}O8b{XbwE9RCg55cr1@%l02~tN*|lieiHQ7ZgL5fQf+aKO|O6 zj0|l51A?ehb5&Lv!^_r+kByxLf)I!7f+S+`OPmF!zy(o&lpx3(Ohr(>Fj44hihxjc zQW37J@>@mdsE2s!E{zDUr$s{%Ih=x>+IrsRxQ=1tc%F9cd3{XF-~#sZfS0415?}!s zO*$Ae6arR9j#pAoL`i2SBJRwma$58QOdL`4Xf^#>Tc7D3eDZG*{Mzv?W2n8at~@drB1y88qZ?Ba{P&EOZ8Xrb>{{h+7Hxd+P`@tr z@{R4&A_UL^;Z7uLvlbm3LrzFKSCrN ze~H0g9$*|G&<$HPXEFD=ZMg?M5a>|H1OI{!#MWcF&PsIUj=z7RO1ktT&=RkrAnRjbLxlQ3*QqO$ zCME~~Kgv&r02B&nDo-rILFE6;E)Vbpfs%aMQl;7w6Z8CyKuL>3w#zV@O6FB zPZpH^w=a3pqCDt?!#Z7!dlIh(Zkv2!PEfTmd?R z)A}iO$m%ru1|@Zzm5^K#yMW(><7-nmcW4!nNqdX2=%Q<-G3>P8xk6z0R~$_VgYx(Bk!;SPFP_bBYePn zkDc`Nc5V%5KbQeRxp&Wfty3EefOE^BdW(#_f`9ew;K@3XywK&r?J#@m!%X_aPL5!< z0^9Av2MDnL0lFo?lnyyp0ab1%VOH7+OVf{5 zR4up29JC$2N?;~eZBEM^`wi=I7@#=()UY@ecz777j^Y>SM6dCxb|nP$PpX!cc+>Z= zm9Xc7ynl@|!y4?tTLT7eKr&~`gDXg|2Z1Q*b4tO=`v|lg_E=ls(F@l%>ki zS;DDurwgkKuL_ryY7{ogx|n6sS*AkKr;=3tV(Aqc~Nz6tfC=HM;n_gg^hhu{_GcmWL#X=7Px?Rg1O_GemJ=ZKX?3 zF{CS`x1~?8JX`86dzFdI)z3pMBbn1Iuje_do?{{#r85Dic^wfQ$sW0zcCcz}Xl7Jo z73oxV>2+vyNQp^}sE{j|g~+x|OJuR?NUunyRAdx%C_dNzP;bx?M~d2uLWupsR^Zux z`y=N;{P^+sqmASN{$P9RJ!f_ber|SNvs|;}YwU-;iaCfO&9-W2zn$w?_#}QE_Yo&T z3?I{J_Xleoa~NxyanoScc-6+(8pV=?W!>CqxpYB&Wp#&r!Y%8T@-G~6aac{*s&Uqs zMS|KdT(r=n0V6Q%EjHh&s4AN8@W-k4w(M;26)){&|vu*Qj69Yqr zX~Slbq#xL{6lhTs|u0|Qq?9^x~j*@wq?*|m1TGv3|1f31#2p6+x2*x zwdS?v3>&Qrc`i1tIGwgF7SF})EnVxLwQgq=i^OA!vC?n_SDX_#oKUY&s!;Oi_UO21 zXk07Yoyca4EJlyVlZb*It~QQC_Dd%ZdQmIsm(*aRvyo26X2&D06s{d7gVvzdNyjor z_jAi@DyOY|kCmuX)@hqCt%40US9sSn&nC~%&|tCj5waLAYa174PmcF^@-e1f$LwRs znHk+HU3cBkuCF_no9UYe5R3F)I z8Sl^^uCG12tH0~n-`VYeGJ%W%#ejK1JwT@+ts(jY1OvkZ(gT|UkOL+H@IzCBjYE`! zor2qgr=e^hh=WCfs^B^XSoZJQk~XXDV{SP1j)_hX9S}_r<%lndOyVB@&N}S}7-UXJ51`$^*p)mxt!f4Tgh^vzYtH{UUXBtq%Qfs)N%0)3A3W{2x8cZ-PED zfwYPVV)62bp8!C8ctEG92-ul2Vcz8Ba;*LlwKuC5{VhMXtBNuh=g&pkD#b0dRRS z_E9$?A#%g%ktu1sX;w^J!an&(3MK6F+GIW%sL4$%=SnWhPgfT|8nc*5vZ|R8Y%N$Dyu&-RjmmQ+6wNHoB)x)JIKp zqeF&Qqi~_7p!n)c>-iiWGw`K+ZMF~@iQG#*Cuyn1sY$4A>0Y*Y%wSEifLdi&;kGoJ z;#%p7rhRj~TdASZ26!Bg^v+C{a z_Y`?l%q{O%={1M7Y;EDScNO=S=Np5&i+x2Ob0NFxeguC?9nuEs40Uv0CSTZYAa@*V z7m1l1>JD^KSIkn0sEl+kdegiIKCP&5DckYodgi_mu$QvGoXM}}ZG;lTvEdoumwheW zt;mR_iA7k(rl+y!H07^1w;!}G8|{r?op+tb;JI>lzXzR$-6e36t7YeBX?m4kJN2Dj zfmsM0r%f`=V3jcQvUBZSOgSVH^bS=23 z**_n4WqR6OAMady(|;458q5(#iIK*@;;VhwzQ6mkJ~t=G1!ObxM0vjLVt%ik^Bwql z+30;_-gX`Yk4229Ow-9Z1vxc#roWVbHa$4oneFAI``UUK-5;&=e0*D;rOz&XsXjGd zZ{0n=UAy|)f6lJrZhgKOU5#wZiSWGfc=9&z>3zgM9Ew~&)Fjpv?O69L`Nq6_)zY=p z$c-o5CVB$GY|ll)0Bm1^`NhEiG=N^=lRf2tCLs-KwDcf;`u2Suixj1D0W8^n<1IkC zvbh4Vw;}^jo9pqQ`k8|P+-3tfJ7BhhNl!3oXC@)!4LCxbI_T|qx|tSKg6?jVcXw}x zcX!)y?Yi$10>H+9F;Ni8gd9iN%l|3f6K_|yKI&X63a2->;*xcSGJm4T6fjf0Wk$5h_n_dh(sEdOPxXyRz+{6i`1_~Vc9 zU;h3>6DIYm_#2EU;bj3QaLZRswb8+h-Wce6`Jn3AMG#84W+G@@f_f8-FoZ)!Yb z?{1=A6MsUdZRY&0_WQ!E;DT}ITl)&%R&_XJg3Z~dp#Ko~i_+Go{awzS(~>2MvO%2^ zJ5}6q!8Hby8@uB0wl-;Tk4Dc*4J6gM?a1j%{=!N&8C7?{#C!MM&~^Q&i96xCsLrT+ z8?A*%x+4c`aCW$tB9_2JUf(qUur3Ks&_-uSEAGmV1)bU^p5F?zOHshosJg-5pDLOl zV4C?^$js7RPnpH+@cm53;oxE8uK{_RHf*~>%AnhPZKKXt z_-}NT-lZ$sdHb>YV4_5myx)ms(^5ETi?lmDM=T}g1bgGaaF8eus+JPVZ?!e!u;Y^~ zF~KPOYUjUul8e z+^$PbYdy>BuDrgPX=aRsyIrA^AaNU{>Eb+{8!4b`u`RPkr(&ksOCc`Qqu5NsVpQe%`&?w#+EHn$#(-O2Z)Mv_wS9GYvEy1~3uFXCH?ikS z4h){xWYhQ*a;k=Ftc{%of4IgRzQrYE+<`U1PudMVcS0#IsEu>qG?{y}@Z{BFrm9#H z1PtArTXfJx>l_*S=&BqJWG|q`LWhN(zIXN`M$DVL$L`lB*BiyDh4R1@SQ+t+Qedza zPS%iGz*{8`F70GDbDUdGlSrCNX;&8#K_lHvWh{8BeEbf0ePr&va0TUa0V$f{cy-|- z5$!l8b(sko`>o^$v~HIRzww+&j5|yc9-ot0bgsPx)ju>@6kr1P-3L2>m1(ukaAwwd zx5Ic%jEj-vBqIh1MKCUC0fyq;7OKiF*UQ)(m+DAMW*ks0%A)6>VgWIEcWb|Hr}}uS z%m=p)&MK)O9x)gWk$OW7IDb7}RZ2y$q)C<7q{Prg?r#Aax!%pY!ZyF7=J`P5cUwYC z9#oh6=+eu_jLd3$rf_;?;mMEtq>Hy<=Pg<8*GNBIS==uw6CBsF2K-jMs#YqkI$TJ= z^BAZYKSV6A%GGVcDG0@Za zc&qtl%E4Zrfv#Df5w`Si(KMLcj2WSC-lj5JWIbBJ}8w&uQx9e#V2 z+~pNDYW?})Ir__ohu$&_vNCG3v`Oq>Ds}p9^5#plVuY#? z7cG#<8h-DejYmeG`h;E_lb3FwuG)zhmYuxxpe+HNFh<$wrhu0tv_FvYBbKlm;Re2e zg)s)z{I;>Ys{Zw+1_A04O67mU9=NcL%XBI=m+UZ~bRgT)t!?9K@Hylbxyo=mXND-y zR=NkI=UW!VP{iiFx>X1ROvff93Huy^I+7%Ut%({!EIX&{(w zyYA9ZSAJe;_IF}rDalXf%IiDZeKrGGsU6y7s08tn#ZBJ zYvHVA3#gJtL@Cp-4??)co^=4Z2xBwm*gtDm*BrhHR`1*<^y10`u3q(Sa`V~9t23~- zwzpw=8nT7+i;G4F*$h<-5GH__jR!1K2jHQ*jXOeU>dQDI$>W*42T{OW^18WRlOy z^FjMvwVCCDt08V#l)&#!CtoNEXoHsX?#e2ayt{dQjx+^nQ=7Z~>DgT$-<$YwF|5fr zc!M&B7QxTC4GlB-*dvGy_d2Z)G+!rCm;1`7wrA&IZi$*rURGxy9Y}IV;mbr2(XRx$ z8W$K(dFMUkS{eo|dz2|JMf1#<(~>!1t9h14ZZg&?-(2b_- z&9j$;OWeuk<#|%JI zdSaO-K57Vh(MX3D_cTPL$eOyKz^X1N6hiu1O9TcyVM}b)pFG4^Y_hA2QCJsZMx45| z7$-(*q)H3jzgiQ2j9v-`tHn|d;AaIZwOFD=V}T`5?j7xuso~Q?J|o8_-M6_MU(t#I z=}#&S(aCq?IIJM3+z#km)Udr-uW*E`w8Z4uX?5VlB#fK#D~f;1EjaNz6TYkvBrzG^ z8o^d&sTLV20_rX0L;u2+o^^_V?N?M|4GFJl_V?RczqA!>2LRWAv~QtoUznX>%9k8=G;_=tCaUeLLHeWdLL8{_N!!%p4Z9F0T3=ANWe+ct@ zv;0M9Lj3k47FRu*H6i*TJB#o7!|o;3#;|=_3E_dNI}dIVd67eZc?dYY8ee_;X|`Tq z`t(N*EQf8obP0)_5|l7)7mRRazqMSyM$5Pmk#RjORR4{UhoM)JX!pw3!6X^{D|jK9 zP3X9O72_Sc%5miDt8XJ#P9BdwwKY%bz&t5K$6pGw12qq9np_57u z?0$xqdUH=h9*Gt6?`=~ibXWYn>Wz~@v)W4oXxtUP zZaX`@g!KH769M|0ktL_NZW>Ad#ID6XHtkn5R5$L4y>aizQ@h+;Ulpcb2n{Suk+P?d z4b!xvWKXw-yM``8YT)2JmoHIu9dG3Ux~v=LYtcw|arwup+E)#i>~}nMSNkd=YJd1G z^;vM{UJYl-bJdlx|Gba8z+WuVfQaO)T(1YT5AL4u%`eDHWyq~i8?kX)_i6?MU zYF-3pav@Kr(sjni9nJWM2$)8@F<$u~8#p1+be2*-U$*vSB&UA}EL=ZnmaE%U*`Z~Y z;i6EHTY8;#oBO@QPX91gjmG?|NO~D}2DrUsm!7@FncS1v1* zbo!Hk9*kfAZgH(xHZU_NOG!QNiR*E$Y9BMew<$oACLrPrKe&gbfm>X^qhJ3G&<*&* zVkrbOMgUN&qW5em=(?UFaD`}zfbk>Iw4pjrxIs^e-qGmT&EXKT8CmUV8i1Ndm9p7m z;cOaS=L;bejGC1fkV)rn#cI(|YJb+xz&%@RNEq3Yusu{xv7TOXNED}&0nX&DQog0!WPr> z3=!1=4|Pf|bw)0dBbkQLOrW;EpBTd3bK_8+>~|%68(pr=)nMU}tD{Mv4WHi)aLb)Q zztoeXN}oWUa?UED@sH8-_?8FoH2Y-FWkVyKV1`Lf1>q1*qztKllu2o?xwZYZRA0p@8gF$oOx`wBS42Jzjo=LH(aq&W+t|GEV&GBCq;PyZ@} z3tauQHH}1VG`h$z5n4+9I;WP zHoAZ)qv4JnZiwXso1qP(W15Wf;QSfL@*lezfqyv=-wMGYesmI-JEQJ;D9i>_6!%^p zW00xxlQ#MZY>y{m;~dNWju`FWL6u+PgzYej{6hg4d4k~$JICa~m{0t3DREW_kte6- zp>FTqSUB%q1AWA)5$-WHI$9Y)md6BzSBy-2^L7>^r$op@P%qFaC>wB|p&gcE_~a+u zqK#Oi#B8`z4sY0b2M;iD!bi+~j4~O^;ZBQ!Kzbgoxo;9h>@W17h=ogW9^CnapK+r9 zn&!{A=n;cgkL0FU9xAVvDu3@qje2GR=8z9<9}9qKJE?b=YIUN^sEOMWoCXTiaCV3P8^K( z9Q`C+(v}f5)ej@xVAv#0Q@PpgS5A`vr{dnIisC%rg|Tl`g|QxRKdbe>?xrAA*|DFo zVh*wH;-d6f+;b?a43N#`uR_@df`|)eMY+(2!fvqBe||f}|9cR>$A9mLeS>k(Rw^OB z3JtEv9{H@b5a+Y#eEPBn8x2{c8AW_Hg8NAo?cmQl1NcwgFTMW^wifpWosavuabjn@ z`>AqSqDE#5tkXaRW*m35VQ_*)HCF$c`pVC&&HSAHcM7OKuKrn*e|MlL>IpdUMbA$;<$H^F6n{xSCT0hEM8x{ww4yqx3?q@`vtmr~J{5;U5 z>^KQv%2`hN(K+Hx1HL_0e#din#9-9#8)4x26HOF%0mu-G4>$=s=qo-$L8pJmAZE*j z4(&JquXWVME(_I0U*>>q6m>w&lbrVN$DF;Gm2G{aGw$xaM9WD>T48#E`@xNz} zu>hQ-4?C%UeEtrgE`WtjHZw>2xJv~@Q%zl71Ako3NQPJp`3(9VKl!$0gUe$825O~w zjkPI@ac}FYe{vH2R%aaRqzGqSMih&((JD6bfL<7u7Dd}C5rA7ym1P5uzWNAA&&!w| zZ)6DlaPCPjeqOMYs?qI8HR4J+{d_1c4ou_FLRK0rp7xE>t!2RXib7(VnLn+(vs zqCIiZkOB>%gwTPEf@Wt`-!=GJMdnpO zj=L}z!~#Cg>b9WR#2#_Oigkc$Jh%|Hp-b$GgYvaO5WX*2x^dNrJ>)u@;wxQKD={Y2 z!foRI{wPmu)FO4VcJ#sr-N|n#mMKz|JbF?xXtNF{#-L$H$MT|L!r^649A{nG3% zf7Rr{lih$Vp}gbJW;n?NJ%cup2_?4|iqqakJ2W+-MIf)mXjhHykZJ_tm7m4v~8MO6+! zB!MvN86FK!z5mgsQ3)F)m(#xa9nBXR60xsH6;`vQ+)GZN*Iwnat zFOBkO$bkaw%KkyCh~LPtR~c55?$R6nuP0RI8M(-QGMli4-vbW}d z5eib`fSG}`e7KUaj<$`}n}9`ar10SGE$;!$(NX+_zkMwvIwY=R4t!iBNH2sm&M+Ai zOQdLBf&EKtwQQ;8vWQ9-j}1qJ8d5QZp~neOmJ!O}!nT+@9Jt`#Hk<^3UZ!}4_&eK& z3FJP?K|)tA&OV|^BD`nV2UH7EF1d>pOg(!L&4Io3wx1*2;D^JlgfouR?mou*C0CWe z?`&OK>O-nHEe;Y!(A*+wk@mbA{tqYDJzz-n%OsQ*zF0r;YxYqxRl*(&WM53A4sWam zM#6<<3UnhdMz38Jaiv`qib{4ECQ}xJ)YD`>H9*Mkun<)xE`05Rn$$yV+)+qe^7_Qh z)JzeDAu9K&6`IKwryGEX7gfnIU4i^1&-PlTM>N*?q?Q)r$YC{U$2myIg9S)*>RltNaBak!7LX3wk`ZSpG(0nEE^r=S~ zFtTa^Mk=FkEC3`lj(;5D@cl&hU8@4zx2JicU>VV z(p5-eus&)f?)~w9VZ4bV9r;4D!midQ)ga`JmA3&xMxyQkX~JTcd&%H;NzAmG{51~J zg1pMD9+LmkDGjc7F(Sw>e25~U0>0F7ph~e5s#GowpuYkYCMy|VZ!FTjjW(1Uc>KM> z6#4RP78?t?kt|EPr*obIc)IN^4xXF@nRpp|X5&NbF`=nm882%f?JB3$Ojg<&wwk&{ z#+ppeRaYo;(VY^5uQOhekDoI&)=h&C4}NR3MV`OTUwJfo71O|`qYk1HIRu8UA& zZ6_S*iKk$YGYNZ5%URZgVwK$&$CTs;}J6))Lxyi?# z%kH^P>SY#qSd0hVt%}yV6F*4-x$jOz)G0@4R`$iV*b|oj0-ZHkmn2 zd$78%$`r99F%K|`Si0YmmfYN0)PnQcKBa?wL^x}T%lRtUNX5T z`gq@8xYj5&i5DzFG_iY)W*E#8(ztHzp z(*baF8$<7J80j_+$+O?T5+NvVpTB!+hQS>6?{r*r@M(TKv09?k2AH0ocGPrEgBpwr?H>h4B5izKs}+(lFh+o~Em2}J8COR@~H z+c%e&qAj5gzOj+~O>0l?)PZPVC|R`5m<@ZvxWi2Oi6CetgI!FJST85c51)>uQsc6J zB)~G{h;a;IOBUmnA$dMhRQl}$%haDeX?I>iV4yd?>ssUDPS?lo>$}tJ-^>Aovq&-KHup5+KH|O%vV;(#F?0; z773h5KfENT+PKJCP*WRG8I)|8I76$zLMZ{6U!mDjSHs>h(c2hKuG*S4xq8BxbuBE| zIh2VgNT||>?k=6v*FOX|V?hZe|1ZVKj)A-QTDOEgUrW_Kz7F6V9ZgqJ|YI!y2GPZAB(OokTVk_eM?99f-0QbP- zopR-Q=hR9e(X^(aN$tEFB=zMuT{VqMJh@ee6X!-n+8_1(r3+Y?ilUuB^|pp0XVJkO z^Yx2qU0mmR@Zwt3#(L}f986?$wNgEsPy6eR0IxCURIgsPX{QYI-cCoOKB4^~Bn>a~ z?a1)L_)oB{>vPmdSkWKGwT-wcioc@|Xr3EMR&;Wy0A)0H^Yf@?AL&d{i{D@NdTzG8 zs}Gy8o`$tf`@-Q?o5e!5t;Zobdt_jt`JQrX%jQ}Q^=s>IkCK62xOPTZ#R-3;IEK;r z_9N(&ARFtmY4&U<0QCKQEb>WEM@*sJKM_R%e)C>kuG6psFz2V{|5SGrVP% zjQ+xkQl`^Gx%6Jz+FDRiMNz)ZMAJBZfVGi;f-<{|z8c7?9~x+H|D@ zJbN7r0;}LmESQ=6oR#m%Ju9q$lt){_fOdr{anosU}WJGa=f`2 zS?Cg^I$_lQbnaTeDP~UPfX!N7Nha+yaIP4BFoboX6n@cKcZyEG%p1v%iqt8#Z z9eZ>Atg!i3htENNFS*a`i&qDKE`euS^0a^x{Bf=L_?vZIA%ywPLjbwK_~{&k0I60F zi(H4?m|FJ>q5-+|jgI5GU|N>S&h)Y#hk(an0cA7C2D7!04=g>z@3oxJV4blfM_-EQ zLw5JZ=mFWYh6LOLp>mOX^qkwR0b;6N<~3+9{fp2238pxC0-&K36@l!|n+t;nxu*2P z&ijTR9V1JrgmGFcFZD}|=#d>u$kbVRGbv6PpAXUZFkL(VW~xsN`qktiBf=k}Y;0h$ z`=Y}mBSRI#*d(cNt3jK&yoX(O2sv8et(^sjm$z@q9`Xiy;a({K5ftM)=U4-bKpK;G zUf0IBu1`b}`{_D+QJuR%-aCVuf}8##U{jzam(_tX2OccV$4Ea24M~{=VdNGBjD25; zFO!LjfnNhAj&|ytw?TM}+~ffyd0S?E<@8 zcY$M}n8d&x0-(Z>>jVW93Ef@+UL}!4a;~%{&mRB)Q{fioJ_ya-A26y6xp}D+aNdqg zI|P?1l5#Qt-CaUmGS@C8IHhj9a|(kxmLb#)pyW3_&2Qu=8oMESen*WpQE_u~TJFB8 zpUnzjgRytYv*m{MnRk`aZca#mvxGz*Y&A;^II{ho2|y&Pab;cd40Qs6Ip znimgttC*rbg38yrZiifoKP)3Y>zv83F2d&~WV&+h^%0@*GVNv>^ajxYRsy{AZ{hm6JiOr^$#DQLww5ck28> z)pnyv$0o-!t(aJ2-aqY~%#{NIeRdg^lGKkT{QIu} z{8jn7D}bAwn8T*{OS%3;ci)y_AvDR&8(JyJj-GsA!RVj8fLHSIdGONIIE-i+c)yO- zORaBv_mmiH6KM9uF%5wDLL3&bm_%@7-of4sqxw+O)r=-bOgI0=eIc}5j9nOJ{%ZJn zZpK%8k=YKnm;s2DgeF#NYg6kGippB$Efe>(e!XvqOM_Bo4AAJ?OFePe%K~!p6JYLk zy3VwZyDu>akZol4Z(*Vt3E(;p9Kk3mKM-hhkAydwP%8=)nr>>LatK<6+u62Xz?&TE zm^bhWRI*+mw3MU6pz#M}wG@nh41Zn~fY${xfS`lfs{{m{_T|U zI9C8PvyTdIS^GX~I~?Y#7N1}DyGYN`-VECkfXpjJN3HR-yY^w%X1V%WB4c-Z%9}U+ z24a9k7=&LLe4tiw)mn&Uo*AgUa1Y>>p&Wu*3h>Wd*YVIBVTWH@4&pXXa4Qfbf9HTM zZCP-DcwB3W#Omw_x!c_O7M`ogG0_W%fl)*`;vBKvxRr3OF^=YU=hWG)HWPQKE=aTS zikl81e_O^Cmb{`A4KtRF?+(6;_Fm$`Yl1+{cA%Tmp=5@E&!EZ}37^}_W(q%!YTe7z zT1AFg5BFbQ$)ssYk_dIOIEGWhE=PyTS#Cp4ol$YJ+x+H;%Z6_*CT(+EOr=|jIfm%h z1-&&xU^W5uIO&8T@D=BknE|w+eHvK?&IgC{QDLGmLsQu>a^O3P{Vgr`=^-M2vtD6# z6jYJ{K$_R4Pv7`^;!>Ox#*vhcyZ#_a%ra&$N&vs)0Eo|VWGth}5u!XDLqq%1d1P;_ z6T2d|y#eMSwHd%`hUO2b9Y5vkOEop*wor2f#4qm60TPD~lA{=gJ&vQ(LnKwb5a|bH zfmD=!!|X{Ch(Cr%Ps|cQ=w8RhyT7_C@a{s~n#wBe=;kU7K=q88k%toe+#ZUSGy>g% z0M-KC60r(T;w&MSD&XB>gK6z9mkIeRJ=OTpKY@!r>Ep&QQl;r^pnwt(q{zeAKvgV= ziQZ}>rx}n-lrm2)eQ2d#WlJFD9yg;nNnh zSU)NUFN<##p<;o_VANWGVNBR865?~|Rg}Vr`MkZm^Te?viAJ8LsUnCyge@4st&&Q9y{3_{Mwl6xPn9uIO9A(XnkAg4q-$daCb*^&=8wM%bzJWFr|H#Un%t zvCr8pm0JyDPrj|2b&fORxnnut%?uVIAe!mod-kNHJkzpM^1^=ZhBckKz6d{I)Rrts zUkLP00TysReW`obPIKci{e}bed!%fa*>%B6-~=UGkfL_bj|WT$Q!|9XS-Fm$Dy7M& zZZ5$_3z%hs=8Rh+i3)N<@X`rU$qE;@uSsx+Ul~8|*=Xm~Q4eCN{&|jY?lhmLH-kej zyhQrTF(KD3K;B>)+8;!j4?A+x9v-%i1NR5YY#Dz|!U+)1>VkL!he`ikDvUE`IxUU9 zoorp1sLq;X;HMO>r)dK`08oOmAZLg{|ITXHgV5R#CJijD_%*z`TBB!j|>S~SuihUrB4S+z${A_|1s~U*_cXso(I@u{>9wou6;L=H8C(y@7$DO zNrS47WkdUOvIP;Kcuw=vtgsj5M`OTrJc!DV8^Dt`6X>4kWkaI6G{)dpxBsd%3N!%; z6SBEHKrF$_{k0SrW;NbtaFx&GD(wb{awBw3-R@MQ|Zmnpt=?yXZWl17&7Pyg(;!?eDm6yjymTzQ5d7Q+m~1D zxgftZKF*7EKWP99Xez}r6Q~swy+Wm%Z!s}W0@?WK)V4mymOCfipAG=mXBPhNGFE8& z*&zqLU4^}t;IW?6gN#vh{w(3iL>dJEXCzx$MKAb;i{q$S=Ixu&C2KU)S%rLWKSRFx zy^k@%B%sX1`n38KD0{{DFRp}?&#*nALLM1jBz|Qoy6Vtv2l|gn`jfnO`~Iw8hbPiP zL^wU&pcL}fhc1!wW@Jnd>%?Jnxdenjq*?__uTJL|prVz|FX+TM=2hWt^}!eEb_!%n z2C}zjkETzX99WL?qd-hcK6S3Sr3sAGg%r2}AV&uJW1g;ov@S<>k%CXWN6+6c!&X?n zA#IN8_cvyKJvUF?RoiQKtLW0rWr_`dBGMEwMnS*AdxP(l4XI|J+*p}{)fE9}-Yf{0 zH{Gcy4eHZYgX8(;?7q0_l@)t~?&dYu;Ax2oJ5|4o&i3tdnY*1R7UAI%v7F(ZQHiJ^X@x$zrFF@yRorM@&=)rYV|Bzrz3; zx6|UI*W^iR;+)di$PxWGA6VYuop!^9ihk6(X#2In^gi_0dFk+Qza0YXr2SK)o4Ll0uIn_^tTa$jSO5J$bejkDO4Ru z9vLzpW3PwNlEsbx3xlQeZWb!IG-_n}Ln3flL>tGae&{r(_cz<|?_ya)1bIa(lR0TP z3QC%9pr_r(B z^#%Fhqx~HL&um3A&(6-8E1O29O79TU^Pt)+RZO(7H0zow9h=`WAzFOT^zkNGc;`7e+8FOT^zkNGc; z`7e+8FOT^zkNGd}e>QvnIse}VY$le!JeI#amcKlfzdV+|JeI#amcKlfzr4S4l8N>2 z^|AitvHs<;{^ha$<+1+dvHs<;{^ha$<+1&}U$(zIw!b{Kzn^FO%VqnQ^Pi0Bzi;`! z=sy4d8&zh8f6w#Z7}bBs|2IaJm4)*^8`Voq3CH!{3Ej`NGv+`M2(v5b+eYe3N}4X7 zG?SjpwH@#xdBQ|6KsYqC<2^nO)CeR}NxHcvL`QPHvGu)cl?xyT~?ss1A zH}lii_a`*2_ax#|czDwVFcGurSRpm3xj&LjdpKQP@u$(_Q@LWTM}lS6&1sBfXW6_L z;oC7=i|N;DEL643v9A^yk9{sa!ui@$N{nke_@)C_6ofz>8B|ygU-994dgsu(uaE5e zp)oRbEYql?eu(X3Pu&081+hn`0|~jWO$z*af>Y?8o;3HuCzOA-!GB66zI7488I|W3fp9 z)uPJ`>CY1&1L|xj#V?$5QCAD~#l;(|4(?(+7~Q=`Oy%!KaQaDW<`WfgY`^UzPl>Ay zGcWXuuPDS>7UzaR_Mc`M7AY>#BC;5 zxmP>F>@(!!Sw5AK5jK2FN~M;TooOq|tRF`1t16c(j`%z>r%FF{4~6UUZSh0NtEe>) z8&jG4)ak7%&0DZ_>=Lrq%4WFNDA2(Vdl`7#)C&Fj=T!U1bHwl@K`w5K(rrM{Qr1g+ zj#PE*#}B?RF+heMpcbGZh@mYraiIsizA$ik1w!y2%FbgtAEaB!~WWE$H@%XhN55o1a%eO>N`%XIp-uz?aCJ+ zcHi9N&at8f=sv&g(r2S(hfvz-YF8b1`F7dGGZd4Dx4Vw;?VK|7xcNFrCol<-+f-DWCgQ z`P`v6y|H>^vEbMFHHqUq0eim~i#ZxstOhJ`HD};?B^r^}+=R^C&d#r2an)hQ276E* zF>YYeW|ro}HW3OL`=$L2~Mz(MU666+!B7H3Q6vDK8)> zV3|YPy$wRpf$$UvAVa(lyaZ+TW|=O)33VyzlGe!*?EE$o^L&7OO6g=olUD6ll}_Ef zzUtuv!?enB2)J!jv1u~asU**v3|S}-*1$q2_6GbA@SI4D+`5tk32y_Y19F>5k@?zY zv(5kzUhKaMy_Y~GnD;{SFoGDJYSaiekb9})X5#?5&d#_Y72MH(y!vnJN%BPX#G8Bm zQTnh(VCzkFSOT<-E0hlk?#^KZ>-G%Jlb{H7D&&XWk7L!;J514IM*);7N(&4P+4K=; zXl>$p=^?&1R*5?#HKW#bV8R+1})fX$&(Psu7lsu=HMOhoGhb2Azd0Ub^ F25ecwXxhy$SUNXQqGUTEucv$770CBDjU-E`FhZIkUd z!sv**-|^rqqucMB%B_yHq!G~lBZ#DLe)UfY4902`8m9oLc~pQYz{(>AMJ1w%mJ@2L zU;}oyX)SBDCXBD6eHufM>csm^B6p znZ@c)SvNm0!KWkz+i_8u#s`Ga;tdQUB$vmUd_l164^`uF2Fkx=7YhF z(|N-(&;UAcCoR3pmNRGM_TAM99`J7FhZJTF%6ZA#b$k?X6>`O3!pU>F!1J6u>!0Up zLDh_uX}Iul5^9Ie&m@atN?;<|YQ-SEOF$lgQUnYzCAKwj6yorP5(q9b(XW9Dr|#gl zr)DydlKrV(L5(`WyBSiW^tGtkr|954AaTdW>z8|jmE|7w3A1J)YG-C}=qkx)KTVnh zpVdp*PW6RH-x=kQ)&1)(MmGz?{fKF=ugd3}wCdHU9rMg)-wN`Jp>qtJO=S^h`-xxj zEJI@~_l^7?*P{A$TIY3F9k?VFhcm>Ji`KeiHiK zU)j_fUqgGIm=W=D1=|C>%FHIZYS_lpI_jw`GF}Jg9DiI5ZFO+JJfas|*TqU(NRLg( zkOPqG@(c*xoUqoxdDW!@n`5`)1ZCxUoms^)4h&TW7NCP`d%rcdK)fJSZVlA}nt!tOMlHOHmx7m94=2!M z&IB?~V@ac*RQKYFy^YxwWAv^#tcp<)kesn4JB}c8$Kmpa4F{)MgOQ^Cdd321Ld|up z&!J+uQt)6_En zBr>sHZT8>*nIV!oBk|^|U8rSU06JK%7$OWw&6?^kgM%?zO!U~G;35xJalqoHb)8`= zRQnw%;qo9+P=o#xd89>x;)31Sp9IB6yBH-gFDv<*NPZdRb=vb@tycKctTlcUtx-uF z-o}kgqYN5x!R7nH1`^p#j;I$;zD@5CM*(JY6J$Ma7Yp-?&Mq{vV6;?jtvf@D(Lf2C zeTXK|w$Qs_b>`g#9o+YIHwTqxRe_&puwnfIG^jAq6T}?p+DH2A4r#sjSnl$%*jJw` z<@E<4%Z6g~eKCIeVt9B#QKqxU9B`vU-a%q@yGhfe;Tykmvo^s%h)O+A{Hgf4#qGMq zRFmuE4+1{hzd=74QgDzZW!ExYa(7M{yJe6??IPJU9#NY6A=PLF1o}q{>iqcMAljvV zbLn6EV;XYC$X0p~vj3t}X9NlW#S`9-tN3iyz#LC)q*rfW>9_5hBW@dxl+XmWy7ULE z+RLABdbtUJVHP~oV5i;_C`&Co0s{Q$R#3~VH#rs5Offt~pjE|pmzXO5EC|*rKRJ*; z;TUS!_WEI`YsazQm^$u3$2by6#D9Z9YB^q?mj*p&EX&O9Va2xY&+YgEzo6CBfF54= z4wl(+bQ7u9&{r_5rhycU#Jj6RG~T&IXizqgPD2tZ_7>(Pi{K-3WojnA86*!6%Z0ad{BX_XV-SRuJ*Rg?zt&8)M&`4XbfcVCd z9cE8xz_obAXG7~oTD?7-SH>k;+ zD>wMUZKZd#pBXtRGXd8_Hc(g~hR|*FyD{Lh!r?>-bJJQIuMLex;gqNM8w1tC$J~I^ zW>-&xHY76s?O^iM&n6L+IBpw1Q!YvV@m7`F*Y? z34Gze<%QhzZ<|2Iqeoe2d5#0HxYR*dojp0GDOe%KD`>c7d4(Cq(?R*W6@}`X$KdOX zMo*|JHEh|=0$^*&>yHL84xl8=%!)jNImzM;e<@D~f}o>vGReYRi13vq#{oQ9k-&_U zsaol>huwMKei{l=i1Sw+@KFVQ48qQhPCE2K28^5fOwC2qagib@g77}Aum=TMR~!9K ziXCzf+p9YlNQ)4&MGUq9x#pFf+h-w&H43p0}sTvult+b7toL3(U$NcJ#$8MJ2S`bZ5e(b9HrDU4} z8=*22-PFh+83^Rdl#2Rh;vvzudCvL@zZw|#OFV_{GnO-nafLZJkYp000qq@aa6}JC zay~)Zrf18lGRBxdb=M*4ab}(1_k>9=zaWc#--noU6?&@#!gpN)tQKGHUQuz)^Hg#w zz+9KP7}IK*j&)RLt_WstRoDg%1e`Z*mLNKCL{|Nu_?tF7rT+J+fo*9rE+=zrYa>9H ztV3G8I7G5t}TZo)#z9?jb1b~?0#t=3{T);P{&k{%1j5QPR!)}Xd;N|H{g3? zD?0kA1Ho8^&144C7bv;H%6_k_{$VO|sh~fLw`)?8&6#Y1uE#*&IH>;Q6AzLg1&1cX z;bJD&`X`V$?h|;zCS3?5N@24Ab}(dI2!;^jn*bdCoOtW^3WY3@4o8sh&fktj-i-37 zGZ6}^IWA@!L?XGT2?N-v&Id}s6@D~q+U^In8cmE{JY;@0F#+u_eSg+!ZSU$inuC(h z(K5w$fb3+r55Q3|!r~M-0X5%Ipbg2uFR~}IE~4CZe}5uIA3Os#zn%C*y$dLkNS-fK zglaA<9g^UZS{|z(SgZ9p+;cVupgKC0ya58UP6NMNkm(n9<9As|*-mKx;%$V_dUlfa zO3{s(y0#E)+iv*;aQE=z0p=20k$JLt_r*~QOCoSquU+%adok6|4EY@h%?DDx^)tyK zGPzehTE%?KO{ENgt+nWn&^)od>O?i1jOG6vSl-8X6BZ1eAs>P2Iy#Jp6y|%dC^&|8L%}2%SOx5X3nv3u{u9bgK6o*QEoq#A+pP+N>C%=@}+f& zHuByd`A*$|sNuRFBiLMi-)u;azG5&%p1%n&tgCDHs$=GAu^4l=9r)|gcu>>4i+;)a zQ#&LKPdw|J>p5_PQJdekOa*eu;(O0V3;xBH06;wqJrE_D$t$hQJZ@@&*kWdArQR0H zv#|In`z`?JH5UthHBKPEtvwa`=yEejJwq@@sRkx8+K7y;pci%?vfArvYL<(tad;2{ zsj&}N52?_Ok`j9xSgn;&flmne#b)PnXum;Yw<}OR zd6d9yhOPlmvPgOuWEJrkw>R3V>gy{x+qgG$iZrG@81*z4IKdd zT-0|e-lxyx3eCfXTJ(OVv$$A!?VI9d>8F`?qwbd4v<@iU(Z~1RHxT=TA@2kkBOxz4=__zPH- zyh;Dr`+U8m2g%%79-Gc@b4IE^x$#=$T-_b;yR^-q_j_Jz#Y;{>uPMG6TS!$;C*29l zieX;+2}i2J(tHM(y$s9a#cy61rm8U*P?}d*Z_d1);B_Fsa(Ttwz2jT%$9XR2d#EV@^mw zNNlsN6JGh2tMwIxUf6xS%rqiW(v5x+_y?s6aK8=Ih@6Y&WD2hWdO}$c=S(06SPSHY zaI?WatuFA?;`_Yedw5b3{}=ZDA6@((2KRs2d*;7Zo%yd-XZ~x||C3ezS5*JMS>?ZW z{=c!x|B(OVn*L9Hy6miftoNTR6h|iqV|{BVx2$3<3D_mV_42*w(5d*tE zd0q7N{G5}~ptA5%`VK_)SJKZ_st2}gZIsmT8S9=q(RRNOV{W2u=wyQyI4-~09JCMQ zZ|zjez0ASp?0%SVAZJl%?RO37%=N5?u4UlJAeY^{rT!qUm;4RfDT5gl0>9E}JV$(Y zi~ZFiQr>NM4C}hZX7WNW4TyQush)UL7?01IZL8|_smHYoic+}UCFP2(Wh{thr>*4hd z^|VCdoW?hQ3if6@(v*ITi00;kUIt3r5i@eNS*=_q*xDBiDecfg1Xo0MnH0v3reGg( z`ZmyvgoneBf~S=M8XhX_{5`%AN^b9WULvm76=zr`a>wk>V*ro)``tkp0cJ$vvBu#k zZf8?3YQy-0T5Ch?>RHg$b^4dPHj8w-;T*jNBS;NjhtXKU%vvGeb-)s_YVSFHD}Hi_ zP1bF%rOI4cm4kTD%dRI)JB^+d%7jiN7= z3SomMRbv%z!Ar{$?bLJ)H0g!w?O2}Auksc(s)OL`NwhrO*sfKL*bB1i1n@{bHAQnvLepypXd$9gl7dZ${zs&YkE^q@ zv&q%^>nS=sGvoYk){8Mql_N?Ga1@Y>_fHPQ7q`XsmDxNZahws5c>46~$>h!bcpQ)GEJBVbQ#z zneQ^@53!y-WQvUVnv?KkDFCn7S6``?ac|nUm}PUv;q-eiwd&9(4U$e z(udu(*cu26%r>3obo=H2^Q~JmdN4_}NYT(Hacd&x&&hdUf)TiMMjGc}xiqJmLe@PN(yQZm=!M^ubCi?fR zolLdfWyBIqj(ML)^-9i7(HC)Kkq&UfhuhLA*9=Rf>vAN#Eq=La)wN%v+vZgSm1Q%F zmK1yfcsrCQUc6?7!B5B#jM^>Si*n||N7@R=EDYO=!>2}h1mUvKfSF6_Z0-~;Ouuao zMP7%sxjriPJU4!sK%M5xrry9uq&|T`qpzP$_3Nibw%1-FkJ?rl zv?GW}tSTo{Xsb(B3QYAgYBbBR7t)1+aR;QM-A9kT@94WHJ@8fEpX8U0o(Q{UDv;Hx z<`QaO_gu73r+9-7CNHLc8VqC>LYc4AwxGct2VDTky!Le4Z71NhGYE%@L`&ipgS|Hn zs8zQz_-moCxWsSTbB|wcyC2t`ZI3JVarP?=GdG~klqq&mOm7&5mM}2cTVB2iUI~zq zh@zM~U#etB|1>&sh?IR`Yav`qUEX+2DqB8X-1^xO=;4h38_?q+_#Cqg#~gp?Qm4*zJB#L$rAi!ouxvJDf8IP?ejC4vDsGnFo?=$9lS#hDKV>tCnH=mxmZk7rqkK;(vlU{(OCi!aO5K=PK>{QJ%%UfwLRAf_&+ON* zc9Vq0%fE|y8-x@awC_GIiGwakT9ccvvd3ed_d|0LmRoFH>`|BLLH$yZL=caqG^N-e~+hFw#<27epf=%JvN|31%0JQhD-=??W`!{E(4cO@ zYP&AMsA4;aF3lUIh?-3xt5X%Uk8B6(`qRh|WIWa+JRLzW(FdD{#<4@%jesbI*lHp2 z0$p*1Et}0g8(pfl?eO1aeJK04>dHb>y-zPVzT<{;cLA>0GX7 z++$97>)3!F_#=BnVy-9INkric^c%& ztYfN~jJ{z%JSc^G-rM;8F!X?kfy0DB!?3h{rJTK+lWD7rPGmz9Ly!)0Fbo~~E^6sJ z?t~E1{b|x7OHQcAP_2W6okO3JzO|U*O-UOL$QOYK1|>v@2*MS-7?gt8Vmm#Qlf++! zOlnA3Ul=s}+B3}|ZKs(qwZJe5f@vMoR|p&C9ay*5rFyAA^E;(>E)~6cnG{rw#YhU9vcz^LDxK@)&Z^*R@YZF&2yjCckT4;`a9bA!59i4Eb^c?U*t|LnK zfF@qZ_2zdGO$jo%+LLHRy>qaf@(Mn!gc zui+A(3=5@kfVH{HCjPo<1q0AlaY1h=;X99PLaPtJ2{HvuzZmrqhr>m8pOB*oQ6qcpZua?jn57q5kIe({_o!r06A|f0D zk656Po_T@QqJH9d8jK|ua-fvL?8|>DkX~f=K|I7g<+Z&fsRX=NsmzSUht-bV$yY>G$2IE`GclNSGXpsZZb%Z46Dq+<45 z9dpK_a+Jr90ii=`n9BMVk4;`wY=*}7h|nMfPx0{(V56|1rv@*6HgnpOP};bDIb~ro z%##96iCL}lpCblPEZ_r4B!yb|Q%}ZSN39W|FjdbC$PirC@CdO_{wZjvvBU8x!^_Wp zca=RMh!V=P;oO>9G9-6iyR9}}1T;5$@}Ay0Ssz+^bauFPi-p#DVzKx-mN)zCCZG@e zn}zgZCC;Jy3}@=gk2PH0_eY?O%J)HE-3>I&wmZ10RJA&l?3x;857-T}g>A$lw%|B? z7s@_QvcTP67al*S59?)T0){n?R}+|8XRDMu3Kq((PtJigm%f3PnZ89de2xzg+I>MU zv)E6S9>FG3u3PPeQ89e?`RWIZlQP06#YqE$ImhYAh1oXIH$HcJrtEcd9?DHnAgnU% zr-7e8#+E}1Xqa*NAESw$Hn6M6!lH>Wnp4^cn9vj$AcEt1U{P^5rpR%Q7B4&m$- zs);Z8=kTOb-wP|O)~)7@)8{y#e)(g=1|=SzBe6o7a1X4dmeC{i&V^x%gQ1`jLDZJYuNU@Dy zaLEyH&+tx#n1zL7O5Fg+3bB55t+EE_S*RxabL|txHE<<7oPi6aNio{AppisZS)z|mnr-f!-M#?hdC zes1ox&k|qg1>@&95Ax8G(hna=V)UTUQ?{RUM!xMeYR!6Lz1VCg^7Z;-*s0ldTZF=3 z`lemMQVpJE6!4gSFWNWMz3#oG2siM`JAO$Z2Uw{^Q20%b9B727#en8eb*PZ z?pggQXsLJoaSW{t5jbbYQjuNFBu(VRVq^I?FD^WAP3{1asRJlhK650O;hhYlQD@|a zw_7_W9vtC7@cVBl%Ez!uw&^$F5b-ftK-RDmaXoQ_E1Gp$Q&UufTlUQhR+v3XCV+yLPS=u^;~9X|kcM{hRd!cei|7pr<@Lp@k*5E+6hLQOPh%JhgGuLzEH zk#ItZJs2s4PY@U1(W*6Lf}3blLp^COF%e1rcWu z0yp!Q^ez?3eOc?c(1b2S(Tymr0tgJqqcl152$T!eq$WJoSEzoF-;H3XdO=~4!9CQ- z_LFeP+ac}4E8ajbk}xmF=s33qUer-ZgxhyA2@<}?1$O%{$EWw9pp1t3QHS@U_AB)c zLq}`$S4wc|gicv2onxt5*(z%s;ZSM1NeN)M!BXi0OHn#wHae#;g?Sd&t}upx`z=g| zf+hL)SN7SkLNLV><7<3;9;l0hiTtVUPy5XbTZmiF@2)V%%-Qt{b8Q5+k|O{=;yo>L zTY3CEt`8FD%I>~K45}ZXFd+wb5snD3v-_As?R26_f@|HuG@w@b)>G6}Z{F#SWHqaI z3Vf{qX`cK(QUUIsU9M8(LHKA^6tGfB#BFwLM+JfK_X;FvOPf^XE&wcKRAXk9)CR2D zE@1)N;u7@PhZ4ov7^$r4ScJYI8Rxe|h7-sA{K0oPWmik!r4p_b<{0d+3^Sm*$j zYf!{Z<@+wT20vlVF$laif19{-maC@((~hO|P{`rP&r8>8k!-*IS^A^u%wvEvsqGk2 ztalyLLiJ$TGBZm^=xYnZsftQ?$5wH5vR#@^?01QMISY^E)BQ$G4Qe`v_i?%JQNlTaPjH(GKXw7%482sdYiGiMlI zPBai}1K|VlHg&|*Yl+Z()Jm^Zwrze%*qe!sK3Y-{rnV~Ozf=?sFkLqsN5p1Gg$p$- ziZ)Mw(%fhV0jDGTOF8Uv5xy;Hqtkr!Q)jB6H9aw{<|BC?mY8zcQkkY=EEq);qBZJk z08aTHeu=ctsqKzykf#I-eCj0uD#yFIUIc#GQq@TxVWh-7AL}D2>4<{I3%cY4U-B#) z(@&Fs`h(7w71D#M$dA_q3BLi`iZo*>y@?w3(?FRxZ(__uhd9%8j|<1hN2oGv>(ZgI zxl7?-XLXTVBN-6KN3o>iGR+^`^ybkL6be+5s7y*C$9S&)%I_-gSw~V zofJFP4O+VWi3BrjKza0&O9%N3RJL2jD+*wHrI64AfG|_3)w}36)SSxj0(}A}aWvlg z)Ja3&=w^pQw!_p+<2R($54h190mh#=l09MQD?oX=%jpv0%vMaJ%N>|Eg{G3bkr)|B zjyQgRWG{Kh7i{gqgf+r@?BK1kk9AkT-Z#~_lPiCYqO+_i8DMk6kh8Q^b6^W_v=_wZ#<2O2 zv~FK|H3}AS55L ze3>6ty7u|oDMv>3BJ1#m2roM#=Yvh(=a_?tl1DwTOTJAB+@7MeSQ6 zWP8pMBPqDYfP%;G(I|Oh%1{f?W&Gj*kZs0?8Ln3?V;W}O-Xc+cW%duB1dn$y`b9e$ z!O|!;DiNb^XQ6iAj{wXDP!S*Hg)5%d10YFik-D z8?o-ukG~7-`a`u~V&@Z68^U}+Wxk+x=cc9-9i|nC`b4sAB9CoIFI;=MSn{%zgOE&m zqbITL&H&aa=*!8#0smx$9t`Xrv2`}=*rivI`>Q+cN6oypN55D{ddc+rz$Yy@2)~Ek z94b7grtP8y%O%m~l0|8n$M`}l=0^vgP7i~-hAqv?yIZXbS3`K;67g_ImlhFO_lno< zj10UDgr}X*U^=*26chaHixA;^M1d~>z@W-Xwek)(_!Mvu-YR9Mg*Y;{PgFf=^OVEe z2S9WETk9+#-JfMrcWkBjn1fs1%L6W4X1ZQPJkz^!@3ncPGv3J(ZUhAqMC6j9@~w?R zd21!THKnwhUbN7XN@TQYL0!*DoAeEnkcc(7SPxfX?b56c5esrWAAl}g98|2e4?7dn zYr!e!jjujTgesS|WQcIIkr(ffo7v2d%X?xaurySeC3N{kI<^zk*f2 z(-|9xTeZo+K2SXsaXqKp21$!8cqErBBUmT5a_8T1AfFrE&>E-v_C97#svZJ>-(@*FU+$=dEN*E|2eQjN(zW z6z7)`E@CqcG@>yh2XcJd5eNeQh1&$%h%9xp*&W7eyqOd;Pykc-ECZge)PY8 znOV&sS$fk$D3;=Gtki$7yT-|f=*t&BN0C8uSeJ4-$~r@*u_2@DGlo&4g|>Nm)>aUh zSV$_t&W|7sJb+NcDYILT9hParrr#m(t6Z~ap&{>l>S(BG@l|PAj@4RAH54QA%$=|U z=Px`*oVeWE%|o`xV)W<5KJeG576_5Keix{P_N3hpwwV;fgg*qq?jYxH-8q+u=iH|q zy*>s?(#QQ^zhY-+ghJEsIs@0p+|qaSUO!W0zkwx8sD-dX67tvbMJFul%jC!@Es~V*ISJDhK{|>-?Mz3oN~F{Mz0GYd&GEjxQ+eiTtiwQ z!b4q9ig}tnlfc>##%H$XB%7m@7SD2{;=rTBJG@LCO1UAB-_0qY^efR{ z%(U40Z0c|#q;cySKrjr;lq+`D4lZ0 z^W0R!jusyfNrPn(d&6N^zs>b;pU_J8Fzrn_`Z`w`B1v7o)O! zcNt~jW*qZ;mY7Mv^HhBD!a8kpnON_~O7APa45e#Q&BOxVvENj(AJFM3;Zw!F%DV$- zJS&Xj%a2K;*A5Ci+h=MkIKCEkFJ43r_}gMWD;=&#oThniwHzkfe4hk^@jC}CBvmO* zlHXR9zIXPNo*`BJg1^iq`8@5%WOou}W8?r(8P=ji2fujHuZ*PG%R9CPJ2E!h&p|Yq z^ng8eFYq-08fjbw?_@kCuFH0IcG;hfJo&@~I=)4Sgdv8C8UVz;b#Y@Ox(G~JvG(e8 zzmOw{ei>>hqIOz`9~+4C<;LDJ*?wPyes zm~%ysq&^e%Y3Vx^*PE`WP&4TwpkGUVdCK))6q^5;XZnw#?*F$KD|Ts`FmD+4M28Yop3nrwwHdJCb>7b?;t=zk`D%i>X#(Cwf5az zYD*vxfFO`}xQdQs1`vJa_&UY8S&HrE#MxiCEO#^fecwR7-5K#h!LQ&qdU9bfD1;(G zp$D^T=ER2WjpK`QF+W?{a9vp{iXTggy6=mNh!s6M%eZgwp`XsfDz?3j)EafWlKgc~ zQE;{8t2^|1IJ}u?Y$LU`mVj@dd4ubq66DtD!8B$1NR_w7iQ^zJ(xXk&LDyB zEW*O2`Uxc+>JwJ_(>$lFG{8P(P$cIl^-Ma3KJ}C)J)L^qKqqBn-o2Y*@3dd*=VSk* zxC(4iqGb{>(f}hU)M;v``|DkC`SFE#n7zHQa-vijW%hA#xpmGt8D58&GjXx|mxx2+ zLBk7=(k04@3pyOxsFONQy`B|))>N%+3iKlIe2KFS5>Xt=M$>7zdw_wYLU!Q@2nHTv zNhSi)h}+ih7f5+^BnwWQ>D-KY^hyK4VJXeGE?Sk1dJ$VEL~Oa5y-1=d>(f<*KN+D% zEl=Oh@j5tt*uH&fbTwn8i_lR!<%#nZ8Y1~JF`5Qnur?)xnBN%a_USr-AC&2cAUb1y z>=Fia)ASSHdlucDof=8o6-p;+3B|_}i1ZiM>_a#!4%V_`?k<%>V%ZzTk<^Y!L%p|l zUg;-fyBd~E2z$m}=C7_la!J)!NfZcBlcYvETVLX~GQ@0PzHK8|bk$Df(R+$vpoQxO zizLwO{4mJZfAuyS5u#88p)VT?u#5%FThawc)-K)-ru>M#FUq2`KGoEGleHA$q-Vd% z0SM2Z<3^x4nd{eCEU1P1+Qq1q)v3&=-60ut`T)K$(%h!)5)hhFD%{tavu_JSKUKy> z)@-8c?BUHdEl~?s%-T#fH@9g|Lw_nU&%%sWHjOOOT9J%CInk`i-#q7ON!!;0S;H2w z`XIC2VNVUKkJv^@JULN|>lF+qaG0n|pw~{JPauj#O&d&a<7n&YPES3(TiXEKF^D)u zkL*|>3JJk}&v8cT0!NIUo~O~?z;1I(*98(L3lzv~+ znu49{S0aB3QF8KXZ~rNj1B8#zF@N~T1WZPe-=)HoowgnU62#q-wqX(`%i z6$%^AFF?_*FBHaL+Gk_60*pmL8W!9+m6R7x`K?L<+^_lpknPj0BC47Lh~ulah7Ak9 zko`2at}Nt&0)(Zz9k}=BUS@+bkwsp&ZGO48*F7QOaqtzmb#~IY+7nF5&`0;536&NW z3t~V5d2qR}LM5scqf+*(#ua77@SXS`UF1`}X{xa3^0J0*do8g}1doX{)$bzl5^13{6{y8&AQtQzq{v)%50Ik(K{KchnRf8SU4KU@oRY z#LG>)cTiUo@z3>itR0qp(NzLY&a#|^3lSHmw48~N z58y0%$B?!5k|*%9Dr{=5waMih_bEx(nWJ`1Hd1gDdpI6tGeDin+l(0}Yo%0|oB)(Rm_wzV%m~Ew`>ooWH=RrpzTrWN$?_&Ai9T)QRhiQ;!MuY- zN;#iRx*cW>RnAvMg*h%uR1;g6B5H7K326VZaCoVrkkwJLua4TWA~N~Cda}qT@hqLo z?PpQT?ZXyCPIc#&g+KYV%c^Wlm{Ere`C%6II^-6CIaAJh!fy(o;&M+rq!w&BEGl#x z^If6rmHw7;(HMEEo@fNu>*;c~^f$Zxsa^u4k6L0yGi^?lM9;krVP}Y57Xv%BWEH|? zINvLm^uwJPZr9+znTZ6E0%B@ss^RfD4ime>UtzX26Z$zc(1$eT+;>L#T@&v4ha@0D z7D>oRjDzBbOP#ib3kM2sa z!P#@B9E;_lN*d!T*Bj}obS0Q>Du=-KEiUF1*dE-eXx1IkmKvPX$Q3SOGn$yjJ<8 z!{_e)bigO4oO%=1>W__Q2ZEcU!>2H$j1VN?$=Tz#J`e zc7YD{C#SjjriYE8zD+8+D)=`fkk>Ux0!}B{dG`#LKb&=&Usxj8mL{EG7)EuQVN*&A z6O+_*WNY0<#vuAAe0{&E^Aq1E2N}QI2eUMP-bDH-^tRs0*=xx!nO^`%j;j6#?AuNi z6Ht7DCvhW5fsOZ^+9Vx~ z94&8EFKUy%*X8cjAkfBo&g@|n3Wp>)VKkG@Wj_o_fdh^5nNAErm$M&bxL@u*DTk)_ z6=5sk{7O)CCc2PA0Vn$Ub1LhP!I0>VA~`Z?Y;AtM=WGFk z;tRk1bd@C3X{d2pi1b1q-w1MoHR6nAW(B#KAIex=DY@jxnT#l+$+T$g$jAf)b_NpE zqT7qmU=TyUFTMP*)C;8RiEc1v0^qX?19=MFK;`Q#Z`>fLerl9`KVVZZ%&8bK^_Iv! zYB*qLm8+4Zi+FtmPTFp%sGSy!0EzBwKnOe+!9^}-PmXA?@+q~u(-WP(zANI$YAYVo zpK*Bl#xzqWiAVU7E=`6)^Pe88J|&spp82yK=Z6}@8|CNnk|P=*JT`IpSB<&k8C&*jQJ)v#^-b+Q_*pQ5 zB;l^qV}fC3e)=KFzmk(p6piBYLDA$%IB&N)06IO7s`^C3e9Y#Hg%#gIe?Z!2+0`wx zhSbzoSUU;8(_~Hh$~X|eQ)yeiD1ehOCgl67B_QyD!=)C$wHh6BVTa(kn)Un-#@;bF zwtvi2+!nyzTC~7 z`Sn6g+$gIrB~8c`5nsb4(TR!ZWaghayZa(-M!|);*&r7*XNer%lMX2s&U`W%-sf?P z2%*0ga)OMnXH(n@-h9&ZiX{!dHhBR47(3<<9&D05Jc!koPKweGq*#MZ%5g&H1PW9h zx`V)#rxvjRuX|Q4WL*}-QN%~Co{?sE#A2FB`W(LwD(&2x{4GH` zl4cZ0mVhb*M%)H!ZD&W-$s4aqEMRmAf9J@W_z)5*+$Qj9-@h=TGaeAqsA1oVV8RNg zPDqxk1>Sky4G06GKT>ghW4&@?fY+O^HgS^jbWe2w>_E>lHDD~hRS4P#^^0eFD5yfB zPner?NfO4EO}XHDx7IfL9?|D04_feJaG`?ICfJy&QWec|5T9UcwbvJt@;uk!>9_-qNs zH*z}-r`XUVq<*mDKyUpnElBP2dVla%ZIMMI-U5BnLUSJO%1Bv8vj(;P|8TR_zf7VAu(I-jlmL%@txVu96;-h)U z`|H^i1&nCYReHP&Sv%lnh^{=6exTiYa2YiBNY(3Lzl1pR3w}iwwhuMPW0xQbTx5J+ z&@o-`)b_IOfpVZucGle!_z2`~l%Li)qF1N_{zh;!K%EPBf`J@ zXqU5{S7vBCY3QO0N z9dFVg4D15*CaVI+vTs(b<~-~VBR9<)NA{($P4q0#uODP-lG`Ud7B}70uA5mkUuf)* zn*{|>9V=(TJx9p&C>g}X4m_PfU}scov!eN~+=7pT7*EtO7D@Z$LVMo&rI1=aC!^xa z3s|pm*?8XT7L)TI3!J zaOFCGta$y*v-TaX55@^+bhIW@>|+G)t5x9b??NiR-lRh|xjTZ(z(D`klN|g}0R${K z{!4E?2qF~eCOSuh^=^A6cO}%i5LU1E)R4UYmWRAIgBx;GMKxm}HZV!VyG|@z7&<7( zUw;dcmKj{jrEd_Vg2@Cg)i61Svx5 zXD@b;B}gFN)E%%yB9HAUfWidHC1%uh5y#rKbv1Fp)@@(3?h}WbH4OFZk^CF&;@%-f_EY%HGnd3TwgfbpWDlXNK0KLHC$|X z6wruL-Wj>9 z`k6jJ+J-NVUF8K6+P5aG^$R6Yl5E~Kj;%-D#o}N9C^jPnh=jtabEuCfM=qGjY0C(9tdwQ=y78^GEmV60_xl9!*k6kA zC;^~`k8mQSj8D>m`e3)|8yyu!uVr743G|yWE3AU@6$mIe&K=nO1qDh@CM@+V z!KmA;A@ss5=XKzY7N>PM*UpoeT8VyvI(*=h63I2D`5it@MfYYqV{XEi_ID)-I)x_6 zTgB+hvZv08?p{I=RL7qMT%pqt2H{NJXJ`#)A@{2_GYiAhhcf=Px%=as_id3N|2!OO z6%i&)#W1NWZ^*@p$JMoRG*b@5zLQeuI40a6-PS6hrV)HaxD-v4bh`CZ>);Z`+VbFn zr}zMF+|A#u=ltu&l0KrjTWv}NWt9q+9@xL*>Skm?abqz(1Qw^UM0A-VmYuVzCm3D0 zoJC==&$mBFAeNmyg2W7_w;;K1K__lAzuQIx?ubjEJ~qwr&xtr_r*{!IS&u7U)=n_| z`CdL0CQE5J4_j)`W+FrePxK(-%)$B{TQhNgiF$kFZNLZaLYlE#rECWa%q%-LFo-gW51yof z#}Q*z9u6uV0^4_sB|gyL5oXr|@%;`~7~1t~2>iA3gWrmZzB-~lC< zrA?(sy5g9XP1J8_7UdCvbk%I;FHeQghhmJ@?fQqhl4$$7qL8|uG1^!yt$<+@9G5pp z_b@Odil)iiVBbQaDVeB{Z{=2JYA1<^?C8nBj4 zFwNKYBt$IcI~};X3{!VuhsRE&OOnYoqSdqSet+I%cwTO(R>9E!D`u6XPB#FsyX=N? z-}|U2>pCG?z<1tU)E7`sMG5YL+moWzJLe zDGOccn(&n6dRk%a)-LYvJet$oM@OivEo?6#{M82=fis$$+8JH?37~t({M&z>E}_9f z@c=0JIadwMu<4!9ntIy}->d0PO(xmegTH@6r${el<)Gnw!IX!3DXM5yPnv1HM`Zo| z`6T@op3BFPaR%uXBim-?yrjvXM2*T)zYoGi}W%BZ!&dWV2e;s`_)S*0q*zeje6+p0zkreaECZ z_V-AjFak%}%Mq^v+w-wKtJWA%DwcY_I*5Jsg?15teL`u7^p3fhco^Uu2@bHy?0tQg zIdDMmhjrk){WRTg8vyi)ukDiEP<9Z~M*D~(Lv9h2XhD90xf8s07bdbvh*~A<9YiiF zXla9%Oj#sh?CZ(49y-ukDPyF@>70OWE;Xb?yd&ak)E$5VyW{(1mGX zpD(1GbKL-e@p-ov5Ewn-WdeNS?(fSN=e!;%vE&8bI6h1i!I}sAyd} zWhX+vZFo^UCgtp zpk$o?2#o%K3Xg=Y{r|ay|Hr26KYRNso(`sj4Dv=+$}YBq4F4PohirER}4iZ-(IL3LcMNz0V=QKCV+%i)Sl=q-rcv_W^@n`$Xu zO^3ylJLUKB4Nvw)Jb^?)Hd^Rt0UsV7ZvK73=i)YAeyQp}4XK(muBbVqqLdbyliH|y zROmxZt&V1^B>KmpQp3)9XcSA8M}B~)+$xG%ap^QfzgjW%@83Js)P7B1~t zO4Vgee8(JP)um`yy`^4G0SYET6(nkp(_IY2>V5{U<2?)%b~xDN(Cj^l#1UB9Mwx*) z@G)4K#?CbdMIQAq3K;7~i0-8^*cj`i%*velNsR%*s7-W{kZ@Pnph=HD39}%l=?NK= zUM@O=b|96%O6^dT%jic9;#>-@qGr9**}LGtN7Vv{Irn;C&U*Den8eBQ^uM^qPiO}v z10xX4(PYqpV5FLalvSbDo~&RC874l2WM&DaD1#cr50=IW8E=E!Rpv%Je2st*E|`O% z6uKD^FEzDY0?lG%sK zn!!SBQ`P%P6Feg zg&GjT9->Los!x&|CUut~fnHlOuFozQ>~>j}ObWna@l#sdGVJ)4iODbZq>cpYRm?H` zyrbE;hKi1gX|r~5aVy&|z3ljhAm?5{TfJBw@U9=`KL7QAqGLRdN#86R6042uI=b3l zpR;cAOMexh!}oM?Tg#QD2aG+cY}hZJHe>T772R}o$t3} zcPSL9U$vnS=`JF%N7P#cUz1Gyo7}^;bs##`*Z*4na-6H2n;3iSv3e{eAdo3*yfzkU z=MA}MJvZbE+#V7u}< zizjs&tW#M>`o_5nKLY=Qo@VBBI5akY4pJPXt-EV%IFvq$@)d=nhy8V)Nlm%(Efnz9 ze%9f}Ct6JQH1qJUqNU-8@$>T<++Ro78bHtXo*>>YYLP|v-s$j#*SI97*%Zlc@;D(} zPhh!o#jKXrQW_)Fg0aOEvm%@tNIRxZSd)zd1ghzcIY*SxoZ3OCw6_Hb=DUHPu(4mhU&geWZsZ(tk?q`!%KE`>QCqJj#@EgCGy0^q}xeTAvQ~jQYF_O-uCm;GA^&dc83qAs z4aJuLm=jNmXTf?j0t3z80k{qGf`x(sXf4{JBdgG}aAkB^m{wl7FC(b0$|mD8y5 zO{7{{6$Ual$pA~H%K}MkaoMJaum)x+{|u^x&%)bRlZEp=?3uU?gbz&b@+@NKe_Xc} z1c6)1sfm*ptNn`=iVmE{JeHk`g-u>n+4 zIhB-2zH;frtlm1b;EYeDsXs*XniQxg6S7T=O=3QuaP&1#O`1Ej;(?hMrbAhBvK>J& zaxNn{D=*Md+yNH~^UzUH9OqToq8=Ruyt?HahE=D*^GI&&LgaF#5!=p>|cvq5VMJc-yWsIxTs*2=FvygGsL=Plu(h?5QPpimNfn z-_<4NTykS9Q2reDIFdl};QQk8Kjfid6}X8eNB*qGwVyv`l92J@{JHWJGsjb7W13YB z^j-d6jNIGLJQ=w9u^T0b!^Ot%6MM10bi}8pO~hdmw=nHb@Rf&~Cmi=Hh+m5M$8-Qg zJ_+84@BiY#RbPAK-*7Q*MrBN{Ps}{yNgQG^GJ6{(4=piRBD32^F&(yLxYXW8wa|a1 zoIVWg?Ij;K@T$Q)^>i_tPdOaz!7oS1x3Og!w}e;OrgYIsl3U*EcC>z&(ox%e_n zVh3@?qN`Q=zIohzT<(te&i_))j#f%l0KyS6iPdWHqdGSUcL|r^w2zZV?8U;VElpR) zxcdAG0l!hr5tq^vcc5M$^K&F%ZM?6T7rVq{{o*qP=1sS;`#?kw{Wl6lQaMs5ocor^ zhF~gRqHzWpn^x_JK{Zl!xwU~eJ~2b4LcTMWj&Wae)0)gQ7P@J~uUS~K{#@Z6T*eRq zoJ}!?MST;XafoB-0`u#1f)oJAluBBl2Kb)IknNDN6<2NqnpxL$;H1W+F_14=y>;F> z?(Y`Lh1B?Mu-dOHw@b^Gm^BoZk%rvlLX6?U*SX0Bzx?^}mky@4laQph&6;ezPmy^_ z2nzDk);naROmyvUWWbgWiu}`+H{0@#PvB2L$A4c4mKD81>?Teet3w`=jatfa<>E zoPOgw{$z|Z)v{)L@%heAyw=Q6t2w*ZI-(+QA=i^qmBvoUrCkTcC1PwZ5-<8w>Q7B`}Wg# z$EN%tFWjdjZ2D$gR33ZTL{eA_+7kN>NeG1C{NG@+|L~{%KVvi2e_p%)TWrSh|6(&X zj{h>2F{Pz#e=v;YdsCY+f*LCB+=D6@z;ad!{9d;z8(1oeZxPwDnktc6XjAL&J6%8z zh(t?YCfzdFBct-e{lmHA8^&c)5E3WF5g&|Bbzl(E0xwSEvad@KvuDd7bLfhw_P_;= z!xAUSf#x`gY5Eg0^Glqra6n@$A_XL_t?V{I4pRqbyN{CV7X3SBSmRe~br~$gEp(6w zDu<04E^;f=5eWXwr!wMX=M_;7uqxFMO^$;c=WdAnA!SU956>Ry-CT@k<{*Vbza}+Z z3~QSb1Vv!HmSGMXE-b~Le$33?n10(Es+h#DSNu)*xPDAd(r(CBlD5N58L;1B#$+fF z;1v1m7Ms&q|F$5ZgAInne`{CqgrZPVQ09iR2708{#TjGL{nMbSgv5q9H}sQtPjFBU zpDB9V1?iw*sKC_>(JyH2h|+)3oW41Lqv*q7q7yHSn7 z*H77to)Y(hser4pUricBgu@ms0Qy@la(9fHF%)XI6Yh^hHJYO4I0up?C!w|o4DB#@ zhT?uTrICY*1oCesZ~EvALmY(&iL4mUj5?xle6bT)d(A|iMcV-G*p6HLX9;QG#!N9I z0|(FA8PbNQ%y-l^W#(P3Z~cd)&LgNKvuYs;|JP6F z-yd3^IF$iaT}X}oem@M1bQNc(oumP7ty+-;gBbce6ql+A3jL&-8kNP&JPbC?!x4-? zxy8Zid5LWDVenMa$^Vq0Dyt#1seIgmFQ`pSNtb*KK44eIY4{_S^K1}j1`#twd{W{U zWI220^ZHR=%z0DU1!)g}_xOK0`^oOJ?h8U-za>3s@Snyt$&L_sF|$>YPgSO3!SAbUFOQyzq01ZD54p*1oS7b*4Lc7Ii}D)v z=EdaO(}N-T+u63$rR5-1F4l}&LgYS>(!`$|51YmLd2tjEA&;_eVqtqV#_~vy?sGNW zA2;PGYe9YdrO%b{z3f(D*2TK_0r}bvH_XJI`7B_10>5R%+X&VV8nJ<*>P~FXy*tNV zQqyplLBYZP0ny57PStHKuwIK^?;}l$f+JA8HA#yKGJEK>Rj>N_Y$M_{4SMUtem+_8B`f zSfBP*2ghV=e)KxrbisMFwnVuz$HmU`jKLN&UbCE*xCd*vzG57NkcSVF?=ekfsr`oJ zQY3k+WBvI3hSWBgp)OX`{@X(9vPTH@Rx<1;CC!O?^24$B{T~%B+=P;T)WK|oPI79U zPip56s&kx{|8gEv1*0*i|5z3_)hBiJide#(F{TPu{T0DsR>Ura3(k%Dr|E!os~oX* zNV@u|w3naXB^{|~6iEySGC8N6!^z+M8A1gx(59;{=()114>W9S(T68dFMz2yTZ|G{ zk~guO9wVx)IoH3lFihH#biAmBU$4UZ>MDH~7Ni36;06|)r3kho8^ljkc9Au`*>!2F z3M;GRne#u>1^T8K<*`5O1zyE?Tgo!_Z>W567Xqp`Iv7O7(-3PxjZ(sN2V7C3I(zT0 zN~#B-t_z5oy4TQ~S?X-V#XcgWtXp*IftLNVEAd#@t5*OmnHUSlra}>Slr?S0NhH(? zt2sh_7<%jbF+i;krpyFOTrOMZr57u%`u&8&zKn58>!Uf(_;mC@I1F^_b1;b00MRc6 zRKZz+08(*C*BHW67|?kVDf&DL^g{knm1?$$sJ5sKq3p@`SEva{)SC{lWjD=*)k)W_ z>2zxk8mreNs1wC8E^ndH)P$7ie~Fq991iTS{HX!b5{KWQz7TuUsP*i$RkEV*Vck}( zJwX&AhoN8NDgkenGp?j{miHMi42JgN*XP+dodvWp7Nm61YG+{dj$71e0UIg+v^`Zo zfp!tMb_yj%HGg_q+^x*wM@h-V9xuyMZP>Mim$(b$0swcju6o^lD_4=r_TsI^-fkOX zH`p$Dp9@o{Rt}^xwp{+NFg*;$64{FH7Ce}{dULduDr$6*43w9+jhBuP7064C))QJE z?=rwPQJRs?2MkW@c{8&OcU^YNW=wm#Cd*J0^d*J=?c zx`mnu!Niej(&V+bZQ;n&JVZAk*DfQ4Ho3WyF^y7JAJ=TK(OT9c7O}5902t?lSv#MXG~2^J0cv zuSe5z8W5oBBPnRr0WH$I37;s0yODCK9XvvgTVJIBRK8KPOLP8&Ao={)5?_TL{Q0bB zMFF7pT~yQTw$AH%kD_UsHmwkLJ(fIeLA3f&p_$HDo0Fp`;cCtSuMZ2ZQHpG}h5Np= z9SXkna=k$+T(c^Std5?I%}m~J#}UX3C?)&$Xms{OpWW7Q z$JHSerK5`mHNacv`Z-qpw=H%aG4`M=S#a$~Ug>aEc*9=7%yEC}j8wB-u=l)Yz4gvM! z@o*(+FkNWzvtT}9xN7smldW2{aoue{98bRdRJc}6MjeP%>S$UU=GC`hDY8nPxc0vIo)4GX6$N!oWs){@%ZZj(9@G{F`wq! zYI%IHh%HhE`N{vdWyF4xa$IHA+Gaq!O*m6W@CzGnL!4Pqad?J{V(M`0#bd@d71p-A7RKzX+q+Aabm%m<5p83v(oembA*?;OpskorBeZm(#B9e3S+Qg)!%ecn&74~B zQx4j{s)5RuX5m_!XB+p|grkrMKxjpUuMIHau$z>bF6lk`L^fGT*&hGg8QpdnXol_3 z=s^Q{!$>Ck!kbKyLCq@1{bCT9wn8U7u|p?RA0ghwVVxW_q4BCrGs+f|{K$&iI8D^+;f(w@Ia=~?DWZ0dERhXtujXwD zp@7J(U`uM0C}@iw7%VlzPkg!&`e(BVdO%A|B1o06qN0EcD@=kndo*FzC5$QzP2*wy z7>BWKR!k%DJZ2J9w~82S)N?+0&tXJ5thAg*-|>dP61j*?C0k=Tc%^1Qj;#4*7y1Gx zXnO{fLB*2Ds6b6iFUVn(L?XyxX$M$Oiy1nhyE2HrRqa<5g?#@b%V+GHL#JNISv>zw zzY$j^1z2$u;+Ec@+|cyB)6-!0kKNoRC6S0j)QZ5RA8+fTxOV5N#rN4a5@IO9^HnM^ z1~gjxUEOQJvYM3P*%!~0lrf{B(43M0mpjgt!4!nIZhgZ3OyZWI)?OXTkpgVcD-IYc zwuQ4;S(%{OQXu;^&gcnmTw7NKx%<8_d5vouYw+p7+SS1zdjeQG?UCVdJ3|X`4YNPC z5C7$~+s8pGMHQ>l58WF1uO8~;U`&_gwvC+ged7Z5lmd?s96 zT>s;z$)A-EI!3#$yc_qbgC|(Gg@>}4{>P1XE56b7eaS5h!8n!G?7#v%fHIU6MMM82 zWUNKyWhi|cbY*&T)AQ^QM}U~7*m|c(opQpAH!dfWrs&}!LU_K*3DKx*1j07>&4Cs; zvj@YOilfnRb3fsqEZzC(T){3`D$n45sebOaMyC^ey`M+wjI=+UH3<;5hF{7 zgld}k&C0xk%^t0|L%$=lnT4{}Us>Sqr-}v}jhMWmC0)D*&y=sawdc%*#xp*CjQNy;()L0v%{sKK?^&o7OkhdCS?pON`|yUx@8sjC=2?jxW(5{&)V(k zGau%g6_}T)=co55xs!*P1RP!ZM>%)iph6H~;V8fKr1WPDKqdc++c!t?#gt_Qc~yF{P8hk|bfyOS=yWD#M>jWyQ#AssS+VIh>YSRk-Xp!h&wxgkP4#U*X@xLJNA&t2 z)Zf>t;@wD70OniplK7}}C(Gh(f}rC3NnCYi(37Kd1O{`JM^7Cbgq)=gA_j9oaJKJ6 zlfy|9e#iHmc7->2qE`m<5Td02=8^x81e^bSVi-|Qq3^VV-)F*z5|opghx+IZP*9kz6v?1P*RV?l z(?Cb*aX@x@K&=5#t@%(;V7tJ9AwO&(L?S>=2I}Rk0w7%=rn3Tt#x&TBLvq#mK0DRR^VfSgYybLtdp!?TaL|P*^N>m*% zC>Lkv0}yVab^|EwUuy6HIH;zOvtfipQ0ft^yY6E^u5~DfwexMa89*Iw3Ws^nco}fx za4`Wu*I;o9G!e}A(?=zZtYE-x+<5s##n7_>!Z|-IYF`ThpttJIK$|+7KfhkmUv2~x zPWW^B)YKR$I9As{&uw7p0=a~Mu%Rn;DBV#Zfi7*nHV`i(Lbl$5b^8>=>yC2!2r7bs zq35-LZgoTbm%^Kb1okLNF_6z+0b;v1jPAB+?k#DdoScF=iV~eWZ)1W;h*f}YZ=fIS znqcP1skIAx6HwQdmN(t7Cut6a8Labr8^8-h$aFz{W-U%&35??4IZfg%8@ zc(*UW9rzBT1X9;K`v7d8&Rs^1-s2kB2!urlr}vJs5y@CU_vE~e1~MRzto$T>VC#MWFq4$%A8+f4Eq-oRhO={WqKjGx~|`As;HDwBb@y?y>6Kt z-@C>Z+;)7BN5k}Nbt>nFc*7CCPCM^;NN{fn()`)x!}kLQ!VCoR-ra)xfxiRoY`a-r z#NPjg1ON-rn`53&gFC1;nTe{{)AC0}I^pOJD*uy(8>* z8&e_PGmIht3H^ZI=-_>WhXM(V`1b)6HdyzZGz06& zA$~vQpwM-Ha6D1Zg>}YEO$NQ=)rK~C$-QW*GtGoiiqNHIeRjd~D#vk##%6OySJbol zXEQtIfvd#x{m2kSD^9QwHdg|v5JNVZEvFnseSW<~J^ZZTr7`Qe*3oV9Ck>PDMS>hFF}L-5*o%!h2EVBO-yi^L#ZE4W>ZKOtkK9E* zE_&hqZ{{`L7MCX_GRZNICWeeqVLG+XQk$nTd0u7h;wo86uZhM=k$qK9w+5GGI)d!{ zO+K-an0A!31W8bQ;{p?anr>u2=iV;5zp#;>o{+kQQ|LCR!B_nE2e=r8-X9%eiRyk^6lnTC_mHl zERHH*GGGFEZ+2A&vJRx+>Jt}bM~yVRwQ*@|3~?Z%d{2E^a~^j((V)ci zExfg@bIQQy9=BZbf03s~3f~X#T0p+qyIxO`cR2oe?`S2le5StT6blZltarlcXRYDG zc{DekBsKp{fk7tpVXtsJVglHhH6*dxs~jU6y^TGC@;@%Vtj@D9SiZO_5zA=M)s z*}a~SxZDiJw;Ix=AYe6E2QhNOe5Lt-%K{KB?_tPONa09(;QS6{&PH0WPPxr@Evw1e z_!bpSu)PDlgtwb`K6W`mu4@$q=$a&!5L`gA7v=NP7@H;de%4|Ovk1mBYxB&Ta7*P5 zC+L{b@)IDx!kxUPO<^ztz1~N2>M=BvRv#ts&V2YmcnpcmH(2)ZdqXr}my+)_xszBR-0C#-?Z{Is&5Z%F#`U9xPL zJh`N&dXMEw1tJ-|t6u|P2u{fLE+%;KzCmG{7fuQ=NXis_+Fdbe31keBV-f~#nn&E4 z6s!B#79kar6p(z!qLj4izi)wK#kk?l`^bn*TLR^&SB`|sVmVxoIR-M|7Y>E~J6wN7gb+%@$64Bh_ zKkF0u?nW73fri@Y)9>y<(=Gn-EAf7N$+%^HI_4_4aJ<#ZKDnq?taeM{qGGY-!Gm-4 z+^6$&Fs-INy%sC5~MKLFFV^j*Xls`KDZ@fXNd)`favY-fBMKQ}Bb^6BH( zE4IrnA<9SP&9I|-Kb>2jgY+e!P|-w{pcFtOiBl2(Qwc(0yuQFPAug|R&Wm^0)I_IP z*!+dScJ+|$#e{pSzC2yd3JUsc}a}vy4MTRVP#Bb3nVlU0v;}tkX=@oTcVt3pcbiN7K!>yj*O}@Q)#zDIL0`y=;Bm58D0{T&olJ`_m`ODfPrnlD|DS)5dftyM?w|IDMl)lK7;FtK!IC~KW zrp2n$G^yVk;$5ATBTBd29njwh*%#E2LFS*1XebUoK@3{^+W4c?zOVNLZw`r8EJ3= z(OF7t8-8m!FUMd|g(n{)62C!mQTBuI(tPLTnWUHWgBo^yihNyHI^}T{C-1Pl>b_KB z%=;}51DA*06mLAX*FKEalS06Ao3BjzNalr3i>AfIbwvvxyZKwk!oK_Ug=+Lx^yhP@ zu=|ZfD!OgGKD_pcDL4k0YwxdXi-0c=RF^mogJdH6sJiTCpArzuGMS77Fu*KKe$P}e zkBGPFLkGwtq62%>i~riLpmU^MGV#%j7NyPZF|n%QjKtI0VK;v!<3gn+(Ct<)sB(bL zOV?tYN%w2v+j=WBEldUr4_3qpx?rI)k5R;5!}|5|^;)&RV(nuy(9UsYO+;ZiV?V+_ z|GRo)Ni?sf^i|0qeh9sF07F|o37=hY{2%GJOHlUBSw&rGKBtYE@8qu@P_FEC=hCp# zZ`8b{2Nn@87x!HFT>Wzut4D;g5en2iwlV;b`E=BliCJGz%{m1o#u4V*?r*+Rs?AOv zf~VC9R6VLrpE+sMnFZE#hW6<98M?`6HCBgkH#Wq4CPX!Ex3z=ARVEF*KSoyzyp6Eu zB}l|e14e~uYQ&kkc%@ymvaPG5C#j}t7-ybe-lPb`ervtyRJl%lhc*eXFBT_|rhzX|R5D5Xi0Gz7v=JK)zKoPINiI zuR*5|*d5PW3(wn@bT)O5naGG_kJ$*T@9ti`NZUe9_OrURgB!}ir+;#CX)0#gF_UrM zV*=i{(#`(m&v~347J$0h&5j1Ru<;^Iuq!vKj$7`Bw~55d9T!f4jE|JEAXnm@i1T|# zEa0MLd)`logDH41ZG-tWt!o1Ly3Bfl`freb!EDt)1r8!udYcB8d{SKx6LmIwzP5L6 zkv@bS9^@km;GZdhH;W1lN2NHtCYxkLrdZ)>u#c(Wg#J7fn2R4VQ@0?Lc@-Aq+#9P{ z6FJtsbfoQ^aKEb4;BeQhd+cwJN%>c{0dCzeXyLMoqAVsB*oyeQs73IbYpn&=Fa|h%{(epplIe;xK0oJTxa4rk3e{lsO0a=D^OgbG}?GrIm>DB%(`5 z=bcVQ*spAjl2?cyJC3RmdMO=8^;gC1hGW;?>y}8y0rp_r$YrVQnl;&FKoSaaLMKxtVD@Rk` ztAsQyNpQI>E@|)*Yjz1P&~os4f%J`KZ|#dXiu-~q0e=|N4hf;`AJ^c~2U_bzuVx$H z)iovB%aQSUV{ZEPzLHx3vOKzAt$p<*i=bvsy(aQ$>{cW9=;7fH=X#-NjNXGsfFBZ z>8lR4jjsqSqWQh-g#}!4_novTPK})eFA^inm=1ei@!93Ko1IX#x$=Jhgdol9meNKT30|kgRk}~(%%9KGZW?3Z&9=mOxSn#lAM_~{+_N3)V$S5U{e|h;qYmbV)4h{z^tqaN zy(!#HnHEyPScwXP^3Z;EbRjM|2FC(Z%d16ZR1|g{YShe&66LSyV|T0aYeNZZlX{g9 zVo2M{OpRmuJrbwJD0$C}`XtUh`&-p#pDI1=8r(ZRB!4RZ@@A~Okbwp|3UV!L{Uzo_ zkNQ_x%c~s7w+OaY!#kypX|_ktO$yiCZ+10bo@8~p1t{d2**CO4sx?Yx&CJWA+t^C+ z{fCIt-_e7?;%9O6N3=Yp4|r7Pi081Wu^tL^SMpK^PGMJtYSg~a!0oVGwomUncJF$;W<2pfg=WDZc4M+j* zW%I8`j$T5(UtM(;Y#d1e$2kh!yMuEDqe|nN(O(W4D%|A#oXpRx@go)%WSY0F5Ck1B zIMmtts*kS0m{OtTX(UW2yZ6LbcEVVh#wPb_q_2*eTc%t4QX|>5(J3EvesIG$4OV~~ zxeddG%|_7Y)1S=aVJf8m_e8oL=~WN`2j< z1ddKw4d*`8>hTpAcUQ|~nG<56W9E9wc}90ub7 z=aS=*_3!>No6J-4fax7sj~|+r%a8u!hncTIg8jN#Y-Lw0_LN1rG~WI>rO?sW0IQ~L z)mS`O&3$wb6<>{0jo*|)^GHPDL|hiv5G@%;oK>xhARan zg=;&-DO%Q9Pc<-f`D&4f*=%IShvuaNWdyfb(Y5#8D2Ull6DpT2ERjN$?y zce>l*y5`10&0-$Z3JbPJ>DtnWOr=f3PjeUUGq86cXoyXg<`l;GPH`8|it^kNuCxum z{172T#Nh_(Vn%}C@r=eU>USTJ=io6TAU8&_Syjem;+%Z;b|HfdOu6sx*Lk;SkTos)Z-=aJybSb?7Xl{W%5+v93O)g z-Ep7)X&6;1&B|&sGQj!1-i9+0!PWSx3(nLQToK=P=}Bcbua^jq4AZP0BVn46VB^PM zx%VllU`)bOU%#rC!r!*U2`J?u$77e*Ge}*Y141GXn{sz9Wiyd8t^A-KdeLmKCc7#r zPJ{gOr8Ign`FZ5ggYY`GoujH&DU#7A?%I(ts0sMf4LUe@de*vFiJ?*ulnj0}v!?Ij zH<=V!uIIB*PqrO0FwBFSPxCJW0TVQu-YxS7iTSNV=FqSp=@!lajI0It!sAL=U_pqBDyQocD;8d-&XhO?Qe$e2hv0G;v_ zWKMR9f(E&fwl{o0ku?_PK$TJ#6fRmJ>rUTC2m3nay8fC!;-zRBHk-0>f^QwVg2&&a z8>Z41`4-&mP}2hO(fXA{rI=tNKlKZUS+b<1`QSX7zH}qrT_T-vtHBK*06aLk9B75x z7!f#^{bxA^vp33C(yyzsS!D2n(Ixf6GDIo8Q<)sVbxthA>1i@!^P3$8!|{<6LqnaS znJ#mf-rN8w_InHm*&Yl^-Rs>~Gue^V=uT?q38&-EAB69#?eZ!?X%eKs1WbvRGQEX= z#9k|^=z{2`iuPA{wo!-)l^gvdJrf<1)W;I-rW8zzj z%>7bA?=ed76N@N<^Zw17|(on=+*F+vP_6@_KN*e^(B)m z6>g?EhBIo%iD(ueg5{na3kzaaN^mMWJ`P`_AX)#x$!=T+i{Du`KF9WAJSA^YMz#%b%0+oBdPD zcx)dTO!@*Pij-lWJ6~8Nr*Ge*F+!WN$V>C@g};OY)}eQH(~Y3ZHZo$&MUWFq+y8^H zb85~63b1W#+qP|V>~w6q<8*A>How@mZQHi(OwYY_r|wkE!#tipaO%|Ad#yd&0(9l- zJ)id3vOkE^tetC;-6x!5ZOR9T!}b4c`zTKIcRITjsW9iEkOsQJi8+H#y&IV>PYd!f z-$R#;;BLG&5 zfj7YfoEW9Eet8{Yh+g9GaiLE2yIG~~60=%;(*M&HYmS?Ku(N8V2G(HwvgeqIEfda^ z12OI77y6aG(%uclz|t4V0=PBO{+<4;5dfi-%I-;8DUl>hl?zRe)EdH)2TL3pQo;s~ zF&qm11*AYGxT>c`QBJ>7XO^Akd*X<@>a8VnOmJajuk93pg_sUa))nV9rdGP%*Hi;U zx2VWHb&>Q{82NqKJtdD`+s>!`OdtJAsN0WI$aFHY-CGeED9zfA=qo`cFRfW2#_jeW zc;l|-Qcs#Jxl6w^3AAQBLALM0IM-d6pH|Rt)^AiD;)*jGy0Vx$qa%?7S74@cEp_}* zr7l~Da)89fYs@!ePtELw<@-m0d4>JrZj}qVL2-+H`g?L*ikZYi=|-&gF>e1<&#H~B zsXg0}5I)XDSl64UuA!!Fw4Iuc_+mGC1bS|OTOrV=EP|c+vrsJ(I?X*R+r+EJNL>oX zjV3YrqD88!>%FYM&2)yZjt5AP>>*q)Zyqiy*l0xn>ntgGxrOg2M1Dsx8jj?qP zDSBD-A_`Y0)|dnK5EB15$Gu*KQRLa%I6Osyn2@V@`y4Xj!?NNRiP^27lVS8J-K`N4 z@4vkmNe^~7gGWJf!YKY3ogik0%nq;Q;rn3%H&{V3y3D`ib)9?#Rv5AW_Jw6s7Fk?t9Z04khypI6HgUn6xrR8FO zkehxCj3faGE)D=Helu&93*i&Wp>#@2M(68`x-&!KXO`!(Ut)*F-Pxu0pPZ<<6;fTR z(n?C&Efi~>#gSXu+Nnoff#k1Ygd(Qg%$ke{l3SuwA+I^e%F-D$(LV;BopajiA7xwX zGZ_sJke|}2)~XLj^P4dn2^~@agfnFl>#nxn0?jrJ-_8M5{l>jV{N)woDy)5sPG+eG)48YBw^X?Rej^(o>~1lq5bZJXW)vEr#TsmNK5bDf~*bwV(Yd z8iE>L`!MnGq~9m<5I&QT3SNx$y#*Ovhr<3DuhYh6yFePUr*&FQr~s z(JNcDKklr1b~M8a0~~#`+ZOvAdg3op@UOW9XZ1^B!#$0zRM?JMG?!G_0@gk>txn>c^#QuQBYOr5}yp|jBSo7GBB9VGhPa#IIM{$y6M zv3_JP)8cIw^mXVy4C}v3v{>mJlSV^!TW4dh7T@bUfU?M)FJv)?QV`?Lbn8E5POb5T z3%C$e!F)nw<%IUdfgiEfdo&!jHOnd|jc7qUG#vW&XT5i$8C#iD@;WVCya6Q^6uG3C zAe$FRy&6(ILGRO%O73%DyqmxqS)R^%fMUOQOlPrHorrrWP$9UP1#?@aEF)Nf=k2-~ zJ?g}o8t%% zshhEIX2CpL+qu4>&5w54Aw6l6Kei_1jPxVtggwqBt5vmX$f&!hC2ui1pqlwTYaw&N zz$o$*2!Q{B;;8*ADasS#-}ca|ws2I0XVjpWmhI^?gZ3iE`EMl>r~Z^ie<7U23!y6^ zgDR|t^QSgPva^MlY5~t}G8kDxsE@qhk3RJeLjVy$dwAPvDQQ__agg9SEaPGON>^6E z**>@7lG%(@|xlVY{sT4Vm52VMxHDM{Xqlz~P|$0#YVs?OC)`yt)4 zYX%T~NdJ;o1PVWszMWXspmdlt-z0=hHXhq^YoGP7=PVUVf$-+t*>}>(w_gE`&YJ-@ z8KWCZWr=Bj`ikJxZ-Dy(VaKZ)Md=OW>C~KxkcmqwqcYjkj_r~0OO>Vj9*Ub>G-6$N zq+Fcz!RR4_6a1Q;k~E7N9S5)b%yLufEMD0NMKKMs)eMJafU`YM8>H0!Q zh3hI_(*>i95uMAc!&2}C%)LiUf}K&=VTp=bNox85dx|TdXzo+fJ3pI|8jF}msZGgK z?Qj}{i4Q<-HZjFM1Fra3DSEY$U9UA7ZH2IZ0ZVv|~uAO5Z@qVqZ0NO`m(_+#|UTXsu>PWN{2=Mo# z(;!1vIa8QM_;niN-D2)C5e*&dF!_>4-)(8|__?&@23&|0uDI2 z9QAMEn2(vA<%iPtJqSZLJynToHuwHP+Aoc>1gpS>{O3Tg>6BBcXHJRGCcX*rnMr4- z<}c_pLl!^hBQ*LI0sP{%hcW91*6zMeY8j9R>C(h0Sf%R`u#Uw$9oQx$dUWFY-<;cJ zE?j3z)RWjOBN`a0-U%EGXQ+SKb8iR_L-0bPMty9&pSbfQ19mBHsb%J`fYk!h&F%4j z>O7Bdl4}_#6Lhq*_|Hrk;`OU?Ky%`s8@j`{y@DS=yIL%|1n_-WE%qUT1f$xpB^U?| zy3^PJH&~x2_d4rcCK&Rk6~CC?^Kjy+t!r_Jmp->6FeFg+TraKj#0xx?>z%Ow9l9^#6CqI5|20 zJAD?d0 z?_WQzJwMw`*SZbMyyiDwm)_3;C+-NS*(nUEQS6&21yG^Ht-m(^NrAK4+v|~lpbifp zK-?YD(jN1mBu4dZ@hCvUDsa&dP`~VexYePs{2#{xktMTu@E{Z%T*3Tafrx|@J!X2)X?Lz$#ktLH6jz2M*58#^7E49)xtPOV>Mq z@a04C`XLO$@1FzLL44w1Ja*M!eIgY*9auJ{7B2l?i~1q#D`y!q>E`a=U2{3Q>et=X5I)yHHKp{bhQ8E_tOq3zgk|;x3+3VzNczx6U{FfBiUR$*#f_Cm1%L-4h5WSQ^R^o(fIHtuP)zxO4RG4~ylMz00s{GENGxEe2Q&x{bXQ-0@TRIavw?lj3-x{^F28$o z0p|*_N)+n%Dq=%4Du}1gSqll~XYU;P`tkkJD@c!r1Z4o<^sm50+^m2#y|WZ=8#YCV z>;6`)z~~2!G{%nv^m_4fv&2f)Rk_C`anrNcbCW6|F7#V$!0%vY@F!+$yuS;mTZae; zvjzwW2n5<6NO&~(N3g=eKi}6G_>)%^+YA)a&(F7Aj9{UM=lL}fsM0q)5dLYvFz<(R$+zUw4(>g6mw7uHlnuv zLnK|$=SyG7F{qzN%bxSJrUg759PC>Hu8ffu^6+CX#|tfxznf5{J;uqd znvvo2lVSEr6N^fYPG;hMTIkt{c&ARHnAvKWP%!qxj8r@KnoK!*L?kGY80!ZCyk_cy zdhYRWFHRf_+^)BoRtxl=^?5Cd>8CW|Bx9~V4f9216Ja{kINDVxqEL9>iA za)1RkmNV6%4o3R~J}ZK1_-KS0B!t<=VTcO1AZr3nEWHJIBPM;ZQS zmT)inT%-w_y7b9f@>FtLGkBb9Loo5>C?1<3n>NgdC-Ai!RUPvQFF310WHS5d=2-&Y zj<>4(Yce;nqoilsBoO{rJ@bC6ZqhUL*q6v|T4#_lD?CV=JK*<=MU?hbrnu8T$6xMR zgx=e3?d5NCI9XG792vxm``*HR$s)&~q&yd?6zITpU(I8LR^|*5#`D%MIos!&i8Ac( z4a%Yudc2*CxMm4(87a68FoY)&3DgSe`WB2R-R1-m^TVVh1;Ocn1>uk0yVc^_n2W`C zO{nj$^2{Ym@GqhAOyGw<_duDkjohA>sn3E^<&1i}M`Dl~jSW1V_KDx)5!vY$m5ZNE zoz&$Ut|dD6(Hob-nu^tu10}i2f7a<3)88W|a|F|9>>|v{DAq+?-HRkVeATW(FJX&s zwJNDj>+(s@3{$aAHb~g-fax89)+)h-CJ!>g!XwpxAzKvg7`(0MkrHdsXOk$VynqgV z6z*4e&q<+_@xMl-jJ)PnygJr3u!VRf*CtUCQc^SUvihoQzp?b{aa zF>7FZ%y;eZ@gPxRrAr$9RK~4HPfEbPa z=@CQG;ra{0_?UMxoh0}9%BmQp55D8-4yX9-99XgL^LyAd6|YK%vm&KCJ3DK1UWX#M zURv8yuE$QGvzqWv;|a(1#Iv^Udhv{8r*yj~+1F4K)%G%+J*QMvuW!J;Xpm7Prz5m; zvi$Maye6qAH@cW4;gWK1j7OBnj<9j^efcMs;%8mtP5?4{hJiMm-fo^IoK>w0( zzwfHvfkhOae;8Ln?ewPn9D4O~;laF-*LA;o!kj;o<>8FTX0FZ%UIR8li!4C;>0HA> z{&x<}R=9;{o@U3UE$mo&(gUJ-4~v($zCk)%#8~ruYm8#|p5gxcbA$)_ku*wAK7FM7 zWo26f|Aq<48;ow%BVN~>o6#Y>E}}n<>%Y-C^DuY+%?d;H3RKf~atL7a5h(G`>F8}q zh=B{A`q8e;g}1&HaEQynq%||0-^rIb+Q&KP6_^sRKO+Tauc)85w2f4R{g> zkM+diONBDJo;?JtPqvLhj|ABYi_Z6#PCaYq&qZAzZ*>vbkDa&hUDX!7m5r4nBA*)! zQqX%Ei)DKg1a+cXwsP;%GO`L{ksx(r7K5V}FT23UA!P%_86B&Wk)oE^%oqBK_B&c% zCvIIOI06O;@wAwswrLlKuzmE_MQCjxf}iJtl$zA)CscDE=6xFp z3zYHhtlWl`oqRBaZynvc7FC`OiZ7KFrHwO2kq(=Gu&cp_N?W7P zL@Hvt{g`wc%l(d+4jArw!@HNz&wNj|{eh#UKG9~U}lBg z&8`YFlx1#yIwbm#3*e3wj%x8I7LTgkzC;uaoB}ef)P!TFGT1BP5*m%hhEOxprp$48 zCu#ae2RppgvzHlHABRvEd)6`FXDEuWCNPoDJ3%0d7+-v4@d@B2J0sSn9TVRrkEMS) z{FLQV8C@SN8%MI4C)vKF|FsTH)h*Fb0j&^hU7sXe@nwuit!nYw$fnG$KX%_I<+y!~ zqt(9Y0JZDsE&8xbsqK`QM69`VDBfUg8=X?rphkIhqokTGF;il-nBKue?>6d8Q7@4~ zE{>`f!&4Y7vb%2Zy}2%F;5j4i)P9(;=(IL5@%e|fB3z3V^pdDIZo`f%H%<0t zvnXwI|Eyp7`}^UkuE^fvri~P{&jgFv6;r*v3b4jNWF2q|6ZviV-G(S0<8BPsaFXSm z?CY*T0}V`++hnKdV{x+=wGSYXFQ~XiY~P?aT+LXq1xKcF2}!xrSB)*?7n)BxSUV*i zYe`OyE4XR=SKkVG*y(7jw_V-x->Y5*(_$;?xrh`|wOYN;#>yts5qtc_$1wIIjWZ6JpQqXO}&691%nsP>R_$H<;jxYiie%S z+e1NN7zn;v>G{EBzgVxM4Bz>KbXp$4y#k9nkTv>HQt1>{~V=0Y*E ze=^2-taPMcJ)76YXc`B1Pokew50IFtEWsCJ9DARLNje^boL; z7?>&YC>_v>SNV$?qw-2)gCG~2W#qm7aP$G7JKZT)J_Zr8oG{6eZpJ-y9;ISjqP}N_ z_*|6hh?+{*I@Lr;Ag#1E%MZ{?QzxFxbZ30I9h0l#75kWmw5fl^wrdNTUJ0>{G||6( zw^~UDTm&XRl|rFY2B;vk6B|>4=^v!EofAhvxGN*b9zMN5s*NHj@#A4nYkq3D@{|``42BB%GNy8YSNeyfk-0 zgU6`HYF#g=x7e9^BT zT<6&Up8{YNGI`gj`iE~=b9e*}5TLQrlAaA2Nqvs}SZ~R(MhupvW%{CAR^E#)HVGGj zYNl|ETzro4@Oh>T2;|`&-Vf(RegQ|kbzS~-ujS|3XCb-zwI z8NHeT_wK$yRrik!1@r3#oxC>{|CE`$=hlH^nvjVuO=k|!Af~(x>rCqxO1-W!fTgf4 zo|ZF|aM<43u$~Zje5!avlz(RmKZ#O@R56FYf}Nrph8J2gcX+fqu}nVG3P$%I+b0}l z%5OuAnox*2ZHb}Zn(vKtRk+(e+5i};VDrI9FO?NG=i!K3zQ}I#XfIr>=M#U zfr)#!t$@;av6~9<`Ii+v0WnYGbM2jO%9*1|ZW02)Edqk?Il+T$ny0N=js^kSx#3%; zHGYE4W<;ZHG3sDW&;=xELa`<%yW-T6jhQ6`Mr(a5x+5pFMEyP{YDs44b`|PrESC;i zM){LTPtkC|ZEo69oniF_3JNr$Ym9&?m0ePuam5CDiI)wJ1i^>JMB~5GF16|k;OjCa zT$)|ZlhZ64yjB%UBh*=Bj1gsI^@%t}1zOt&%;M5!WSFO&-o=_EMJr`njn|uBruAy7 ztk%V=?zwN*@^-6M+JNnQaHbEnaspni8XbYE;edb8n2N;TA>Zeo<5K`#Okj=9Jn3iI zq3dS(G$MXG-8(h@=!IFp!-E)~oTV`@^%Dn)JPaVn z(&3k2J6@}MJOF`Y5hfipj25zy#8tQ*NKm!6q>{Fr8~2*;-bFcC`^<(pZ4ejjBZMTF?KkuJNET`F2(M!l5odV`g{57(oT!divngv%4+?T%?%{=B!0H z#wkeULDupnexlPW;w-a=VtE^WUGMx+P*o>CNghme#ti(7L2{>+C^b4u`9^ltE09-x zqp-8QTEuGoV8BbP*OJQ97@)d>gH6oRDGS~z%2gZc+`zHOo`c$QD}G<$f{{c5r!MoQQ9R$9ub;?3-k`rAA5}ON!ONo5LPk^LdJ>tEzrhA(4B& z2@qdLE17+2Y=k#k?2XdmplsIkw%O6&=l;65C@%=qz(ZN7EP++*FccRg+*jpTzVp`H zWeJ9vc@H>gj718us{HQNPsAa^1kn^`a7xiIdnpqvH(*&n3d!R7f38H(B-TPt| zcYER{C;P+LLM23;RYBvuGXY>@bjGQW-`9%Zt?(lcx)JSBK2Y|;9J-kX)j+%2Y>;5z z{YcoczI2-0ou0)2nAOb}glo|#6T8D859O!FIkYZd9Z?EeFs!5z@fKLP*3LU|`^pod zlE|u#PZoDJW|C#AB)@cGjfATfOa|rd6p_y!of*H($>pVR&qNN*^Ouo(yc{+M-X2$z zFrS@7`(=zF!fLlMm(4w<1XSYOxqdH0OwO{F&m_rS%7P@51!rw$Zur-k8be6gXExZ= z+SV0pyY6Ti6DR~Sx*1tzrH8bD;!oUPr`$AjEGU=8Zsvy36-sU$k}`t)H*@;#JeqHZoucdAXP0200%d@{^KFiJJVDDoFH*w^?#iPgLn3+ zlY#|aT_PWjZl$!o(P|3U(@pTa6_M*=Wx82vkYztIbwKUbTg0=%hx*CvD&bWOb54#t z$&EL2i(%0|)Z$yloq$0pe>PN2j<@8W$D8gUID+OM($p(LeJ~81-Tkg2J+YKwC^C6C z>C@X8!RfG*3KA)Z;li$$?Gbe6?*>BY4d2v>H`wjp@xh;;8SZ#B0dg!spFx92K&1cV zCbsRq6u~xK+HcN5N>6Z~5YJ`RRidO2Z+92Zx*T!U&PN}%AzW;ILOuMr(t1PpyQSMs z_vcCPl}0IVsth-*Op&%Y)H!*!C6l4R7+-qyj3)|L{{XZ9xM{ukd`8W7Q#f|thU5BD9cia&~ZTKB9M zZG@Q+lzcNyJUDsuPukBo?!K1_Yky;lsrmXf+5=t4yl<4Sa=vpHf^?;qKbEqB+xtBUflHIS>R>YBC$X?=@-$(=%FSU&+7I;(7hcAhG10koWm!9n-d1pob>93HSJm`f)?ld=PNDlX48C(h;%1#7ew#GU#8we;_mT9af zAh-S&0c@X^-&DT%^dGbcs)$hq8rz@w9xdFq6C} zbwYM#tQ#ioO0<^YwAhDNS|Q(vXJ>p(wJ3@;_ObvEs;Yl6^wC*c4G-gmz(C( zs<6U_%Xrn`7k|Vu@nO4HaP4k6W1SIJ)Au`6PY<@bVGiPiIB4&d(ztd-Q@*^xc;Ork zfH4t>@qmZxfs-|sPAKu$=B2n|EUiEBg1j2nu7qF+?PX}|23A`}SE|f{G?O^G61hYgjHAEu(Vm~i8-AhmYyYBHa@tbzPjk0=(pBt-=3Ldb$3V5Yy{ zU9_^d@~2EhaaM}-gKDkc4wDcI4Dbsl5BJ{~Vo?7|)=?+?8pIPpKyb3&Jw(tO-w1uB zA8O=1`OH8Hkbt}~Z~Jp-gC?0+NLHlcIap%LTb)-8M7ojJjw?_fOpg7FBM)ox6gKR% zL^rwx0-|PRk;&?`)y#*l%PGuw9%k7nUoouTm%R^AbSr0p$c}Qn(m(8PDS53c1+wOY zB}D)S#VZSt~kPFLySs6~#JTvG{Qh3Y(o!FFRGh-I%{ZbD32B0l=WM zW=^u}iF1lZ-CV`r6e75Z1K+IikuXuc02ka&Bb2d(It^NJ88>fv@uUv z5gPM>)`Kc3qYAFSm*`dpKecgXJJ!V!Mohr zQu@bKm-y$+_%Bap#$)dQ6)1Zd873Ly`_<$`jp|NFYS$o2*_|PV z(W$Wl6dNT0oEymYyT9^iku<|y&@nYIzo0z%>)|Aji|eX9@F-_Ex7u$ijs}%iYvc57 za#WL+GNd<-M;noM8o86P&FnOxUOl0JM6st1_6$am@LOdjv5g?4$u=QjgmWDII{8JFkY^MuG~3w z9rx3Ebls9f-6AhOnXXVZ1XA4d6a?>P3ERdCnLzz;2xR7P^ifPMHH`UoRxpuj_+3fqo{nS_L0j zFP^=_KHXDA)zLn>e_+Q}_ohhSFBq z;tW2;n++}2wC}5~WA(UMu%6#Od?(e!b70kb3@fyrgFu zG2R$b7+k8fO!im`jgZm)(aW}n?wYPURbwgk(DFY-+U)=PNSpP)LTnZy4ld?@ z4%PoFNBQrOHurybUqw6pXQaKtQ6O1bh@!*^m(7}#jcM9YjZf~V5cNidrXZlg3`6&8-O{6g3ivI zoE$y{b2P;HDfxhG*xMk$6)-*)%<(aB1F#P~oW-wfLtlymVgrcB%e_)TAKgOwb<}eR zP$mS*R(3f5ev?*GYXe&#GspkTv}c|CiNF1pzJXf(dZr=#Zhw92Ue{de2k(aMj44=I z6*j=4?ZHc|0yo=JV&#?P4F^68I|3^NO)(NJLI)2Xity*zQj4GxJf=nbQJ$ z>56ne5uM&UvjTnwvT79K_ts})m?j9KkG2R3k+-#J=+pg!{aPXhDeI?`4KXOW{@D#_wlZReY5M81CD(BhB$$eS*N3+3$+c zxfb+?uGoKY76YR8YwE9ZEzv5@ga2o4+c)pgkHnq6>NjV~kE;mGwY+@KfOXHo&u^@A zIM@4cSUi>-SA53r>V$09!x8fSGL=5TeFzEMbh2 zpJ$(SqLm*5mVL z0TW{yd*3A4ycXSHK2PCUp>)Q2qUTW{*R=e5I5Oc&=*h9$DZ`s$sSTA>OiV{ge@vj6kg*kq>RO>fZSGB zL#uIau*?wYxCT$7-pfg~aXG zSVqSo9_AKd8$4_L>26l3?iQrvu1eJwFNG{W^bOnxH%kAxg}Vg&x%P$^q#`Yf%=(ljA14tU z;-Q{WLt)_4KG!ZoPTt*d_QZR+Mc>jz_CVVcDZ<0mQrE8_r+%*~90qRF2qfZM6;9yO z+l1yv4Mj8x_%M|?XvF1Y22r8QXGYKH!U&Hr*g`PrV@BDwD;y%p=WBfp(pB{y{9zE} zukvpx8oF}%zZnYU zM9!>q!Zl^f247N|p-!C1$xX+WMl;6TugFtcPVpqf`hNkaBKbW*C#X$FQ^x1+k7i{x znM2)5WU6aI5AST0GsK5d*cuX_p6H;tfpTH^on(5j9vvmz!bs98jGpnHyA9;xaSd{V zM)jcmmPJ!2&P_fS#uHW!3zDmDeF(N2TgeBX9`jdq*b=NX4iq%`Cy2NA`v-u+oBB6p zjB@qoE8u$|I;YUsP<}RbpXaHev+~99@#ez??M3geALRG9$nhL3_BR~q=O))3Y0L1e z&5(=4!AECqe_@ElZ(03N!^@`P0J$7jn>%3;LDS)H%D6SpP-FV(Q{ zjEd|wXMFjd=MKswaiR`GF6Mf@T3Y%^SDvv8uAkYgDMJ+ko&d=xm4%h68C))*bLK;( z7bx=Ns*6QsUQ4DfJL2;WI*)4Fg}00D-h}L0HWk8baE=T+3re}^zw^gH4y7$V(gd!; z>0O5H9dtvw*Gm(bmoW~1_nfVif8}8pfwCd+VdMq7bVm!6R7AN^@jZbgB$#)is=(G> zhjYu_2U_T=klvW<5w_U{l0`;=zFK&1G`5pdp5XodU^L!As%UpTXEmPLruCkuqB6Zx zgvgk#3uL{n$X!KC#g-l4T40K;(m+x}_@fMnL0hy_1**x74Ux1iy-?Wf<`83pGi-5~ z;tu&6{u_MmqOdrsc_Il*FuiWHMt-Wom)8dbnU=|I&fM)LYGCp-`0x#X%$QG{PBk$k zY?p}+lG?^_*P%H;7@}4D|TRwO}Z~p=83nr;L|lyJ}e&#_Pe>kX~%5-%s95v#FZp0g9WL;cZ4tecf#m-~8 z>c>rU$qEnj?100%OmqPt>bUvpKXiS7sUnBdlGhf27w~)D48Q#HN_2E_x_>z3^_&CeWFu z0zmGT+V(4ujiO<@qd(pi{liIw#_tYTc0eq^gP(ut&*=L=qh_rLfbTW zzMXDx`u6t@Wek%SU0nKTw;T5*YHJ@XZsUP(S^BwU+V0phP8qvQ_%Topi2=?Qx{uBQ zUF$joJsf&FA7(QLl-X3Y=eN}2(vnzX>5cq{5+iWi3v^DnC(`iNO~$?tfISloZv2i# zO5htsXWuukBHQSly2UlDdjcaLO?S@-lg;9+;k0{ZEBpCB_HD02{>)MgZG3gdjt+lp zi*c9kD!m_=Z3Z)n4~t5sSjOu)Qv!2T_@ASY^(yCP@T{gbe5*;Hv?3%ZR%#x_6{8e{ z>JzWJ|`-F-{Li^2#3JopP!%`KM3^ViTipu)2?fHP%5fw1!ZYdiBjG% zMWqj@r@Fj9-ZBmJghP$KOl~jGE5Ea*XTH$vcw5NxARIHJx`0z!mRNdjkjIhR@Iop# zkYnFT3>%i`lAhJHaOO)FurZCm^&bUFuh znEZiZ9e%<$bzm)Ip7_RgV^bc;frmMnY{qy)bvX#G!($Ma@(^aqrAo$enwGRSlf&Pu z6z8C+Hh!ns1zGE_A$=RsTRU2HezUQHF*_$Cn^T%rMzcm1-=}D>z#lY?`J5Wj962Xs zY(C0E*GcL<0_1${tpNgAcwq(|z2i&AC9Z7LUBS5ocifJo`guIAShmE%-|;a+9ZVog zH)QC5*f%_0h_|UkUHXIZc0v9C^>A)CKpalKP$` zFZ?gt9|5;6rm4v&F|+*L0;Phd+ROJ1y^_BLw{5+_a?5MBG?`#1(~PnIbixc10b)bX zb?p#j>^pBz)!Y0O%XnrI)QT=U%LFdO`fYCupREl9cS2Pmz!g+GA@x(C;(Y13-Ct*o zPl3CHQ#)zU&?e4=V%O72q@{-(cP|AqZv?Upw_PTWbExi@w^}xN*O{oDgLI-Ta$4qK>KqLsG;(!DrXVs%)(+rC23h@5}4o>p`a&M zwj=tf7{wvQJ*3`esm5>*>P3+9tnl=$k;{-q%P|XFzC)Jhm~R zn}CHFArlo3(F!L&%Kg6K!atCU<8Aqc$*NNdfgg5+(o269SGA#*=6K{cUXpMQs|RJT zS+5Rs0BH!hYm7U@^Y16fhME2P{vl&I=tx!Y<@Wcamuo#%Cb>n%!Mhhm&WM86b#yZe z-u>7suWgUdawaX&Qxr1}XN zC5{C_GbO)_IP%&yS11q9bM_R^pN99_m1D9TgSvMzd0(%Qjlu0?0osgg!Y~1^dpG!R zm^yy;^j$Tq=2CYv>C;oZ4bN-j}LA`=po^;eBO%=#A(x$ z6}8LSXsbVN%Ud5XOE;dg8G~rPjP>{?b6mL>h>DfmcfP;6m1l5LajK<+@|yKYqEPbH31_-nu#3}V3$?o86UD=Spg z;U?bIHFF%*g7zMEKRh8&iqTFCsGuTwPUJ;p(3YBW(^tgeLSt1cSD`xVZiOC7J|zCl~fEFEQf6vrloSu%z&IeTFQv}RW=qL?fkyXKJC(pq{A&}7kH zpxW4-0J9JMMz{uasahHY#H_f)DV=u9tv;QtoQ$9tL=67~kSKD+?=XahO<0Xv{{%9Tm zWEFUZm)0K6de@@BPnmM|%lU!zR`fM*JTS5-`Y#SgBHb|CnkNjmI>oxYe-CIEYt_qz zfrG2VXqr9Jq!%+8{EO~z?7BvExt@}-!w}G>{Y*T$qw88o#UY)*0NT+d0H(f{UQ1*w zk2E?fAW4p%z9>0&w@YnTUU7Z!TUy-M^zE+$Dl*ew3OEWIhIP~L!Y_{HP4Wk0*Ah>p zak@5fb)v+UkPIV==`Jx0*Df=CKh}4%NnPDUpcO)f6jF4RU_lT-)*%f>f<&%Ac&jtt zNm?&;L2BUw?$wL9Z-Bu2r$yv`fr<*Q(!jvOU>DZZi~@V^B9@Pbs##NJfA=g(OL2CL z>=|aIz-##r*@w{V`3mj6KU7TYd_)n*6;g}aNy&w}Yja3Fffj-ax{YWT z6a;TDEH{f#=nFyoujAUk6og0v>y zinOIqj5Sk|$3%$5)y3o{+vA9QFs{k9L~UGs!Cb`AQEqjh8XpeNf>bTD7nXV9%RRkz2Z_NO|js7vdZKR$89tBZ5p zdg@O(88!kfbwCi=b!?e9a{s4j$5BI|1;az4MP8>roqk!!fWbr|B1WP2KC_AvXT?p2 z4?ID3>|{AEv9Vq`Fj6XnLYB=dRV0bPFKV87u$oEibJMrNwb`K9YNbfEsXfIoet|f_ z(hs%1ZtWJ_la40Dj9}{WDU`OXM3?w@{7U;5v@#U_!QnY( zDSu7M!K0OiQbPQ^5RbY)@R(H~bGg>Mu5gJo|NhdHhq^@@Yd*-<$$k0iIF#XPUfDe6 zp(LTx+!WnN^ogCf26BN$TL4U(bpzfr8+_wCPjc6|AAQwAnHiH4YE=t7^eQm#t4cP$B~Eg3qOMlY%oDzR6KUD&dz zuNw!qk86~b&4WrrQxmB8mdRa8AqcCvx~nk~ON1fSU0lv?Cjqux`Lf*}OoU!#OibQ{ z!=om*?Z1*Ax0V2HsdR%Jg$OUqEVJv!lb`GB)GEuS*_I6QEL2Z&jE}iNLR)0@TDv;w z;2_>|$%l~dm9Ei7B*TJzcnveH#Z|%EW$Hn#3ojzO)9TjWfT~sqs#2J5Y=-IV%O)y+$y6hWC zRk3$|%B}fFzY%)PS)wzEkiOkS3eN_aGOTMQEB=x&5nPRrgUug?0G$%QHK0 zH2hM9V^CsBDieiQqBi9dA@km1Ruv zUC5)PE{QrtmIUsQc+G<`^n{~3`Z)|b5}^EE!()3?lc1{1ahkl`_~JE ztxn~8BS;A~ylSyeM3*I^V=kOOFAC~NS%vYLHb`xS!l*BK`!k@Zcs9w z8?n(3e6z215jFlO#4%%K*d5R7@FBNJWM;(g4z}CV5@8gLdD@e_s~i0nlY=+M>jEWf zPn!=qD~gyt_dVOknY>$-&j?gC^MWp^e6fSlet=7Arem~YLI6ie-Hk7m>q)wSsWl4} z+j8{HS1X1{%@)TF*GqcOlQ2A=@i*!w^yE^=3(;jy4FhlMZ`AR}%7%)2Jp)BHUn{5H zw_}lG#O9LG`i*=t)Dm@-^ZqrS#OvI++}SxU%?tzyu+a3MBP9`9^H7j`m`UlunXf`5 zJFwW`n<@9ScMio0FkVKzVb6uTMBK>dyCx;N7(5>$UP{==7$Y} za)Sy{|K7~amknu>1>}{1@?0;j&(C=0zLQrWLTHMU@1&Nhsc#!c*JFPhRa1;{C1JsT zWZ4SqiCE1>9bbY&c|KS_y_=-i17$rT;2KocjpZIs1Jau7q~S&_qBz%Q*%^;d#hXbb zTK&?W7I~N*l82o-@1~I}-^|vhvD2A@hk3&ck!B=PV-CRa7K3i}da0@NdDz9-mD*~c z|Bm!#iAurqj3k1hM2fB8!q6hr*2n^u31$7Y#|ILklS{Jxo4Lx}QEYmm9oDqGnXNb+ z1iKb;=RG*AtKp? zq*GE!-NT$MB4^^nJ^IXKD;Z7MuB2_lbNFT+ZJ`$44ddntwETnB{|dsl>3O*KNwQ@q z@AzJSx)HfE+*|$%e=|yM-pJ=JW1p6?+F=IYCc%g7_|;F9NLAzf2_4uLFA5~jo+RaI zLkL`LqIebUk8M6IjA&?8ItF+a+b|93fl?HcvIB;;^2l;?*gglLs{L*%-^#^;cSgF1_=zcAONaShchEZ#jhE zdBy8^gH;0E#SPWac1_^ryD9=wPiw*ommX^k1IT4d-ijxaDjkYD(D?36{m)!d%0-#2 za#zVYD%YRVIfe_wS0_x{umuv6c#Q z{A31MrZ$7@hARMwb}iB3JRA!9)-6;+&#=i(seD>0g9oRm+e4U&ppXewo4We}4Qo>a-x-$dg>&tw-&PCIw(1fJX9WBj}|Jgkz>=p+Kj7_y7c5Lt5}UM>pfSj*;*%8wnAmb zEgUhdzG0^Z92L`jvc-Mol4(ldMCHax_dY z=87|%=n@OZ(-zjl&7%}Ad{3tD8&9g=Ss_gIld?gR_#ro#qWF0=Ixf`WoPKF0yDqmG z%zb!dGdr1usNC7d`4`B^*c0sASC^=IuH_4rO0gFDB}o_KF$+vL->-Lg$S=d;KEmF!Hzctg>|-JiHPq}}-#Ub7?u!c$0jK;`ccmZr zoXZ&U{{eEd{huK>GbiW&$J+lOH#^gRhd%xX@crQN;Sd$sC0_jUE2Z+3FV z$Y84WETS&FjBt;_FFqiiML}~Ff&>Hw2?-Ga2??yOF;hU1VQkk5pc51198k2c_%|(> z2?pP|0W@#9fUlC6A%c*0E4*%_VE5f$hQ%LKn|gRV_9DSJZ}@+@y~Gi_rt+KsIxO{p+mWYaS0kC`f~;u;z7vptU<$s z23|A5^>Tv)FQdQ)8cYTF$DQs6gmmQdfbiti=@Uc!NCmGqP;Dt%|^`Jqy7ELV|D&GWY@b!84$TKnQ&b0r~i~ zALJ(mfB9q}tIqXty}w}rYI?`}VZY4jctOCL5eQcO1?*@^$c_Tu1Acn*f4Gl+!|wDofAk4{ zZ^M>&4C{8yYIa|K2VvYo2Yi0r`T|yvLkR=ufP{hH{5vy*f8y294tVn`g<%lz=JaQw;_;nXe@zD!Cifvv&hPpJ z9$F!T3}^VID+X{8VtXmbXvp9|h!YI-0ZtMb6EWuSL-q@Zhfdie0)v1YK%kI;hN96S zT!aV!d+k(kKu|*3yp3LB6@OPEqyRw~XP0|TWlRN=*$-O3;uhd?BuK)1d;0^=FZCbn zD})L75WxGEI0gjC4jfHI4$r-Zy?4GUgW<*2)Ti|wA3x;@GkIqJ-0L}{nTOF5#G&dx zwIs~YRXX8P$}sD{+b^r`^H$2U*|b5lHOaDI>DdCvz$v=>Qm!d|&5cX+_1PEHp*bAm z8K8ZDl)`-`p?TMImXg%>TSqG2!nx+cXP>42lpa=wSsx#4gruF-e$|&SuH@T`uRmTj zj#y|qDt<-3@f>;ckraxL5+8Bu+x=}u@&pXrtS1WnfkzKLoEiB#k&+4F)jC@{!&_iF zz)5(8cYdR`E&6}bTQ7Cib;eV960OM$;ej{jq&!s}VU{8sYh>7Jle)*VJZrF;lRf}3 z$E~Yk6^S~^vcd+D=5zT3woM_W0xFR_K{WQXoRo9Ss9CjKoIaC`wC}eAFb-*h%Q{rK z?Q?ILQ|{&U)cnhPbp7uBYTAS@-UT^n;2K{{V^_!)t*`ur$|y_ zvi-(o=+QB*Ls6CgntZXd*PK#d{G9MO_x0L04F8Z5u-^!1s@m;2D}8LDY+u(ne&}vU z)aCY?zgK&!y1*$>fmPajGBv$$^K)(2yN8@`x|GDT1&5Y{eSNZ)K=D|bCb^}g&4W3+ zc79oj*XMkvpT^SOhhaW38sBz2tIeBIE=$_{j6VIybzMr4iKZ)p3*0MZ*+Q)+* zj{{TL({_9;WKrE_1}L}Xu4UKF0hQy(RG~J{cfu(YeqB|NiFDSB{3k+P*^^x8VtJiy z!A^T@mF;8JXRW=8y+_DOYi~bkjhf|sa5c={dAg=f;HjJas5ca$lM$mN2Lnl+>SSob zi|}c9_9FjuxJ6cEvp=g8O;OKwmO$~N9_HWTJ$|ax~zQJLe%)e<&HW+6m^QPRF^T$xY zh^Rbj5WN*sk8zCu(|l0=G)qi?-pIJBP+7woS?14a;9UP8wLu=B27Kn53117-Y8xM7 z8NVjN7l1~6L@bkKb!#pUDIIkCWAU3qQ}jZLVobo*!1s`l;Iu%0P-G5+AW=c}$#*8$ zuDNViS8!%dW!<{2XU@iGP;A5W*Vg#`@(K5(&B*--5V=NW%(d{p#x6&l088QnYbwrR z9QFe*r76Q!St1c(-Zyn@2o$xDTPPn9ZL45j!m(s`NCB&Aaq=K}TuD!|_~9P)4cT?? z^i3dW&|eH2r5Jh_X#ReD--JI%SJbeETX^MzjvV;vRx@woNarX1c+mUbgKi`{ zUM{-r(VE11+jCVyYzHG}CDSC;rfvW=ZZz$Bw`;#!EPXb8_s^!_Q#h-!s73pT;Ad{bZ7xi{O?ZV{oEzp{-qkzpkL(vB z&`J+5X;XW|s>_$;VRuB?{-ZEhoKORXcqm`Ob%6f-7MUB;EHev?xg4=0I(N}G9R1qO z8Tr;Kwv%RF`I+65^da||7tU-MTKQX{__!c?+hw)oFPe)Z@dXu9czDckBIOFM^<5HL z7_RF6*=Zdv6!X5esI(EJw5sXtmS3*!?lE({(0a%9kcgfLnjO2*Xdrt9Rx#kYAY&G} zH6q0oWZhtKfp3IjacndE6`DlzS0?@U6iuk+^EnC4eb1^*vg&PKqqdHSX^$N8%xEUCsBcui8keGgY9IXZuDKo-H-G$w5NI24&+9pG;ugu2G2h?{? zEyn;YbwmCnIgY4D=5;X@SHi`WJZy;@UvFA-zb$oZ>C^X*BJ>C;L3sXbq~>PR(F8#& z`E>HZbP5L0>U0~j-7MDYl)(AhgPZW_?hRIg@~RR#8*ACH+hJZNOalm8hKn71_*>SF zpRlzxtA*i9R&>ed-W)?~*4WVA$rv@yD-6K-p|n$HP6@m?SSLyDDw(&^uS`Tl{bA_) z;$f};jQj|)4QiIfkmwmJ8cd(wpr1<#uu99VGZ;lD9$N5Uk2&h?`lI9fj;`$&J3@KW zuhY42ko@8>q9trIGp2tXM&McTh(BYKPoPhY==nY|iHXC9GW(m?^2FKBcpCf~Dh8_B zJgaKltmBQn9w}=!XjtHfL7ZvLX0n_9v@zMn<=X;r#j(CEKW?sIXsjUfUAOQ+XwtOp znW!s0*YqG{o@+eop4a;rX@KM}(l*1R)YJO(@p$HQ<1dBYDB>;QVn|}BJ!0YB=jANo zmle_y^_CX`wVa8lAiCleVax%>}25!XZky(VJZY^}G-5*DrJ7y5*Ne8+bu)}xo z@!M5JrG0_qw{gdmE04gO>AXD#y*m|#ZU6=OK7^~_rQ&BP;uz~5|IXu-m_D71n~zC@ z7C5zD9a^)(XWlKmux!|;SrLEz4zkeiaedsdC!H|z$@uHWv;HmzP)_oUj*Z&2qSUT} z>9P|j#7(uu?@9iL^-1J*-Ju`6xQu;`DQXuAw^n+C z&aEy9T*4@I1T0&P<`$ zkA>V_Og25&NL|pLr+sAeepHLM70;Pw8RYZq8Z0*NUVWi$PmQiezp}Ag61>;*2GafU zTbG#S;ilTyK=dTuWT9LnuC%*^f$=cO;P${-lH{a0*lBoxAghh?^6Dn|Dx){?#y+hv z2^M2k%CgfMJS-}hBugop;?+AfdwDvo+HD&t7e@xYvo6@araSc+8!e}}d7mx5?1sOS z7D2E$`U1#)%N;t07MJHz$eT_%RKUdZ)~xV(z=9R8n7?iFMQA#2COPKIqwU?T;1ahR z*YSJYop~QuOZ*DbKu< zo?a9*x2zixao(4of`{`%jc(934t!B0+Zut?1gteFWT2gD{O5lrbI73fz#dCH}14vr1QtIH# zctITe1$i4Z^x^&6U#Vyg2*^oe9qakH9nZ8v1hA5*F zD@)qKx9&IQ+rEiRf22)Ph<0;-af#e5ouxgv+nko$+7O#(Q6^OcHOOG-GRUE zT2%95>m`Rfe_P|4)XC9+j+b5!@MUt5_L0*6;_?XTJU$<-YP=Zm?bpEMG3J`-WOEf? zpf20gLXAW1QT{;jhfqI8Qo2pTtSZf5bm>J^U&?+M3Td>X&r~7PX6ygP^KlwxMgd(^ z1S8dU0T>25(+Ao@Cg1GsrfANO=f7PC4(80<)JQk>OT?32&Ny}S;; zb)b|D9Hhxrrq#FcALTN}99|j1Z`Sc;PZTbl?%7u;)6(mlc1gGwu&mI3obN_3)|rF6 z`{|e9O^0^uP1#q*MQ!#8Z)|V8~rp>B|tv+aaf2r?=)Zpv16tD4N*WvXuF7#6AEWO)P?#R)RLJ z(_^a?h;qRTkVe(?@x@Ln_K&?&GUKj0`n=kfgl+sS_-D4QvI~|9B!n(SSI^paq-ick zDUD05a%Q{mhTV&$(@x3O0@24+T3gX_R~Xwu2#b-g;lsN$TCm)TU0QGLy}}JKZszz# zr>=Xbakk-SwH2veriklceptNl1=vEt%Q6j?UlHL`rIKMA%6Jd2)jhuZUdo3aDQ(aM zxj0CwLhzer7}W_cEy`jH;B-o*S@Ywe|51H>`H9{hLfBgPy^qe80Jus;H%`~(EhVFQ zrShl`GHt$Ky0sX}tG3_dKW445dav9D54PKb#U7ZGOr!lK=Wx?x5|K%D$e(TRRJcpkL-nNC{2s7h?tYiAF;c2UZbd|ou(^{)kb zAnlr3SGIQ&|3$bq?e@c;p3@!NoLg`0B1e&L!VH`4Zv${$Y2rU6;S>`UJ`9mdH`dO*R&IWo?7o-TwhW8iot}QybH2C^Ah4c$ zhdr;C-B9T7ij{%c{d^?WohSIWd&SiQxt>GaNI{PXpU7#0NBC&(xFWr0#Br&Wx@lX6 zZilOwCuifmee26DNx&Pb-NyEf|Nbr*-ze9DYxV40It!=8JRj@xNU9vFhxzXAoUe0> zKFqMN&5D~4Yd{*6?qndbe8A#!_`Bl))DDq)sFfeXm5#S4Yh-=SEEh|8kV z^&qCSBKR$(5`4%J`|i1p4Ec4)UdDIAfheZGPq>^CoZUzoDlNo^Y_Ykk_X}o#@eqEh zeRnE}LaxaAr<95{1Pzo?Z_nHeGRG~m6Qau(vCzULWj#bOg*&F&_2}r{Damx#D{T8^ zN^KC|ePc^cDsWTBtwh&@I8HW^Ds%D;j%06-GK)mx=$E3fH{Cp-)$;zTtOm&Q$^Pt7 zsM6b~$Zl0G{M{K!ysG_VZZhSfw-*85{n1F9?fV$;?DAdkL#q-yv?!@zo*C_wyB1U} z@YAicAlA@6(p&cHe8t!#ElDamy1F7%{-Ylvg($UOGX@#L!%J)~?5-qu!`NEY9{xK^wDu^j!dzXi!}u+?F}<<9GeS1DTJ6>vHYJ{HzQ9F-m9^Th zB-NKL;-Y15O>TD%wN<(t$G0+Qf;brT?MIs`a*lLjh;9a&S&p}J+BK)Lh;NA#eu|!p zk56x1jZf-DJ9LgWyP=_3A$U+kuN)y{UQ8h!V(*j|mI24p)e6>!59*u4?kq6@6AeSJ zuzA(QU!n>Ht|3U?la03)Sw$0eKcCsZ3T=mgx(98`;G-GiN7B_Ym+SCLGQ}{TOK_Wu zO@wLYB!F$Xiqmm|gSwcJmt&U{|LUvz4b~lgw6$z}wkH5KLEjZ)^z>6F$Vg0pwRFrd z#1&O$r>3&nv_+V9;j*)1+;@15^lAuKXRK3Hm{F3vys-A)0k}~!X14gZV_$n+h7Ic+ ztwzTBCOd!PxCd3o2f?E6M`$^>_evroCG}#P@|TPSQ(Lq@P$$s%j`IY2k`-N+RC>(G z-*{LM`hGDYXm8BFFYuSYNs%_c{hJ~OWzru zn)O}PJ)9&41qxD1vMfiPhP%>wm8xsajV#(@7 z3Nzta_<qH=3w{Foo=k5DjH5#u(+Ut@(d-n5t7k=~oF z-#)XX<2<;a9XuPPBwB_G$HDGI(j%`ud8%1^6(t+(eQ(8VHW_i?k_1Z9+%M#;SmP5Q zlaN3}<#WM7R^)DRE9|CCrXgo89k8+fRpd<;s6ixGeo@|CR0=Y5IU3Oa#;4D8nYc#r zZ(7yQi_aM{g?^g?#N1dz&grAD1)P*rW&nAel<&oo)-&WB*CQ1BL?qO`M%UNT_bt zOY%C1wi=K-A+T@RI(w_B&dE(VzUO`R`qu%y;i`W=2z>xU_!cFsTQJ>?68Z8G=u&OY z{a!NC+)R1QY|3essru%P#nuix9#TPfrs-n~zBj5>3x8K%QT>NPPBWS85#5E&y;uW> z&|FK#14{N=X&r&}!{4>B@UN-=4KEUPcWXI2&q?oOW9;={X6_5??0&fD1?;N`TW&;p z_40LmCd?t(+&S+1*dC2d;)P;Nr0#&}9Q4FNwu)cnrXQpGnpl(Y*!yoDVEnvjIVaJO z9h3NmMXh!429X48Cs@r9RNN3s6}T-f{`~yJq#(M6Z?HB-Q?oC(lABTL(D)J}9tH*K zzL}7fqsu{sR92C8@o}u+5HHYKPbBwHX%jY@otC$S)1fG9%&bBYvP^7F6Fa)H7--1} zfqRZuG^76!+|Nh;kkOhmFS)B*GWnC(`E8?kuUUITKYi;EBR#@$E|&EjQkc$xOm_yJ z3>noa5g+Wsn!NMuL4VJon)pPNsB%|tbe5uc|J9-kDFj1B%vD=4lG+#Uks3Z2AZg`e z+sjwz2?1*-d)%P%U~(%QR_l7d!ih;eIIlUB5G<%;1kn@I0N;4q%^x#!XQ7$yZU+jH z(EGHhNK4AFmw`*@tp35bisx3~+ZiY0npzGyO8zb3ahxwl7+e=28|t0%?8rznM3Upr zCZ7^rK(i6cQA!%Y_>a()10~pNH>3L5y{4Ga8C%JQ&`kN8tKUFQ0&YCtjJ_)-D@p3i zhAPfu*;D3@f@3`&R(Cdmk93~Ub@adb$V*y)5>2uF(fj(!N^hJ#b~jP;M{JXtCFAR; z?N`7tWhj6b?l(=;js0}A2cU!3hLG<)x(bbVCW{0BHoTf-BI+Xr> zqh#bm+puxDKR}Wkhre>$9?L0fjew}2EcoQ8v>X$nU9RO~+)$oz`)Nk_vplk{XZdwt zepe!5yPAb_aBgva5&h~0PfRe9)+zSv>l6UkOcNI-)}T>8ZYZouxcH(dz|KZ#$;>F8 zt*GSr!2-O$XV{D?=&TMmdaNjv5*jHqUfQ272AchB-pGmudxDZ`HTY8zHvIlXc#!V% z0PI8z{qhU^WphRRA7C^4{~b27{R3mHO`!)qV1{QD{r1q?Ev5DLoCuzxu4 za=Zf#5SS=nOr8fkN1_K2%mplq_#lGAzwn|Gg#K&aA!8&#d~a_r3Cf=&5##L?(V@T} zh%WFsnAl+B@4cEn{cE6@e2KT)5fVTl0cd!To49qH>#)~wqkVyber&+tLWdy${bXt! zXp$UQmQ`kuoxVOr|18*FjtJo24lDu@q=#DxpM++mKCHTm@unq)VKXf=ytIBks{Gp$p3pnsWA_k8v61e^E zO5wR$mLcgCp?0gh1PKnPIN+}edE~&*!H8Boh!0*hdXx=((YHo7;XIvfzvjJ*C_v2u z1il^z-sxVR2(rFiHg^s@3TUw4W7Ix@Hh2U)fJcCDDLcf7z+W)J-l?GvVF(Nsuro0m zK)fJ_U}Sv&Ah-)~@PqoEJA?s$@Sk>I0RjPa5Eyuuz)oU?fZj&rX@^#R?}MZI2!K6V zh6E1;g16Pj+Z5mg?HY?@_r2Yl-f-xK#fBEPRrJs8yIw+9R~LYI0zy*wKn<9&hsUPwFm zRM5c){`g<^Y5(vq`>UUn<6nX||CPe)%j<7!)F04ac$7#H5AdH*hQAwteiATGqK1)NpS>T3jDMSd zX^l8|0N{XSVhasd?Yw)szCZGmVm9@SJOwO8EY?5rBR~w1HjliA1X8FTc&LrwI{!hV z&6y`hNofyx*T~!CI=$b>3p?Qk%R|SzKgx;gcTU6xMrQ+={p6Qcs=8e)JV89Osd$gl)V9$5Y?|g) zp7V!X3#dyLa;mZ-({?NR;>T;MaspnRyzCfl5l1{HHLUa=TC;c(RyjOU9Q_pO$Yk{Q zkkS$tc2ZD!aId;4`T341`LcCqnj)nY3B34}y==h>)$?`j2#!SU=6QyA_icWpBNke4 z0tElkR5IzR_d~{5H?;K_dp_gZ$wA#`3x-3C`UuQXadWSFE81n)FB{G4;T02`!R4al5TwWLbZ$&j=dA?QiE&g5(wbLVDhGgodl zP0)(YEotjlRJ&X7F2`)&G|RTGh-N%#4aq97p>&6HLE8D7d5P^_R-R9wu@d6iOLgbg z%vhS=pq)_*x2EbM&GG3k)iJQ!_;`Gq%i)*=eSRC|Ob4k~@O(z-nRPcHypC&)jnVcE zrJS2aMKdQX%smEq2?3k)J;KX8fmD!0Yb1iNRsnT^VQc_*u&J2q$H|%3Z%m(0dWP8Y zYiB7vC}dV-VS9*|k1Y|!N4R0WTK_c#9?ZO!e|N)tWRu){?C|Ix@3uaDF(8{=4u;Ux zdAB2xat3FuiC?2<=8CI9;3B}+Qq=`#5eBxcn=a2lWxqm_Zt@}pN9L!hCWnUROl1iy zs?xe#6TQf2$Mg5xUH+Ezuro()-|jnK>63Jg4IQP?gPPjs!B)05jMxHAxbbH)jbZn> zOC=BD8#5S)Kz|Ra?Y$E1=$_017OMZ~m51tcVlz_+N# zmFZZsUXHAh-OBt+4NBm_XO=)^iN8zmnEd=El-yby$gzj?Pq8c;+0z7R zOn@36_hG&s>wL1hJB4+g))gf)?V*W@0EKc@&U1TWzArP&o?wiM@J@Uf*{^z_GMY;U z+>=^2m&=+vbGeW=6GKgZ)a@_7i(Het$q|>g3ys=YJT1g^L%UJIemYaJa4{Gw|YHLOr4t%1=$3 z0PtyxeR4_(TgPhHkTtefN>fpROTfqS$I(7aY2~gRDs`bR{Z8qmFqphyL=L|%M6pG2 zxbVxvb%hsy>Xy&1bk4bL{Q{<*-lc1EsDdDSvcdwQaNmWk(927Bg(3JBR$?zmiq-LE zA#xj>*3c54Jo5SuSF+8lAy1&GNP1|(NtCl)N=>lO-E@6YSj*=jBS@Aii|bpZl4M<# z+qdCGSCSx?+fJpdB|anWB9_qf&FsZ-;Sce8Af=WMpFIt8oyEI&Qn0WX%jVOsA%?VVy>2PTu1OuTpICvF*$?>S;Kcs zRQN#Rks|$tvKMk!Gj3a3QUL9&%#x)`Z1=;T|KdAY#IV>Vyv&bqgzUOsa%nYxC^4q$ z@Lf{cgSrO2wD|2FrV&8c#M(5}qBu*3;AewhQP(`QZAs+zysL(IO24jKS17V#H&9kT zk0j4D9^j|maISV&_(n>?aB^2HO{$OVMtbq#S{l3FJ@xEIHkJdc@}NGLOTc~7LP61)u;w% z!)|N!l#h{@6e5S~4lJ)UEr%19jb?|7Y%BS0 z-h*dYQXAck3l5wOmVd&z(#fqc3#_c1pQf%+`v|H)?caQ*V-u|(osaaR+_##6dD?Av zm>7~Vk00dlIM@Ec0B$p~)%^(A8jT~;Rq7o0vnobQE6;86n^V>7l}C)JERogxa2BC5 z7o(Dk8hLP_&6kn@>bUi_-p9>f@70~(jsFf3mEuUP(wONDnta-q(o#Vh4$Dj0AYN=O z(+tvG@&?Idy5b&qsz$6=5YD1EZ6oqfE=k#3fnQ;R+GTgh9%WVo($voV92vfX^Lv-D z1O-+wcMG;idsIWHVq>JcGcGc76}IQ!*Qo8E=o}v-m%WSyCnU5=PmbNO@f?07C93H^ zYm%yyMj0EIyk+Hra)C~Zb5PweSIUXmWm~G$?5X|Z*2QWP{)CxL(S72YL@JS6I%qh> zV;k?sd?{#k19O}PKGCJW&eHCrB9k@KaxZ+=^>YhWU;Zz1r*2?c@7>%*;@!xC?|E`_ zvLozNm#$3J*euBtn~4A+7g^frW^Hg^f*IoDN%gB&@kp1arHZP{9KdzAx9&;Hxnau6 zS4g{ZN>8&{}iGpr4O`PV%@+7WP{lFiBL%-%dz~ErwK#YxWf#V$z@V zA$5}3rn9&l+cX;w zu(Y5$e}#;vjdU*TC+VIzH@k3hfh>hZ0>b+QPQEg0&dEtsn0U`HnvuQPGnr7CXL$hv#u#+tbvdpkos8sinN{-6Y;IIDGY!vhL3)=0aW zVXbSCTumdLx0UK2UKk#m2#`KX`v?&M=M9=WzIdm^!OPCPS)KVI(Z=hg$uh?1V1olvYhBIRyIp& zu3Uw_z6zDQK6_g~03fblCY`Nb2X_X|Rn_k66>w?L(Y9SkXlK_gF7Yt7IG3=~FXytCJ$9awJu-mrL?i|3d z?pcXTL67o}r^h)GweI3IMTB>FCv)9P_vETGYmX%h>u8i(jYX7KsS|B~*#X5KLsWkD zh*#SrdYETPV2B7@f)U_u?p;uGx@QIJ{N=lh#6%5(-9%#)A>(V!ZiBZfw4q0bcl-r` zeo{|}R;P1D$HG9~5D9u?FC26?#okvmknNF9Df{nvV5}God6l)^ZI5PW9X9hhH5WwT zgwch$DI=9OFqIuFcMG?WDJ2IR;?!q9ej_0Fr+Eka8tXKl#}*q8S=66S?&&TKtqPzy zwBLqWF5S$xvd%$mBSngUz~&9F9rx!LLd{B1FFUO!9+p;pv^t)t^+)EBe=%5J1|0wV z8W1;rYOoLFx**p2=koGnQ(N~#zFcNPTS)o|wv-7}{9f8Y9 z`QEXf`^An*D#Pds;Z=U-TtZc;R&G0fEt^_yT+8}xDRcW2eCH;R-RmE#qb(jwV!rjx zI5KD|FA-sO+baashsQ%k(%`UnIld9oF8iY5)2SZwcm&_IVM0>4bn3dcD*Kk|eed)W zlp;_4Jft0-c$_VF94E!!x0lmlM93%O*r_~h;1)DXEI8_jdAqs!O!`p)V7bwYg3glU zIlP#t2p%DvW7dUG@?sj5*6gTTJ3ZhsHBIZOr|-MSgofp8b1BIsM4i>#t1WCh7jZ{0+-vAsjHpLOs{O0lr=*~S&O(=#PsL!J_u_fccBdmGU|m1yz=>&x;1 z%oCey&12tFP19>_)*Hg;t|L*sdYrZ=sy^$gT6n+4sqq(cIOS?XlJri%gcJZoK+nQ-w8{py!)QB@g9!)dV;5+t%%oX zqUtqlFGfnaZ-9>F!vu*Ap>m{B&B{=q7xUDISafa#RG|gAjAfHSdb-C5E1Fw(-^)j3 zp#TYgqNXrfu+G*(^UD>L1uhXR?`Y znS6}QOiyQy z^O)!%Nw*%ObRnkSB}}rJY=LdNpoKQ--?v48O!kKA%q|g@5;a2~B@Ff8@F!HWhoc3h zO$SH3)q&u~+Ts_b{4Z(WxTxgG;ke&A>W2GUsE^6-QkeU0MXf0$%q-d_A>hS@a@z3x zgG5v*Y}Z_%Y*n;Vp}zYby@OcxLYl}Jq4%f!QPcFq7{N88ttvQS~T?!g{+x$dyA3iK>4u)f41MUZ-= z0pYa%+kZ?VQ5%jidmrqRQ)h2EA>n?+a5)kdZMQ!hH+!euL&g)#i!23e9L0}o7nF=u@9&F z{F6*9W}?Za8%@CX3@YOjoR)zjlgLeR4qzbi0uD}L%qn6BN7RkF&BbJVU6 z&dFE|PT46U7+FPb3x$Dntnv?%lb}p0FfY!HiT+&Z!^29aMM@y2fb>WwCfWkGkngRM^(#l# z6v0)Tp^!8!w)|!p+9!1vtt=*bN|P1bNrE(rvbRJJ4z@_ee&3!K$L@3|b1e2dmDR-BQVXYj2~n1L+#VQH?$wNOK>u zYhX22fT+kRMrbM%nWRebM)(~&gLN({sBMLdS6){lMH4S+fqLuZPzPV)Cs5G;fN$ZO zMDe}~DmmuMr|H~~URkPcDZb&+&Xr_`HD%N3!osqx4Dm>}?$yUPB7b=C6iEXcbDa-( zr}{!C&WvX?@WZ3X8dd-WVtYWLPI=gy^^B+8U;s}K@=eObrrDAuU`*xkxL0+Eb`o4S z&=$=UQ)!qTX*CjhsCwY0`OF?wvsR70*oZ4qxvsrEu;ZIW{=_lCzaoJ?0+6b;_^Dpo zyI50Pu1^OdW^rj~F{Xq(D7Ej%PegGH%p7k-Dye#95}0+!kJ5wkf!3W}L|Q@(zpsaC z?Y7k#iPCP9%G$|P`kIsQNE=2ZQ~lf4&W-J@$BOcSnvImx_g@qLi}6iqJ2pz1TX&K3 z+}26;{oH{W+F0JdjPCOS&aJInZfIu^*S&?_S9ghOuDn|Q3Qm#~}xoP^@*_uFUIp-_c6V@}_h1-38N|K^}x%G86K}rUG zG9FUW0Bs)-Mr!W%H+@u%3Xxb&(wQ%3&7x(lQfZG z0LgyGvCSV-LO4I^WP6D3fjnc64vDqNcBZQ{QCgGc}i8CT((t^p6*<> zN!fN+mB@sycgx9#&;au?fI_G-HI0NVLmwMCwYxLpXn|cdY!!tYfRTBvfFuu&F2{$w zT{?Pi*<0Vi$@wDst*z1jV(grvD~qB;dt=*9MHSmtB^BGYZQHh0v5kst+qUiGzUnc$ z-x&Q~fArru-}`H?x!0VYtR6q~+IHmamHo83NopUp)u?LXq={GDP3yp)wv#-18wejn zZiQb*(>8NkcE>Uda=>CPzd)Ba2b*OPWljuD03U4=rT~&VdV(gf0Y>c`|<$5difohtE+hT$rbwI=WWv|Zo zJY_>&@2Yp$HG=I}CoEMQcsN_^y$wm9XWI)K)4H5=6wEv*+^xEXtGcwkMlsvNTy%^5 zt%$r_f&^}rYzXDLf;IhdnPO?CQHJ@#VL%` zh2_5%Hvij-CL81bv!dw=p^SdM%&sFD#tJ5R5)V4RMf@WXk+HXz5e&^a(m5#HS>iV| zD0R$lsaF4@CVxtu`xwt_zL!m)-o?jq728AiOsv~T;|s2=tB8>hIaC{gIsu{x3}}d` zF@W0hW_A|#ldt&pzv?E-$g z`T*)bKd%VdGX)}Ps}DX%2o81{AV00oF&XttOxcTViv&{W{k<1>lFI^nL{Cb4d2~b$ z?kED=ha!952?}6<9>=jKiUud;?L+j}I|F?bvfbT@fJv|imCpV#Dp1F?iE;!X><@ws zfUSobh{pzFodk&n=x;+}Tb+TzZ}!y*jJNxtg9H3hAOYy0|JqG@%RTr)`aLm1&(HQ8 zZpf2RpiZEi!uk6C0qr%&<9Or%Kp(y@Rbc*a&SAnsm_R`xSL~3TfFQuRq!<91qNk@p zWSx}wnz9HP74$2m;Ff_Sousl4UwPNoRv#Ny;+}?I1sc>kuDm_&_NJx1e^-~WN5D)R zdb00M4HnVd&EQ{K9SmVv@knBRs;l(DxdEGeg3Tc;Ppd*WZ2E? ze%!+z4g}%#L)(-T6&@sffcO+x_-q{m#%=XE>sFN`7HzdOG=g4+-K|jDvZa%}P z{p=U?z#v0|$5ctZZl?9Ul zf(8A(e>2hzZ;}Cg1t+n&{k!~Fu!(8Gg9;fb0Mecy0CCR1Lp1^N0DwUq6t0pB{3jkt z8YHw4=2Fj1dMr#~Hp(tgP?Rwo>(ef(17M)X`0pU%PA})6!A;ry8llkMd#-!1K(H?n zT7G6^1a3_5JCu9Oduvt?9+J1QlW|P{ect7&&EJ9l1K}epmOieP^5l-Y?WgLYSv?u9ANv`Po&iau_l$j5Utli8OSq+e z@`RknL&kHpMbG@7UxR|{WI7YO4I4_t&PgL~GQe*t!;3Hktdlx;B(N?<`WRK|OT$9b z1}zvb<^cESZ?mgkcGX0R2(G_Df{aI-L6j>(CtDtREt;M^;1m^I`JRFdH0@nAb$mee*yIrZJu1)GEB30QraYxJG0>9}G`EMXoyG*1?w?>z>g#=C5B1|CNJCoo;5I*R0 zbuUU-zD{wXS@@Us#n$N<*)U|GAd8t$Uh!J?+DqrpHt=Sbdn%N1X}P#PtF>*Gzlwu` zRtCAs-B-mz5;yTqaQJ4v82HOUZxT8`GozRq^fv4GZ?_az<5wmv_rkGv7vroFyC!Vh z7^RAY1PRRM65jcTYDNqq79ks)N*jE8?if+}q5lAg1b!WNU1+N#s+@$3gV*V*MO0@d zk?kcloO_HW8PYB3m?i#fV)2#D=Y~1{ zwY8fo!Ei0e%M}zVqT}gRsx*+YvXLt>U%T|d;xl8xMMapFqsR~Pq4x{72qtdhDnyk@ zw8^)9b(@`(9%=4}jzo(^*$sRT56YZ#oLcR@kGl11nwKc2ZIru1aRV6MOk#S{7!4Ra zzW*}jum~$&m2GH2Y|#D^T1+SH4A|ozW`w8@_8d`h%Y4Dowg8N$!h&k}20J*2>mmzN z^&3#%!S^n@zh)8=6SN?6?C$Cm0-RI@Z*W2jj7!f791!^R1?@R$a%~Z=)7T_haCoYc-dnTBI^K}0E~Z}+cQsYlsq z&J~c*ucRLz?*iO9=@M_c!b+Ul~3LTgQg-V<}AX(S)~EA2ey8J_>N)vPQA zbI8pI3u2KaW1l}FH@$eKXzYH5SQ9#S`SN2;XG81hCyI^t5c6H!m|MzNYLk|?U(BCR zfjg8F7Dyb{ILpd!yo z>d?@$NYySjvnmm`KAJpmXecj)>2OoPKq zzlichjO{UIefrDnAmA65*J{MtV)=DZxwEOmgEECU*RbKNw_=VUvLN<=w5I=IZrw_JgM~S0K=6(8#81pe&Qa zM&pJNHC@BEgZTGcQ`1Wkb!aTJaQtHT)tv>8+8@FY3T_fTO($Ay-I;&5ai6op-m&rJ zo9RU4irAxz^D*(4Jr70Qlw$AmeO!}+7tA;K=iEBqKS#-k2p!O<$`v^VORTCMaSucnhc5b?*8bRy$l0QknDe1CH)vS_%J#}-MpRWx zlGvFPls8=ZnQu#5xnz0#>XEzLIQt*++TbCHjo_Jr@17S7UFJ|Uofy@ivHOU7Z_9y> zM1qBV^qXnl!!Gf?{MyZ?ttsw2lF8<2*v{sYofl!;iy-8BA$(HtRqMYbfvPLj+RaBf z+j2^SFkSg&DMKrDRalB6cHd`{t@oG8F;gD)Fy`>mwd{b{vLeyi5MMkB0)?t;)HF`5m z?t7Ui+cAFoyxLoW^V&W-xWyvNHc3I3P|}zbPseT)`#AeC{lL-j89O_ma&t%)`sq^s zO#K%FGQYlvcY#0fSv!uZAB(uViPF$VCR3HuJeROUv2zxf5#!mBqn`W&x~F3f(}ONR zwYrY$MD?}dxAzg~b3V@&nYDlbbzhIh)})9}RN0X=ugUOlgsaiBFN36!m>_68tvARx zg8qX7C@|a&&ob?#p>nelw5acp4rN_Qq2fuaFC0>GO{mM`t=qA&u<{*|Zk)gOuM4r> zb$l?)^yt@D0)OEonRqUa4nt==9n&L+8`Un8+Zs5fu&K!K57X{y#7nsyEKYXTjA#l9 z;B!y0)Xy`Vm|9AX-k~=YUa)a?FSd@eE?8!EqvZUPg-Cs|dCmojWgi~u^eJlghgB{$ z9D8{}gfz~-YB-&_RgmE7YCD+2O9vI4D3H)b?Ig^!v!KFxf?{liH*AX0^At51vs}Ba zG3XT=><;k?hCRy{ZONxeDh009#Cs`xyR!TuemW@Ezw5SE_=v@BNeiEfS-Ap0wanfE zLuy73?kXI(>4{#xoc`iB=w~eRCv&&h2!;n_5PuPh+`x z<{DqPKD0tQji5pD6W_~Q%~Y$Gp`k?V8dfb!n@)N0zK>=}Okjz=d`5nEudR%<}mfM6PHh5|MarCThZ*LkH*kopSO1sVNKsmkNKzJ0kl;#e_|!fCb8xat6Y zrfPYymSN?Pb0kFYf`65J4@Mz{-*eoI@fp*osWR?o*x&`1ie6%Q;*9j>ezeceC=qqJ z=ue5iC6ahvJ8?Z$opN>z$K!05lcfLs1{eP zT@DCUUE)bf2V^8E#z}gPIlfiQO&f`fUVW(>pDmd&$=iDa_ENg+=A6am7W`4o6w0K0 zl@vU`1EE|pO!RuR;A}C|_9BSSTi*@u_kZC1xYyOP(fyilMErsbAxG`n+|KGK(%M`i zve|((O}F3sTdwZW&d`{hD$!Xj*_vZGOH$m4DNJ+rvhyBK{B4O|?EY6Hc$!k(@6p~N zu%`8_aQ?~h7Nn|f!RYV4Pd`mefE`0oCBD|l>wRd6W@l`%YbdP-F+je96$M_|gUUY}Wv7gLMZRP}@cuH?fa8uJ1owW)* z$v-!+880L~lIy=Cj<;Dw9+TwfBX@`41w%&482N{I+7BU^Le7G(qkGwfKdCIwv7|=_ z&o8IJ5Ap$xv{c`Ra19SZ$TJ3iIx0~fY9{jZe9dlb3TM9B@OBa6lNw%8kR_LrR9aJv zY=Bj-G#|-Q`Wo5704#)%oVTcxC&C5fX6$;cw#97;TQw0FGc3%+q#?^NMTll$oJ@Uv5P&ATED`VD|EVPC4@xKzJdQkCyb) zoj)Me(x!`yi0AaTjRRprAaftBdJDk51(ThV&G zSZ|{bN9>n*XlWPwI)aZdRCoRCO+#06xmaL&o4h&;+u2)Sjv}rR#Y*vbkKeASA$g?# zN|2o>Y&iFQ40HcnQvlT5I$*wU!WD%^PFO&0hBiP!@$&zs?Wy-pS@0+D!a2UDBH^V; ztO?FS^4{@~iRYCKU&<&^W}nUwtcBkGD(~;64)A_$oA}5Mvmv_AYAHFqe)V#T^}ersMDPF zj1i)TgO`jjKxnDu(DuY!bM^KP@?dqBv7g)h7LnIH92P}X?o-~#k#re1vY-jDdQvRN zt$=!rd~w)oTWx7ESC*%TR^f}T?QCk?w42rK(Mpu;VHg_e8;Zr?Wlh!*a={(>Hy6wM z_ZrE78#EPmwyKC_V#NwYAs&TIEY$*hX;NtrLA z5`Nk~sdXgNLA3fAsl5SEVXN_GX|JnrfXUgyPU)(VIq3KY9T$hEJ_k}^y;i-J)-$L2 zYpieT{`>sx>BAwsi+1u}iNN~AZULD&HJ+0PMJ;L$v4)#*0fnB@nJ*_cW>1q5QCvgh6*5uI$J+(HF*v zvA238cnP1pSgV#Pt6*vRe z&(I}?Sb?SI%wWwA5wX$kgQ+z;pM)X&r#;!W+N36l;0_2Qn}0SOMZX>oB-{N!$aPcmHC0`KU;K(Ze`;in)Tq1_Oz&nyf# zddfgkHoeT{J7EZ}f?_klynPwUO`YkdoCA?s`&(c8Z1kd?KgBASSJ9nt(Ks~q12#O< z;&l=#8dFIoq|2$EMT{t;65Sfa{A!52= z5i3Pl(Y%NFykz@aB^6od=mAuaXK^mi*^S&s<4u+wvzE;l6Jy&{tJuWGWTGTH__JbZ z^=l)Pp{-as9!9a{k+8csWWx4jhZg4-dO00wJ6B@fWyj{qMv-+? zD?+uT*08EXA6^4>Qr@{u2``NMQx=fodcSiNj__2S@q732KpOSmYf9qW%9{-Kb&*W!tA2}85~ax&QquHMKD zgQGtqHKCFFk*xa=w}9An$c|(@oW>@f_!WgE>URkbm_jRXq_HslOCdozvMftMX$lxj zcQF}Fdqx)s{2iAG4J6Lw^l`zu4P8=O$6QG@Z=H^3f|I)U%A)K)_A=_oUCkx~K5dX* zBSku0S^_@3K)LjUw(l?QTM=nXhh&lRzw7i#w#IPxZ}b+?7FkD_t3eAkrB{rN1A1z0z)l#O;WwKj!_9NZ7%=-MQlO(0B}NBY zYXuRTL^LnK)V2_^UbBu^9ai|Uaj#Fw5q%Qu0kqN1!+6w zaY&Zwq&n_&KE|lIN%6?F)dY7lc1Sk3kfvr!;t9!-hM&n3 zI+~&5c{-{HU`)^9?FURN5@W?&r0K3I&GhR%V#$`M>8)*j9Wpd8p)~!qk;;)=il}}p zJc*%H)OEnR8)M78K(w|oqzr^nD!$?P3E@Eev(Sw<~>K=PtM+43>f4*yv((|?DFA7E0 zP-Z}E5lzuA>yVd#THC5Q43|ioFj00>C!Z*v0JW^^ze*btO863rsMJi_OLf}5t;+c_ zUEy_i;7^-Yv>r%Ux9>JfL8+_|v0oq!xQv|)s=KF-d}y7bGoT65P|j>^Sv%Uy&);)h zt#Vx!ja>?^H*B<&19aUCjFu~wn=6^2{Ozk|M@goF?;QzSc^V*@KkOKOzNcBeg$buj zxL~QeH#u_s8GR>O@6M}re%^0iu_L4|$P*mub;M*tSqX?s`pGU`+cs(IW@%3I+t^Mv zUu(YEby=R3IUwbMo;bI&W;1r-f}TxIZz)tJor2BCcGD8FevLLVqTi047GQ(IkUw)b=5- z3JLy=6k`14R>uCwZDY-s7Jn+QQi{2|BI_^O&K;Xc1kuGnvMid_j4_ca@Pweo=uCtw zZ_d!5UqLYxbE|pu81?T1s-0@yOgk3NVq6t8lta`!9pQ@A{2R`Fu2?sT7Q8Fj9xSe5 zI&Qm8mkk!@>D2>Ud7nhgRBJ==*4Zx$McYM@Yw8)2H&Edm1HMV1CPtu7lxvhXL<UgRzW;ZaAtc3J3x)Y0b&? zSX_o1`E&#CTcz4+t?)Wy(V}Ub2vaYQdn&%;fq~rOde(JEn-B;d;0n&35EJbh`z{D; zu4oPI8{V+oj<9D8KMg>r-Qq@hw#@%aY0FGMNXuF3F!^4o2KV~J$&f=!>JS~mT73gW z6OY`23sVlM6!IG2gY#m|HSs6|^}yP5!;+WJb61>~ZCnqhuq%4B!#{dth>(rOW8bT5 z9t9nheEVC9VpP%s!|1^peQ$@~iH*688!pd#zC}8N1liH*=d@(8=jWh@z)6W}LC!3Q zAp{#WBPr_DWBpgY@d2G(mia=|b?(8!x5SSMxF{e{{i80{jU)&3&;P3w*M@< zj4bT`6T)TZ;$;2ri;w@2lD&DR-y)8A%=Zswgx~t@MyeP%z}Sn-^6w`m*?+z`Q8Fwz zd43CYo_wny5ERHX%>~@~Psi@m3;)O3$JU2W-pPUf0?T1itB|^g3bH*qQMjHUYJQoG zIW;6QGV(qaGBVlzE@NOpcD|nh38E3@JVL0y)Hg#Q2`a2u0TVeR?9_r-F9`0nEFc~k zKt>INnuLxFfc{sm{fr71lmt!gC1k|&XBQ9z0|{$KaiAp8?o43h@j~~^^6LU^Bi;nW z2M4cy?VJHT%qUSIK?Xq9^^^G)ak@ysFToi_1@+~V|Al1jB{mA>=@SL>OG|$Wtggin z1vDicbtByd7hHls%5zZ8gIR*TvM~xmUBZ8{;0T~V^^OuAKSObduKwZe`%MWz;Orxo zZ^PprAg~4d1v;Ar2EWt{Xs4HdC2CkE>i6m0X$0|q6#~+~aD1r!!2Wb&#s(GQ?C{^) zW^5zq#XJUwIIS?hE9{hi0nu-pVjx)^LkO6L^71#3)wg2Zb34)ZkL=_JL=)cLxZ5I= zO+p+E-#|LOvyt4Y;XG2&4A`KfOi#;mj>nv;`AIU8p$GE2+U@=;$p(}1?sfZNwJ^5* zXGzu{X^&COt*m`s4;Gi?9my2x7l(x=My=mx|)5A-`k;m_L_ z7oj$Q^_+;{mqCmCBT+&v-YOWZ;E%0>?`|N^?FB7qf0+=P`1YS?w{^taV~u!Mb{kj#?AFWA4E+;Pf%qSuT>>R}L3a@EH$f5r zKMcyh!wvThkAMUH1Zs#O!GCOo_WC(4?X^Jr59Zmg-@pbItF>* zezxzKRc%OK0rz#q?O@5}vtY&cWL9`Rm4H}o(9M7@CQ)M`meQi50`|C$6|A^-?K{1! zz`BrzH8Q*_sbRU?3MC@iQ-&QM(+E?~%jewUjD5Xp!PI@sXQgVZ3`>NLKTG~C4VM-y zDYYzrsS6g(aB_?f#FCw*5TRTItDF;uq93PY2nJXbuw)ir%5SgBlrV3*r*1ZDX)A@= z`ChZJP`HUUFfw;tJc!PWxI8SEf=Q}y8zD$Z=&*7>>oAz-5n>u8J8E@$DT$bZ;`vq9 z6U0mqC27E)mll=&6i3NhnHgK3dM13fm}CJiLbL7=r4 z*3-`x+a^K*mFlks)|^Ww{3bYdlbKldORjdlx}E9b^bT{>1J5F{l0q+>uFf|mzP@4! zNcPWkl^$(Ti%IKcd)dm&K{-8V5Zo-_*the5aKbkZ`H{^KkL(Bq-U3d=NJmzBpAxJt zAQJ0Ux+9L+f#%wP(k`>sTuZ0IB2N^-IlOx>M7~;mrv32WuF48koMID%=>Z|4I>~X! zidAdahhE}fg(@yR+@zMa7U+qbxSTRJj;@sn1hM}sieg}N{7Zv^;V0e)>~b|^y}C+w zl-@QZm60kMo}%0RisbAbxZ*Pd;NX@IPZqmSd87#EdfDa#F!ggj#4Ixs-&@mLJ8eY$ zdZFTg9BUCFc=CAe{ZiSzS{uz!v-Iw3R>4b5;w8HU7>}w=CSEYAge=mH9De6ifgP&C zlj040-CmyvjA!F7m@NRQe0RagdR=gie17-R z=Krk$q6`o@1fzwhzpKn%Z!ldO_eHlIQ+V@_2%A(^dM1wii6AV$GbZe?+1MVaw&D4; z{{5|};r<@(X2>x@cd>#MlS{KBUj0KTFhKOa%qXFg;i6{R&4ru|{}wZ`ft2URiD}_L zfJ>v7d57 z9~y@)Cun)2UQGMY@6zy`3EtUQ zK3qh{N3|?^OG%A9Jn5i!j5|%yoQNj^e}h~c5c=-?S?d_KWqQW4xs%5MN_B8LE!kLa zLkh5^o^*K(&GDP?`kmy|u!ZgeD%feypr3#SJ4Q|@ESLJcF~-8yr#r5MsO3vDvXXCU zzcE4+PleI|fLKTFBT`~(7iV;D#1=LQC)ch3#2R6%j~9_xW=@e%wII`;hg{p9PTeNP z-=29G#vGP-vZ@v7VNN#kzxFPtSDETvj`^&MD>I*b(CZE`r#cAp1PgjPwBBZS?9`w) z9=e(_nc?;)RkxT77{t@9j^|DlaMEz{$h|Y!zR%|!N*19Y^%O;Q_mnzn=`?9gW*>WA zW}Csoa=gZd;5C`O)2$AQgW{ZA=-Lt9izxfTiRpjl=X>j>A6=D}v!g08$1J(CGj+&c z|H4Y%)7$!qrimJ{pM+^chA@rs%b}7Kb`GD4-+jPuwb{|%{*w(fr4p#JRE_9qzE}4h zT934F>DHwLP%QT_WNh;&j+dIq6s2WplUJg7lrF}d62|lb9S(+%$cl&v+G1~1>3kZcn0|cFh5101y3UeCM_-`39KcxJ$&^kzRY$BEV59Tz{;TWggCZ=o> zA(XqSE~BEVZ;>=FXa0O}7dl^9?D$@<$Y?Ke3}-#<=C*b?f$weP*aUf5D^Z~S8Gk8i z)kt*vSJveGi?q+CITi-bXA!a%9BTFQETtB@&5}ZUvIu_wAG;VVUWChWZC>Q<&_#p` ztedPNweI6pI#7!0rrA&L&V?9V&M|n=tBHHz8e5f zmB+Xq&E1mHfEgG`>FX(dH9Uff&Asp5sJ4~`UF*QZSr4N4V=^9OjUHiXMgqQ(4U4>e z^C@kcFH-X&0k5I}iAv^aIut5(UT<`-Fvuxm$r`qq(7pXKvRuhxJCkIyB2kpWLC$0% zi{68?@LAlD{aGH^^B*zVgl zF~B=S;oe289cYmLeI!ejl2-66QE={$V6?3E3wR%&flJ^WQ6oQhbdm?^)8HeRyc#|SjN*Edu@1A_v|C_LX0D|QY zEw?%KhOuazv@q0}Dys4`7pR$ydMmS)q{^xoAuR#(?#Bm~cn9^uHm;#G{Zq?y96&(R zG)U*Yt=ZD|N)@1Le=(=S!Sn<^z*L%^|N0rT)*5`?-1%U31uGzv zeyF40Dm@F$ARR-j!ZB%NinJmNMo91?m&m9OyY|~HK24nZ-@dXurYcGb1P4fgO)tma zxrm^UJ1FD7Avghn`Ze00B1U~{rUalU8pSNtH|)+}*ErmUdz^_N_;!L=sP@cwzJ z(wKkOm|7PFifissNKYpd@xdCnk|of{{ou!vl=yq8wTbrh4>l(VDu2VsVK!jQi@Wl+E!=s71RXZR6!DUJ+GZv0xIzn*EVib)^H5lKvwA27FXZ6b^lxhC%v@!iTVB~Z1&ns~ zwW1Zn;Fju~!Je=aq+$@5Y_R>%@w+tJy!pf+T4`UzGyXy8L}O6dRJ29T>X2M;*tfQL zg#aNM9PP+b8O2mN${S|5R2bb7tI%NNSjcf(wys2|_Ag06K{rhX{B%Y+5bDL?!7S4v zeu$!`r+}NvII3AQ9{+k;C%FNCv73_MLF&PjrmmpG@Qxs}3gk3+|8@3?d~7arRX@mC zce~^)?a?x3d(QvYsg~wEb|OTY-T{AU-LtS2X=5TnEuE}^Kw1lWq&8Me{_O``chEps z@}0ALfDdcy78Uxhg{q`VJT-Ns97uspNWX!>7-tVTJ)!lMY{|(<)i2I>-fGxawB^&b zgY|F5Co%gj{lg_+5v@`y5e5_GU(uEhzuPS4n>-_89}Ig7&zs{{Fbi4} zAl=fB^iuTfcqxkMnqOh`%u$0C>l|_)Z570>midmboBgTSbRcqu@sYfz9&-d6>;`i- zsk5TSP+?*d@zU1~XBlNeCQghdP*_ZMvU$~2%KOZ6P&FNKRi1k zlU0?MpHT#TbY|trerh*`oKb`=)^kxh=tMk;Iv=})!qX|@kcFLF?POqbw$Ar^c}j8O zC52_bWNHW~>H_t}{S}Zm?C8n6BkpXrj9fI6QsVz6PRTKmMQQK`GqhLP!>8sRXE^FF zorgbGi$z|`s9!Z>u2UGLiIGg5>A)`uK6G>r1Q`Vn+hULl<-8Gfr`XJ$gLQNk&=({r zbfN(o-@p?%K^otW;#ulVIK(@Jai#U-n@5!wtx+RX{=kX3+0@Ly7=Yz`O*1Julp;!K zOgmMiFwG;5NDMVWq$DpGWExHQDl>oF|Ta-N)S@9a8V&+B_lu!DRU_CHNwm zETo=1jak+#y^y;08^slsF#ZehODotUbYqYQf+ZsB;O6d1>taU|hWo>2{_ z`N4m$`hkWhCI29WR!MVj`BZ-ns*@HCnt)W>J5+=M+kwBuf;uE{Pk57FPd7g~DG9<` z1FCl{zpD&sH4MFQ!F8Y&XB0Ep_lje%o(!>6&-b z*V;wC^Ovssx415w&b`RycyXn;NC?N=&-S3iiom9@?fQnJnquuXxF~T{_NeQYw7JwL=%BmWkEo#IUVmzeA;CU~#PcM&OCLmW;j8vplbu)Yv{{_!4QYeoJW!5b zgo1n*Mj40n=~+D{zROQmWvQA-wlZ(CX!V!X%&o0p+@4aNMPS*cy!8yM4$x~Z4KLo) z`b9denme`<1KBy-c569CvzJu1f*D8ot(`%IEhk z@+++0e$yRSt23%~=lBIazn(~F8g-w;=H6hj*DMaG9P`W(q>>gXEGQgaOkwxVY&$#W zL=-u_L?>40r_7fO+2+8VU4W~*Ga0Pf9t~4SL%+hRu$#AKo+e$H|<&x z_iOWpmA{gi`)ap<2mLVH={t_oQP6BJsCQ6YB&G<=d33~)@O3=4%U%z&r(HDGT3xVk zH?LQB*0!3I`?hO^)o5cf_o-qYumiqQYHcc#zAf-bM1i(|srZf5NfAb39D5Q<%+kBHS3G3 zLpU6Ke54Y|>VeiP?qTVT`LWoIj4)>RHpzSzgyPH7WIB%;CUt#q&O_jdfSqDCxHl8| z>afc*5c5#%qP1xqm}GIk@A!u=(m!VK!Rzm$@5Iv>H;G#rBG_+FkibV)i5uC)KvHve ze!Wi3D4;Na3YM7J;0?UMO#w({+Smm=%it(&INTyh{MC3jhi zti9VG*)PPmaWrI>`Rg|(Nt8MFfP#Xsaz~eS6Z_`@3T4@5SZ+_(7xVGh-+hy7myVXg z>TYm8kHY32%u;J#=o-IEgF3Y`a#JUnIu~-zZaYXXS{?lvbu}60l5OT?p@XFn^F;Q4 zSN@s7Waxu<9ZT|z@+cBj#YwxXb1=KF_Rsj75>#82ND9ma*6Xk)Y|p0 zy_q|9@}Dikf!$=SPq(Zdh-ty_?nww9vK!k&R277=yShK_I08#kPU@^Os-8|E3|lh! zN2XEC5HRe0dB?F3298UD#BgDUNg|o?WO8)P+Os|qV0Jmxo2I4G$iGHo6WMErhkoyP z37&iOZ&7Wdcn6PKW|cydWZN9t@&B(1%lc0BrA>ewC_aUB5)d)pOj9xe`MC=`-k zEDQ6nby})x9!oJ#w$6wzQ~U&xFp-#zIX1QTw7k-HHv5E{KG26-zW12r7#3G~mZCE= z4e?fNBB{r6`t^@Qnt)4tLuT~UrpoWMMlPS}emU+{=OZpkOtD;|%dGM7X~oYXWns;L55%huzTkJmiAMW4<}))QI70rToqtpc_oPRXd8~ALf`E6a zF5RQybytYT?u9Xlx{7j3)uf=Qb*VFZ60Tc{b@h=%8Yyghfo+=@^v(56mm?gsxozKR zCT2Gjl2ukGwE`C09xXZ+6%}dAYx14)R2sL%tV2ae(IgF{xV)v%Jq#Gnqv6YR4@1!Z#XwvdEIt~HT%yi9j%Qff(&V@ zEN>eDaA@9H-nGNOKn!y|rNWcCx$}z z1kF6#UvszduT0NL%(8=5q%}g~1(+JVw?#@$|Lmp{+b>KRr9Uz`=|rV^!3v;U?hAd{ z)GIop#9)~=)*$i37Yd4m+m%M{tzZ#kuZ+6!Y-QcbLgR#X1_4$Bv0n%9su8nKO#I_n z;9t-=iWpy$`Erlx8KMk`in06d`qeqi8&B#557hf!yi2uZXd@E2wk4h zS==&#v2w`&jV%l;n>8AT3D1y6Ep{R(DQZ( z8fS>_l{v}VmQ)OrV(~NXK6Ed#V&<$Ke;uaq8w%CA^tfXhT;de8JQXYD;7UV6@vaf9khfj3LUa0 zVPkW}`x(pO_;HZB#rXIjsq0n#1nx!ThEl9AYZ2fZ^{UMt1tKz;Hn5;ej`u6+PWq2# zN(}*9UIEAA8`K22h=3v38t05;y z5wd5l;pVv!v8U({zn7G$L(`O@_F`*((S|~N)yF%wnIF%yeMqFLVuiT|QgaV)zuI@c}*S!&x$#-Xdf99XD z8w!L+1}Uh^K{l20YD93$)xc6@Gyae`VZVE5foDsz?F;XYh`0Js`DJ z>OkdiL6eMITx)}@W*jeE`lGXUV^10V@IS#Yif#{Qn?r);@7psnh1z-rmpFci11g#bez6+xf*Je?NSZ*@nGxxF^ ztQ2<%zg9DHS-_3Y+a1!Mw`K_Sar z45iRqOCE^=F!%X-P$?}PxJ_)v%OsEGQ~YcKlFzdwOVzVk?tawar9kNL2@*{_6kuy` zC-hM)FDdudb0NNJ$#Ovn|pGMt20!|+`C^Anv~ z4fTb7b#!;tr?2(~1n1{b>RFjkJ{?%I+^*W)?MLQxFdeGo9YXfaF9PE;B5tG1j)XTH z$M^2JgHvxNl|jg<2#aQA?NT>Goe|e=8#(db3%Qc+m&c2$dcpQ@gx?*@YF3MsjvTem zsdvNcC}$!JZP`S=U}?5MAizA|JOBR&ckGP+YjDTT#Qa~Vj+vN=o%w$zcT60N9L)a> z-Bq<3Ih*RVQs8g6Uaz*;Y_zzHv?$b5w9l%g>oSQjP5nxI6 z3&B4*q%fp1f=_U5YjJxRp4iUFbnnzu2&~T85n>hS1;Xg$$lCf=%E~d^qfTNAK=aRP z49S?CtcL)JF0QOkZ=j&r2@~c&=^E=iL zGqutl6huECzrN(0O@CX{8un?y-kqxP{Y2m~OcOiEchbhxaV_4i@f*kd=Gf#{UgG!B z2i(I79BaLUGZ=ub(;s-q+zd$HXye+*atBU*VNI?r9qX}fZdv13e5^i4qstaK~V7E7Lkhd?P|K@FA-+zrR zWwe0;dlZQ5&)dK-1R$II#QqK$(9ho3pTaNe$G-WK8nUU_u^*nzCYenq?PQ9Lzv(hS z3hkpO=RHklU~aR2X?u8XzxEH%lEObAB;&2;b+OuJ@)93t!8g*QgBg1aO!?GH`2Lk6 zA*HA$q8NSMvt161RQ#^wli%8SW2gseLj6 z>t2CG4PS7fM*=Ib6oP7a4F20Yi5VK-Dz8BAZzq#mJ$*9#sq9H$1_oPxMB&@c-Me0> z-=^txO^u(**GdFX>(;Ld$aac}sf%f9k5?&c>TS@H!KKj)dHFeK;n3CRi+MX|e{xTB zPX0^CMb;-EL*avWX_)9~FM6u6Gml`KCT-d;*2F??_@n-^{C%Fz77pff%p5XO-i@-O z?NnAc9ex6(v8HL?`zH11h1i)ZgG~;xL`4~4fTW=dhUgJ0USt?A_TtssYujbRF0{y@X=G_Hd1WU%HR* z_w(*O@2(QeuW}HxPDz`%2O=ocowMlhrdQ$cXt5A`jOO)yd1JaV@M8opnx*@C^`DY( zLE&oTTIQxuSs6s805P|jx~V#JeAW*e0c|GuXXzhjP6q2$;GC^;sNh}Hv0a91arjz; z?`lSzNFouVp&?sY{A+wVprU?-R{aGc1o1x1n3k4)e|oNRw$lKRLAn+aC9(KrqusY6`8~A0c;1 zv9pOEcnmc%EL=0r^tNG+O#YF!UNMJj%W`jf>rg?}_D+ONeVA+eFu^ZXEAlAc; z0=jB4ge!Z-PLm4d%vsCy{h#j%y(C|ZWCFHA$_vL;Es(#6o}iCE%iGaSITTs;HaR9p zd|IhCNQVD_=Z z)ug5ERNaBy+gKO~Do?JVKrx4GZdA@hzn2&Brz1bAKl`Z^iR4#FYe6J`3>+wF9W-Zu zmkAw3lP99gD|{jnmMJsi*V&aYlZU)G5pT7q%KsYdeIv^^&~Ye}Hmct%11)_xH(G7x z+EgYmdPSbA8i+(fQ|@7Nap8)$oSps}^*! zKG65X$byPv%2w@z2+_|H`1Lj@auGJNxvCA|Kt5;#e5g_D9m%H*hKMm1>eOk;q!rA4 zc7-%OT^o&pet0+HMosGzIa+CYK2EQ_jggQ~o7qZ3+8HA#a^5s@4@h|B+Eut$yL8(EPkt$k>w3|ji}+aTn^ zyT#%6_7h7mk}3fRywzFtj}ls`!3WkI`otEZ)^#T_Oh@_Q&! z;0}YMFTu2xS{(5C^GfQ_R%0^VJZ)KB(rA-;&l{nHmJF?D+W(>2=uJ_=1CIFRwNdl& zDusM8z!0qV$@}Fn+Xs3rJXd|e(j^l>Z8w{r9fQKjNF(Yb1v2Ll>=2%^In`gwiU;;M z4=dxd@P?v**ib0xI0U}5Z?%55ci4=TX@~o^<^Gn03aBSD`KwP@0j}rVTU(l}fqJV$ zlWl_)hzoh_Ebp_`DJ-20ziL|8RiY}xWiO3L_K;86matb;gx<-W{#ZIoPTrRI#gqaF zv$X6=HfCkw<#gt1Rcbd0@SkAtt5oi+C~=99fOV}_cI@r0j)!H~te_z0hnRNh=DaMp z_=VJ5yzV`RE~u>3XrcDsb!Nel6H7d^b7mvPTv-Afa7R4l(+q$Sr618W#~M9KO=$>x z^qML2Jj}rAC!PmA@DhaUh%VE~cX;TgiNfrT>$b%RFQoEE855@#pM|`Gu=$vaJx=kc35|CQ{(ZYwLcPZ1`>PL3>SMv|?N z^CCKk1RiWpV?Q3 zA9(=G(XAIh#HU-fwjOhLt&A6iRPgIvl21;D3)t=YJ+{S^*}V4_il7l^$1bV}RB1`h zRqs}3XXc*&T1{!FJr;Nq=~QK_r}MLUyOcCIhZkr?67We zddwwp$6*^zG1^yhZJ=ylJm1x_;ER=K&W0%BqL@8KC#n@mHh%`)So^eaHV@R1j1fk4 zfs6kNwYKO>SCkH(FjsR~rFyuLi85Dyi>fvX_+bC8-S~_>BffPsPhVPe$qOOg5!;qW zUNBI}=-vD7=Cyy%lIbjTB&JF0hVrFCbl^Id2+7{A*CVdn7k2hh$HSuT!X7cM zq9nhF$3GpayvDlywc2B{YZu>%)F4))?u`Q_VXM0QZy>SCi`(ORZ(wui_W!pa`EPS)ksg0^>6mBR;P)^iOl$JMHcLf2?OPMVy z<+7kNayC3Nv&{*$Fwx7nq2qjh=-CY?B!H|dv64EFhzKgZV-#;XX-Z(Hv&ZTS`*K_n z7IGX>qpu$VoSMbV$rZuca73p#mShAPqNrUoG!S5111V{DuJG zZvf#BJqKm}oHyCKxZX*!=Gw@&#ODJRGV&L)vXk3Qch&B0Zvwh1Mpd@lu8{!6%6#tz zL091IsIu+D1>)(#Y{a|3xVd@3$JmVa@FV@hYzaeU5>VmNMqDbC!s6s2CZmj+D-Jcg zW{g=zU-Z_W!qQYCP|qi7lR9DCQbLd>*^z4EKbORp1l$vC5fhBYDCBS~{jSK;+7;ln za$LoFHquqn2Im_G)2C})JDd`;H;M2LEm;gV2nY%UAOdw0`QGJm6kHj7i44vq~0%Cg4vsKjT;UR=LU4rh*BYB7X!gNe%ZS)pxy(z>88 z1y)}$d9~eW-=)-MgQ8mK>#ZaAXvLMV3iV4)gora;P+15y{&Vlr+eGn49itSFDa#{O zl3dz~h*e5I-wiCJWXW)epsVjx=qa_C%jT(_y8L!iX!!h>CE|er6QIC*-Qk zfU~PaDL+T6tOw1*#PMOMX8@wr?sZlm#UP@hPIylBF;;NPT}h-Jrr<-T5T*TJhK3Z?SEcqmR5l(R4Qykkre znvYfHx9sA8-h+j@{|n4qPzt@M*%$W(91g7GdkT7d8rGwEBdrhpf}9jpCeo)7k47B8TQ5qm%g-0RA)<0CP6#Jf6X7TB;iND?&_-kXR?3@P+(U@W z3QK$aG_C~ZQxcZWne?g0V14eDnT}PvobleKo?Hklw;zTf#y;~qI7Jz)mvpob^@p=R zl^gP>CD zs2yV2$!(h>v_X7ZSJ_yc)&nZ=!~-1)C8+$FIBijo_4#tKrI8y% zAyT>UpT5x%1ohy)6rx+mEq8?$KpLCPo=L1JA!XDvR${%3#(Kz3Hp-0IC7C0RJh(1} zP89W?X$VDjGg6ltN2SqZavz^MA?RL4TCry=*kTs~8fLW?(fMvnY$>P+3uBnnsu0DZ zNRG_pFjt97`&dRD4CinfkFXyW_9+Qk*h>qq&{B$=$N*3zV3XsBnQGzt`+$9f{`2qVPN}ccWY`<&C)z# zT5yC$u_-E~bCM>7N?|8#JNGe{K(ef}^WW!r>E*XZl%Z4j7^!36>40z?{ z(Zhmm!Qu(tp{O9(;W@5jNoC}kK!kp3VxlG23^v7hOcPYY11$lg5yyHxk}Hu{OYVA; zxp)pA*VxL*U90`kT>UoyoPwUwX<=C57Mt(T-t5A%!@eui9+Kk#-(BhGA-#V5fU^{P5Ixk3?Z%81Wq{&{1qqgYdMdYiD;nZ@Fr3V#XnTwxVGTtDjmv%;F zV43>@`3v_Xek7~bQi0uP?W2rLn=#V*ls+>jH1VD!{KOPOvp@sJUlm(RLc6Pk# z4p{k=s0<#IT=#U$2!~#s&01|wPVS8y>>=h4659yC51^~tJJ=S3G0f3Ww3@<_JC!7& zyg%TD_Y_kCWfhq{*F2vh?KNM($DEec>9Uo`*fmuwh3>W(=xTS&lLvK|0>4fvxVYhu z1Nw2D@1+kk$JXoko4)q3MZl3{XmaxItPO!i*t#DCbV2NG! zVI4)mx)~OFU!YIyE7I4VnVKA%cAxZnPL&L{2-j@wo?*$9uPd%*BU-4KLo({vM+x|z zu5<6|3Tvq15xszPJLGpGb-Qvh z1o~NbNGs@d=!GAcAU-gh2cKlxMN~wlV44`?EbN!Ncv|rPtRUdm>roJXUigrV1GaKXd%$TM_hTHDw zgp3s>xu!?#l$Z97%Q!^U^WK#OpVs|yif1p4y3G?|{(JncR>gCN_O zwR@o^S~pjPsX(*kl0c29&*D;&X41ZQw3Upe2lyNe#z6? z%CHS~#>S+e*m}ZUV7A_>cb@L`?g5MVX+qJQAxCbUa)H86@q|4 z;Du(iV|_RFHgn|Uj?UNClFH;9eT7Ku_D&ksb7=v(`VbN@)wTyhN7bSz!7?iQ^eYS& zJFIH_@SUNDxxw<+9s%H@uK_3qgg8MZ6r;o1t$Ax*I>bO4XjdIa1lp0tqPXt-Ud;b3 zLUcTlYKSFrtB4T>?NcCpLI7NmdZ9F#rLX7!l|(p?k?4GsHMLw$||L$7O`ZszfGPheS^ zI>s+E#5vGsa;+2n1L#FYg~hOUvxR4ZxTu#g|$%#ze@7TC?7G($Rwpmuai+JpJ#xNZ&abU>9J; z;7V)2stOz`(wJTmj)#W98+tdbG~qxmI3>Oe%I-mlY=GX?p!U50Z?%k_NdSdeCYeJx z1^aSmBGDJZU(9Zv`|w>yUbComPOZ0CgQ@%lU4pZhAKAWE;L9hv~$&#!tQUY@XFlWtEd0q`YtuRTb;})FmMob>~9s?yc)+Dhkwyg+wC2ov#>{YSXO2o z(n7QWzn~*n#Wn1ShYozlTy)39n8!&B!29IO_g8CCLO!t53q?OO<4a#>6r3tXn@&tp zfoo?)w)~<7saD`m^dsit!@`2uzozpKpN+BaU5rCEc*_K_!IMkOjsQH8g5g`5h&+yiBx zUOPQkQ{_EuOKw_)$!UnjDfaoLMlM23C=kR*1Vmo^vjJtkD{te0?GFU)4QTKVT8KkPOf1^VO6b!KoWLr z)X|BzWN425_4J`@Pws>;Jt+=EJbQ;TXQIzF!gutEMcaRfX1q${vdkvOAvV611ov=2 za7$z9V!)BJhsO3i)rbmLK}U?DplQf2-7P)j8;!G_UvX|u{Wq+hy63re9{hT6e_7jv z!q##-+`(|`VGqGS&q2=}m&7X)W*xI@Qs9f{p0iMzhV^h!tR%(#K1WJ*N=2<4yO@z~ z0hl$&BDX*a6{{JPX-~)BmnYY^I1cQqcwjIa$W*-*=EwNB*%u5$X6J~FzvD7lpg!N7 z!kMDElKeCNhs0q2M}k&hUdtbeIa(Cw@x(*v$w@QQ{^-}CU2j*Ks#oKn#wQ`ExrPzE zi(iUhh#%1|gv00&xCV~vk@4w))yB@%ypXL@@+U+%hyEyP(f{A;BUZv`5R<_7Fv`Wz zgFYfJ1ye{A5BZEHr2egwQ{~>M%;mWeHn_3QHE^vGp&QxK9pPB{rb*qbhvAz3`W}KXa;!ug*^pOc9NbL-apYF}++lJM@fq<(xTw5j5E- zZU>gS&phk;H1<$y`&82P3ogCy;^-$mv5$+JNrGU41+xBP2yJ9Oq}3HMnaRQajZ|Gz)}4r8=a3iSwXuq^=T*&Gbmyan!k z*nJp5KsZw82F}pXdQXjk|KjuzeT}}>+laGEl-P`N>`-sePH?<55{9rn>J~z&a~m%+ zH=zvpxRr&j;ViXqe(L9;DQ#79Zf{86WEm&{X|1j@C{gT&AYP$KOla*D8u06p&sV5h zD3=dU2`1XTOg2JkCv;P#0m5EN!PDSO&|yv(+!kzv%8ke^yKY~@1+-*@J!sKA={vL{ z6+yJzq}|`uY?ezzzvwH!ELy2V$hj)kUaK?k)@ra7ZtX6e)-<3y7 z>@#B04e*{KJ)ltL1M3>XYSA-TC%R6iW$oi_O1;K`6*G9%NuX|Wk{x~K&RCF-!je~6 zoR^V>fp=Fs@@W&!_&H{eER5}F`-ozVS{wj zvPPaTg%$dk;Ood|R;@r2jxyIl7K{1HrMwCq#KD3LpvnOFx?vYo!N#z71`B1)^s zzJ8m|gb8Q6Sr=C9hFvfZu(1mpN+_=VnhX@@+;4|$^IoTx^fO+sE=dB3VmJsMNH1`I zdLq$yR7h7?@IeHbxeId!7RMW3k+c=EZILja*{7gfvhM;{W&>+}VzmnLRb`KeXc|Fo z8mqn(6!hRW+#6v48m}d9220v#q73Gfu#qFZ`YMdE^?%F2<81T0^|JUb-1!IS_J}He zodRc8w|v#t!olb1+`Pk~)hK*(HvZB1Gv_u1S4|n0_e_AQr+d%7mGQ#ESwey`jwH4t z5SoRl|DAB%jrP^hoTmyd?#brEOJ;7H&+8+e3ROI}jyD=Q)smm&K^bXcuqz)}cISsp zN9UrLfm~PsXCp4-4t=Xzzt@P1@ift<($av$;Ni67Ul_DCU)h?cIs?i2*&`MX7_PlC z7*-U*XedBYqJ?U6ZVe^OsM;JW`se4wJFxj%SwzS3BR?JbAy-ezgz}V!Jf`-&gGFph zN`DW^1bTm_uuiUMS6}(`=YQZB%Gd9A+P5uK(t&;-vZ&zNS$I}=9%XCsTeplFn5|h5 zhS|H?QFi)e;nw;-LsKm)w9HDQ{$4ojLJCTjMxry^QGVov$1-YaqB`(nIy7Kn92s81 zQfO@sJAW1vTK8~3`3VgU2C^oVC18Q4nNV&U;|PhU&BR!m=5Kj3P}(^NV#jTqdp;1onm-Y(%)mgV6_|u!1*P2DX%fR<^c<4-uic9Bs?UB%(pg zwuXY#dxYuVLs$zA&JVhwH~B@Em(VBq)_9|R$|hS6jt>I@%>Ul1vliAC_e4uQCx_AJ%rxC>TfKI1R>Ip z=-$5dos6P7uQob|GXT8SDTK(e>v(`m^2VfM%^^P{!ix2<>L zcr2`Z{kMknGbe41vHJLK^q0BT)0s>_@NW-_P0YWaZr4Sh{W70PQ7mhVh(C<;)JSHe zmw=H$KY4$AcHC?aNuIs)X;^zFQmrU8MEY`QIbWzyCLy&O;wL5khN7&}Fzy{(L$6p& zDq+>@#>i-HJ)0(#Fep3!BEh9Y1gm>qhQBHyP8MUtN^$6~4hh`pc zM}rpSehT!(oPEHmqtYoMrD$NSpA-(>`>NYrb@oN*8(Y*~pX_F)=Ur#A!AidDVTVWA z4c-qMV;#L+aH*~{;=Z$cmR3MCP9#hlMpK}WX|LmbyZVN()+klI+EdAfor~Uhas*4V z2(!q(=vCs44bGR8jbPS^qRNtzIHPB32GJbX?hP9w`gV06nC@~?;aN`${NrF;;Y>^2 ziDeXCMIDOs?L?`#Ha_wC`p=v}PnF8YpIpGLv$D-g;E(zGWD`@LcXOW&?Xj1=XJ#d`&3XLyAtooBq3$p{Y<-i{OZv_z$amqQBMm z@`@o?cIeZ^d`>^KAuM|ml1ReSB6mJNDc13+&wB~x*%X#e|9r%>`4}&_&4i~2pbEv> z&sjl0=BegcdMc`*1fPqGz)Kii4F{RHj_J9#i|;+L%but}t@<4`AxEb3Xo4Ia@ROz} z1^mh3C}1EiSgqU~5p(+m!Uu*Huu1xBz5P$G|C>S-CrHc~5sh>_4-ILzX@>}DtdIp+ zDo2`az=%h;q=MEQCsZqr)}!<|$PT}!X-f&LDtK^eGTG;X1XN~#=NFMAZ8tU1D*dO{ z+9+q2vf2@g@i1ddV_}p|SXkpVyL3TEPNc?4x9Th(_iCav7KX5uhj3pUEl%`Yk=C0` zxC}X(XL1(m9`Au;BjkN5y<0CX4+td$%&3}LgFFxV;I>-x~o#Xdct#E)ry))qx*N6Jpm#C35y^@14TU$M^I4bmul1FzS_18_-zMz5MuD)5)AW zu?}F~!E=OX+lk?YB~z$b6;`aL@*-~bCgt-=G$g()4uSXZ6f(?JNX~{)CjlGnm-0FE zdsUD#{ld%Jpc0!!fLX|HXw@xK2fz~WC?WM^ZxlY`TPdL=wbrYtY(3o1ON5_{drmj1 zJ{Dj;*%_q8=;h9Rkt^2-IfCdIr_Y*NK41%So%*jY-}`>{@6x6^kqTijeZOmdUBux4 zUq`%RkW<1Qt!p6*7b@0RDFCh#-2<0_=uM8ILt_c#CH2G(gPQA(K0GVZHO^#~L-;Xk zL*31TE5xuimqcK}BwO#@uHBksp!AMz3<^sG9fm_J2m;3q41%-D{+Y>v-lI0@VfAeN zW!S`=j~h~S4&FMM_=C*IRBH<`Mi}KwaVU>zm}_p2&yfjy76y97y;e8!vU$bPmB-4Z z#-mCpUx;(2r|LO6Xa%n;FMQdfJp0BfyM39JDR%DtMWmI#r*UpG$A1hrtg9}NqGVR? z^ED|7kWh1zB=D+e5Zo>2F+X?1bexgi7BU9? zsM0VzugAL@T+{#oq2Wt{i515NQNb6|XE^Ry|G2@9Su<%=kg0tV!5oMTra|7HZYWeq z0!C#wCyx&uJJvErBlMf4ciHexW%0&0rp=Fv1Vd2ErF(4Y5{juqn4m2wq(tghVLQ<` zRKoonJ$y3;a=TbnmM4#&aJ0UPzu9Q$2K5rR`9~ceM?V)P^O7bZ8j}bd+#fPkeZgPsHiX{JKd`2#EI4 zZgM|GKCZs>nZ!vd>A}rLH?=v1oFPGECSV8?4qbYCB( z?oozB{AS!N{eOWZ&O?svn7O}=3EPCDzW9T`xj!r(2G=n^5@oL1+{qtthgq*eA0~o@ z_YdpP&`RBWWsrWYfz>e-k`kaJD!0u>qGS;V|9Ztq~f}9q+jBBY-t*3dCUk{ zYOVH_W2y|Wt5u(%M_w(nWpNzaFM}F$I1nudu`8`R69MsI<2c5l5J8qR*evm_D{=fQ zdKi0(K&k|-K{lB3?kKk6BUK!?T@)=oS{LNB55ZHb$G&WU2RVJ5OFPbklHKDVNu2=f z1vxFFf;CzL3e3#V>l(z;vlIX)X}NZ;2Usvez@EXMt+f!?v74>9{9@kN@i0kCnMN!N z3f;F|IB%=m0GaOzykRw^h3P+0)9mCmLxW5kE9$7M5cn4>P`z?oqKCr8 zugK~g!_F)%`iQ{yOW!xpcg6X1Js*V?V9mf}+(V)*J%l`dO2URPS8jg!jbk#)FOqu+ zrBIHrMy%d0cp_P=f6a@ES%g9&EICG&RvW-3(+ev2;@D%Pxm4S(8)9i zo4WplM%rBV`_6yN7KIwzk6eF|ld+oT0nBRHzHfQaQh&t1^0<+DJKT_s3|)??2D3HZ zg!8JJqZn7PUw&W)c8WjEbCy7C3&UR{E+asn1E12h9RK$0|mm>v}k>TiWrdN4z&wLIGJ)0!j7?qe5WwZTd6|8 z6jAWaLL9S8QcD}ImR|#u$@hRo?bqp|UH=^Riy2*$iej=zs-DDI_5Qb zG>)NBL9)an&pNpUZbw;TRiB!*F^*ZgRPR<}Z>-Rp{3s^x{UpsS;EoClbN#R=j0iEc zkR7|$=6;%}%d$~MCN*WaCxbvg1VcFAeZu0uzLh#LC=w3k4ZBC%yWnaIwB}oc!2dL# zbN^(A1ra61@oeKFzq(oD_bASuG@MgmQr?AkyqPr>Qx1ZCE8L~(#R7XNHW-!{wHj#$ zWZXQ>de)6uEpef1C48t)FdM1>1gvLF^;@;qF2N-k6z!_qRyq^=mM3F)=$&3kPK-$Is4ht?%)?OvdYiEEpoY>GF0Ne`p0Cf z95yQhcwkamT8Qx`aoUn_Xl?)LH3u10_y}Uo4)*yRxF6QLIl<_}y#Z-Vtm7 zUExeA>GwI!f3XB~!SX3NiAjyoJ!Aog=`NG#{D6DDax|X-L9&Cvi? z>E@b3hT;7!o-%ENiT^Y!rn&!vr>N^3mk#YBt$qXB2$1Q6ST8@Li}D9}%i034pSvwn zX6Yv-m@{J9zILpf`pKT)mQKe4LZP`ih6vWa{R2d4*HWs?RzuEm*im~7m&CS$*uG5H zGw~WPr=3o{Kvt?bT~vvMz;uEN)%O9U+LzPvvaicu2ro>hb@j3Qwbe;2Uy}2UEQU$H z7N_-5h5;ksmhF_<9~NVZquUf_s&lXa8``&u>{Xn(7BM3fiVRUeg{PW3{=eR$>%Of|*Jp$MbVMo_-&2MZiL28UK z0ny^!b1k_$8f^JVc%Ww~=Tru}k6^D_X^XKpP;d!$E^h|#P<}lYDHrGvf!w9gkkY2~ zc~jNU36p&_eheU|YY9t-jnD@ilD6hUfuxq#1v$Xw=oz=J67=AR%Q+y>z}QO65qxG< z6!GTwp3$^VA4Cra&6Emq{T$eFktAKQY3ej ze;nyt_g38wrS15aXDTZ4$()=%{O3tk@go-Kt-rXI16Qy~RV;bfy$=xy25fP#oPLkP zzQS~@$?Rvm#tUbj&C9EM1#ix61k;2dUiM#un}%2v{og01^KCaqCMd>+;i{2Wc$xqw zWWENms`Q@&@jTJbRsL|1=BFz>;Y3%}6-I7(^H^K!IT)81YXL>rMdrv(*H>cr%HQ zDmpAJ=FiyYQnFF~b=1HR35_H-_YyQ->tcp3+3OJb3cYh`JU_b!cQ7{%zrT`nu(R{9 z(j$_UHTCKqapX1{ppSDEY`_{yT2Vf*wR}Z|CTP^%SSSSPaNxo;|9ASsU^*#e3Vy(u zjx)QLaz|#U5_;ZRffC_sOko|_!L4TDEDBjYR-pTwhv{qnwIQrGpXQ_&$4?yh)if;~ zQIy!?=Cu9X?@Bdr6sY>_gLvuNr(x2TJY?t04rXp3Sh2J7BJNy{4ZhWikkk7vd6i(F)V>Oa9Z(X1iEkADnD#@7zi4Q(n=ZOn|_Uuupk`UbQh+ zYl4iP+GJdyUe8$B9pjS%YStZ$n=^!PLttu*U6@uMS4FUjD_Mi1eS&`U;tIV9U0pSK z{f`PFfQtX0+RPjvITcRKwNljWe2`kCj^_CcrURIA9BpOmiqDa^ju9e{^6dUf=?AK6 zL8!(En6L~fa0%BM(O5q=2V5V}xINm2g9Nnn+2kQwRJVnJa_lw>8t1}kPf01Qr!$(4 ze52s4ftXbn8bNL3JLP|g@aU=JO$w*OW?t7EyGb|nXRmobE#rD*+6Y;1KaU)QEF^{@ zVWMOg;yb_SojC9O-s?xXkC(+bmLu9N->#a?9z2|HPMTg&ufHbcx|lQh?SX67 z7+ae~0nbh4VK%SBQWNOr^8BPWDTGL(Vk$+Yl*pak2eQ79T?&xh?*rgQd2Z@6k;XU12Ywf#nu!KOvIdIU29W(IcAKq1!vfGXdv$A2>^AK5!4i*42M z0#~6)rb12h-B2qbM|JTiAeSEjE3tBVlkkHdRAT4#DeF-AE%mzArGx}~KL0Sk@&7@h zcmnNe7@b>m9K(>2)mm*3(RJY2Yhl{XvjjU%kljn)dDh2K}`})thxWjirLJ`d|7dv!1H;}*8a~CBbg*eYv<0(0ogON~Y z*#!v606HQnqp|b~{#Vf}Vu@A@W$@gDiJLJJ4)rX->~G|L2e2r={7f}8d@!u8ua;}4 zzIjsaAgde)-cBHcv*~)~HytM-Oc{Y>dUH-YRH)V73@Gg6S{V-t%oY(QdDcj?T2_5K zU`ODx&{%t{;m`W56)wajDKWLkk9L!|#_D}cUoT9aW_Ys+`{oA2|2;wBentoyH~7(? zVcfG-@^hfZ+7->`SjxYiEZN-iEk`~%pe@~&0`2zzy+me)NIa%4k_38{r84^{(XMBz zlnS5OZs@4ts#8Vo7`riJ8X50}_8ilwLV_4q9b@7BJ_+z1ZIAc4iKVtJkH=N*JFk}J zECGVD|J>z0cQTuHtRY`yNO`QeWmR)>C&V7mbj@+b0)J-Hx}^o&mGPI=BXaXIt=$bF zhxq=*f~~Cr=z!$oA_PXvN@VneGYW9&OE$s9VMkQSn1$)};9|ha0O{NIS;l}6jwEm{ zo#Z&(YzECw-2b)l7^Y`2o#7>tgluax={>pZQIm8;4=-8OUbD!p-C>NNlfo9Pim)cQ z)_Rfv5}G)@*R8ldXMRt2#l`h9$(nMJ0oy9kq<=o=GjEYbWY1V^`~@`x`TJ*Z?Q#V} z`8s*-FqU<#+U>r`deULw)0em631*afm-1KSL%#At0Zl$}$a^mZLbOEMFq_0cFUOv& zoVb8QC>V2j%ZleUwitle`P$C;An7lv=6xuPGM*`%!yYn9%CV zZ|)d#+8|AVr~mCLMzI*Hl*DgDFh2*~k#_Q4gZ87HU$9vc zvOgDCVqjW%uM_w3QZGvD0s7QCEXykC)l9iARJxPIW07hNRZa{T^F}5doX)y%Y>k&2 zjT~lxwvhN!8dAcj&q5G}Un(PWaQUZ=5V$bi!a11ev@SN$HR(QSDQazYW!$vVJX-+QR;uR#q2N>x%%0^bnIVPooo6%M@GeB-g4~ z$#SmR^ldA1Na+U^&nI)IUh>4b?%vfFh5C)+=CP+}rgyX*PwKe)%t;=&Qep3It;Nk2 zX*ba=$?V@$o|ecuPREf#;u@;N*b>@P@U#e{NVLz5p_JTGMmsF}8)L8~WH?f1wkVm= zcn;dE*QFogtheaRPNPaz>>zuEgGVtNM6!4k)l;{>KKl2Ch2-^9i}hBFOfJACyiAuG zM}O9ay&E=J{zO8y;#zCG+U=zmhL6F|JPl2IhR&G9$BlxDZOc`OtU^=M1C4shIb!40 z=++jCEkSJ}rok#?y4TUZRXFiTowLS|3HukjfYC4P?Br^E7FHUsd5aF}o|QT(O~i@E3VlsK~5PuvjbET29C@>D3zsy0KW9( zIbT!^663UZQfz^At8MHNM2Xh}ZWwF+f5*Ge-?9LiQy8Rdkxm~Ge-j?nbp_hUm+hqR z(E!CvKcZ>ddd;(rkEVw#-Ln}D`WeO@8YSy~jijwaFg!{P`rN3LHAdeG*RqwRchxHNMl`AET!wI=eI=B%WvVmBpt zVc#q2P+?p=F3WB7V_nuxHeN<+b<%{4O#+t2iIe3#KUt}Ry8jwLZxD26SR}zi=$VwS z_w&qBF>W~L*Wnr2=oL@^{?mUJ%)6o+lClbqtIz^n5c!IIl%sh)XJm4@DCQ*T5}MYc z+mj{4ZM&VN1`bM_YSFmUtT^e3pp&*u(D2#p4a|^Cfe04sui3Rv$VYSNATbu+n$q-B z4I3wRlt(l-a}krXfI^5^W{p0=F&MSDM6)$Y+zt~gw`PJBf!d#wL} z3CG7hrfm91i|7+Q-@ zi_WMBE6jaGbz(~ycSIt?)By5+!VQy!?2nkirhAnrD@oZdbJ9As?Ud+IjtL>-=qzRlZ7dkTjc5>pG|~o8kDB4d6=u|xDxdW zVGLli28Q;Oh9N6mwzGn$N;Z#}r|jLjk}7Q4_&i?TZYQ2}{}DF=%KiO&OVaBgd^uQx z2g;YSTvAdL&7tX`*h&-e_fKv@iz?y)=+vz%fQ1sdWy>(-4%pN8TUN;}pjffqD4S>i zwuZ!<=d;5}F-_5|1HIv`F8m%d5<$)sBWa5HaxSOOf0Udcrg*?&ESJJsC)P2LD5@$- zI*ux^;M_8aAoUMOpT|G6Ak*7y9^)z$b0X(EB{Te5p~7oLm14pPwM2YCKS23G{e31b zkIb4h7dS}FPUZ%E@Da1wzqw8EqfsXNH*VonM7|>5sX4FCmQ)>EUkfV}1+usVf+zZZ zss0xcur=`!AqB(cH`q)w6VzkCe0J4IU(xh62p>+CzLuihgpMz4it54(;C6F>$a(1( zb8JG16ED0oOw72<4XxjjcNzBn$@by<-3A-+EGvW|_AhgzjwpeEtXu?l(xai&4bcXN zmb`P9r~MeIO0o@GpM!>4e2js?OF(CAwt9!twZUK+tlLSH$ZbBw< z*l4F(wW>?Vup>z-K!pE&zhWcTsPQ7m=Izh)JVHCaU%PTIs986@l@#s-;H~Eoaek-;I2Jzke z?f&Ja$SOngZR%egE3_lSJ$duu;9ib9p9#F7nxwppznynk=Vy4F|bcI-SH*#{PMuJZMKBdY0+)I%;M&S|0T2Vi7co0 zHTmxPHGJ1E?JT}IapBUMFyPgy)ii;tFV6n!v8KuX<2a6e{_|{-S?Yf1nyPC$U#@HU zt@~|QOnOGuMjNGSvVFakamsJvkJ(vq{KSDTJx&FNIbsDA;}9swir`HE5Quu9Bm-{% zD1e;c09Zlj1V;%N8ddTja19XY(m}9d0+2`#1E?xoPzxOF1Y!{OlF|Ku88T`xc1e^3 z!iB`BG$%2za9NCI$QjcS3ptDdVt^mUEWt(&bH2h!2tS0eGU0(qmjt+C%jtf7^fG^b z?3(uP{=0%vhc0oPNJuKCPRGk9eoI9Idz=}!9@zteg{6x$s&dYace+FiEy)5s1U*9= zIS(_sw~f>I>I;$HXCH5s*k>2Vz5GTC`R=nbLNDhdgR`32NN7EA%?YgU!9@B>ePrBG z%Y08g+BpV2Y8{W1cO_ZPcl1}kz*eRwW%Snh!0-^lAq*&Ak*2Vas7zN`NIT05?v|>A zn-83?cLQ4AxgO-TM*LY~`Y2U>ke(0H=YsRQB>5;^K1g31q|XKKkAd;a6n&sZX79h4 zE~1D0XLD1yy+lFpd;bPWORa^hf#7Ow|9!KPn;^=s6>@wwx-E_P3+{LuJn}yb0Mq|^ z09gNj9DwrV-%>s}SMI}uzV+cnM?WqzIAeVVF-m_M|GMtC$Vl$dZP`zB_cvi)%4-l*gVr?I^fCe`DcS{S?`OY(WP5{sV zSphM?00WOvh1z1qFs2Dla0L&%hE1~lQG+^9f=$Rx7 zi2;dTVnAVH=)DlbmNTXz7;_W=&kQ+&U5tht<#T|Z7;^<;W5W)aAO&{Ao!a>I?riw= z-9PQu^>Yrb0$AZNl$>2omyeuA`j&2`_|RhkHT26loz zb`)=WXA!0M(j70p&N|WmJysI??Eg=D*B#a5w&f`T(nX4NB2|=uC(BWH%FPTj7OqyOBp)-uZ!%8+PyAAk z^zZAQvmAPdHh}hZuUB-2#y%Hlqa#A8)rSOyCHkt8IN5K)s*4g=x7m-*o(j13)^ko) zFg1$`2b&p_H0}u<0bP}F!A1?r;knbAS<4@y~g_0H73`P!%^z?-S1ArX6>ai*-8rK zg(Bf=Y%)C^rlc>cFxX~^l!Jby9=?=@npRwYz{{3!yOTk~%906MuS=yjcgLP+=4FLa zbYu-j8XU}0)Q(}iqY*JM-y2U1#taVp$CD~&K5k57>j!7OAT>)Zq7>-d|ll3mrOFC)87ph5?4UnF26fDp2f1+sD<1`=sk8&S|^ z)5NK~qEyfzC0H4}CMV7?ej5liB(PD5Euh568&P>hiGWq#@euOtM_r+c7V)JE8+zRn z0Zi2)Shj!$BduCoHPeW9@lc443ZDa$%T0xORKcHYIl`ZKAG?g2rOiEk4xwSubw@4@ zE_k#x47LE$k5SP-9>2?I=F@rL`2nXRGL;#pUje9VnhZLc)LyUerBk1I<+^gZT+M{P zx^T6P z=azSWUjVIF-X4Bh68GAfS0$5|{p4_Mho{=nk02V;*(Y{jzWJ=qQJ~QAz~(yK{ov`z z@+70p%ZtfR%~Pf$4A_K%aI=oYTz1=2frCNu_7SRe_>^@@Ei0#xkKT<=4}0a2Ltdxp zqH(=a+Rp)E0sQR+^#0|thMgIO0_>AjPoc)&yobJy{LqN5;cL_wHPkq7YvaLAGL3k? zkq|)r3|>(pONr^GF);PI0dl0Ze;!v{961MepK0&nBxQ1uJ!wvr*v}wOR+m73N;vOF zLqlns_iFBF7!Gf(Unsvx8%v)!uzMG@WB$o92lgXuo)iTr{98AR>iO}o=oPy>5Go^ zch+C`$hwYU%kg(+Kq$$_)}p-6zG79;-^e;J<%9umXO>leEAbiJbx244#AVyUwWM}^ z2Fv;qH2u@}Cb6ob{^=j_72{adJbV+*XV3v7kajAaGl>;sgliS-`KZ~B-t}noKUD9W z2=U%KS!Kk2sG!aCbDUBP7x+-vyD#IM!c;WbDYLjRL#o{8vrW5$%h&z`u!#Rzu!zC_ z8?c1^eYfxrVEMIMIQKofnmfTMw}9QjMajJW%q6-O|6%++M|*5){kWdrrrKS6s)LvT zyc;?h8|-vqHuA8N)kaHeJ;$Nv)5aLOvfEH&N*20XD0qnNrYYW1?PwU)cxTS#b!l@M z)vcJPJmFElwPw>Mk1jf`&+-@RF?lhS{Mu}L!Yi-VDgD=G;d4uQLHPjzah{z&U2{ip zvFVilloI)bf*~(&(Q0{P)S0)BtHAU2wOBnD+9I1#WgLvHv9?QZ28}|~4jk1KIT}jh z!Se8RiV-HZvp)1{M^<}~ffx1!Hq$6U*3&Ul{TVzBk4aXQWy&sayyGY3tTy5F)|;&t zW>)H>Bg8$Sf7vT&TsB3mzm)GESz;vco1KVNI3kkB`v)VCh3)nO)0-mfn)$P?5UtQw zwbP*10TT;d#4oVe?e$lziD-_#lhYtmTAI=D9>BX%lieW6FY}sSu4*?~wUD9|P~@ro zH0)5m^-~kC1BVPfiWR??FCgt?3qn!0%vg(5i@Lfw+SGXuYUw$d2xi-xv(0JQM9FQT z@HrV*F~S2*>t)z<@Yf83esMeYa&7(5COzXd*fd+8O!%fbxoC?YJ^2~st^o?}(=BbQ z%1-_Oe%7Gd@1)q6h>V7na#PKK_P@`zeHSAY$Q1+kCzx;tim65<1SSY|i9&cujurY6 z>A6_-H9fZ(cRcoVvWI4Jmb2-x1xjC{lW$5&(bNni#IdD?O#Xx{Di_7Ey;pRGAe0ni z8&HR5(u=Ay%ft&Qj!l?349>c3RGQ^jT#KK^2b>TmkPssM2C~?dA15G2?E|ie6Ub6b zk0SR0Kl+l;rI`K|yx7HXQ;UVxr~BR)J$}XX@~-`FXQDHggF6y)jP-EerJA)#zn>W6 z%l^3+MQncP=-3UqqO(rfg;rTSR+RQ=vla86{Q*`a{w!Ah7Zb~C=l`pTB}MB1y9(9c z4+%bbNPS=Z*d}@G`e$KK)oj(uNnyd?Hr5j@wIV~ySBTNT`UvwOoso>fp3TgVjf^|j zUM3lUOq4f2L&p-D<~Q!kz8=bjLz>;Ya!b6*xoTFD4yl$(CUxjsj*N9QbpO0%UHw&O}k@gZo5?|&pFiy{9Ef0Z_6 z{4-IZHr<*#W~Ujtzd+LQhAWS`#N~)b;1VB<97@aG_UJ0ARNxJP`n&?hm9sjX@GdRb zlN~E>(|`LXD+A3VUVXzR592lHH?}@@JXWYhTYTv0@K{N@3-?juu+{j5mC1j@3X7`( zbA#e)K@)j_?Nv<`+w2U1+Is}H*Xaa^1dJ2R>>}KEL(@S5a0oBUaI;nfCPPa>YRdGs zrj%Q{+R@~#6^|?h44XKvMkgLWx1gQ%=RL9#`=T?8Z~fG{u@!?kmM)m^H}_AVJ{mgn zNdI{BRzSFMSv4H4<-3f_=D`SXoJy~>VO9Ik>3c0$Rs138dvrQ-6_+iB5vV`#8La8k z>qe*R&fyZ(FnLI?da=VE??z;u21=SYW{axC+y7nUK0xw`N!xPO#D}F3YPcLPeZyO$^&3*4WhzZMgVVa?S){5i!m0DB5^)3NDzA@-=|3)Epd8`nM+W(#y4_cbI~&HffURY( z%}^1?Nn<_0gQ3tU6zL}g`vKaim0hLADUlb?dtpOVLENwP!AVDD`6rS1K%|s|w4L5ZVS50O$ufHM)<4>GCxclS_;L-Kata#-2awj@^ z?9*t_QkVg^7BKueEHbt&GscqfK`^Qr)^DnQK*TT-Y4v^Jt=0PQ*9>0bVMoSpGuH>l z=~mq?KBCnt;+>Rj{tqc8srHjd{itydHZ?$ZH26WqNmLPCZ3ckf9|qc~F^X#?cV`%~Z1_YV-aDL5J*o^?E~V@DZxf~p^F zu4&IaS$&tg)L?DdgMJ)2nrNm2cQCMI^4?*DLI=CqUgPO0D1hA|r@1-FUtpH6vmvu* z>*>hzU1C2f+r^03Pl-eBQ66p%F)LEeP*Ti^WFJb^^C+xvJ)orGvcBu$5OL60Qhr(A zdvPdoIx{+UDQ|O0mUPaAJO}`eU1of}puKr23mLnN?y7(+IVsmJA&YkUIA{kp#(sVq zN_@iL`~GK66B{UM=inX30oi({tS@=VmPo@h$H+@UZS=~6KL9iIPl8zj_8(S>`pwQ+ zc%L$kaau9wAg&`!?g66`_qA;H%J*;WK8-S@is%wY@ZwjA-%>#KRmOty3)nY4E}R{b zvguU`#hXv2cxy*j+tX@$v};r^JZ8uwC6x?KV?M~pN*R9kos^Nu$7U2&ZWcS^G|KE# za2$LtP<$XM%I&4IQ9JPKymD8mfp~oqG^>k zSH0fNlIZ+`+VQj#^iml5bU7$=ME%pP9>nbU$wc~#oW*_MGJj$b7WMkgqwA&0CSaiG zRbaAZ!XOV-0t?~I@oQdl-os=mXbvLv*Nul?5zir1Z|m zXcvi(JdLuqc@uT6pWviUOcd*qF&j-{iAY7pYs&VmCCa?Z7eOxRNWjngdD#&n=mYvQiz+ z9hQDHdi%6K#*!8wS>5S%!WaD;VhYP~5nE;}I*vAbbS5U<=Dl@^fp@=m&)IvM?-N-gdPn4s&wYK_-@D+#z%0OjYK_Np?CV zRzkQ<(lzHRBQ|wGR?rm@demX7FTIB;l0_f6y49GJ1h0arkb2wHZB+yfm${y!>V;dr z`a2kxs-26r)dH#uqEM{6-ydM$A9Dul`?w+iqFRjaW8Gs<5qdMkz1K@A3E0+H!Gv&ceQS zu}U=4raZt>t`%RV;XstXg)zwz#2AwcBrEExJ}( zHyeCZ`jzxilF>7|I~8?u@4JGJ5N1n+1tc%pNmynHE50Nyjb7(`s}Aq6?ETD84y^=a zWYWDp+do@mPS=QTwwg^~(^gV%shwYN zQe7ct3A>^QreX6A?|o@e<6(};vAdRY2snS%UfFo z^OPk{2xqRoE67D?FhZlg-f?9hzE2WkIh)_4L&eSrjVx=7H@v;Vuj^qL}a8ENQ!7(h!b%+x_cqB~XxU^Wgi$wEtd^fL>SkAKG+) z@-{d%Zc5xSdkp2PEF`0GbhVpp>b7|DWL2kjeIZ0Y{Uj~JR{NYgaxB!hQgOyR>!tLC zuqWk?G+BY+&+tjTt z=OAGj!UF2Lk>D}avNW;XdcJF^$t_xC>@7)rTUE`Gw5-#Df}#y00?PY+gta5DTGBE=pWWWifH@xK4=S3qn}Es^wHUsq4{{c1kTCohg2$CaL* zOyJegvdDDnb~28vm~5*-P)gZ_ng5xs=#fq6om!LOcu#3HLHQwa3t^MDpYTsrN@kKU z(#Ke;lsw9=x;>Z`O;K_`3uFu`jh6td#NQkD&UR8BC(s}A{aEz)VuuocCP^HFP zR@q|99;K9;VjY3Mx80Bl8R#LjpNOyI_}e9|VS#evU})98@%m**yGdG-zk!#SH3sWZ z--4ZzpH!JJ<_{n+%&G?bXX=vt$E*qRo=7_vcfc({fT*H7!UAdU;(QO!RDfIeq`*M1 z7zhZG0Kq^oAjJ50iC@wWEc6jZ0B?Jw9l#FHeeUiE8+@}m!pGai-P+@Cy=k~u|JNO9 z>njrW*_#6-mLT4}qxSbJLi`jfwR z{(B$zCOuEfrwA+L-}KeDM>^tf8(*vMZsF>Ru*MU#g`)@JmzxXWZ0%zCltS_!&(iv6qr{sMo__MxMwzr zD`3xg^{$esMC%YmB-RBlR`LOKiROm{0lH8sN6|0Vq-Ba%-NuT{y$FqDeq8wmGdBzk zaP`V{AGc^Ebx~F{wEfo@IYF)BT@LZF$EYTLBYqTq@_&pFHwQtn*aa+ diff --git a/README.md b/README.md deleted file mode 100644 index 545b8c5a..00000000 --- a/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# GPTLens - -This is the repo for the code and datasets used in the paper [Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives](https://arxiv.org/pdf/2310.01152.pdf), accepted by the IEEE Trust, Privacy and Security (TPS) conference 2023. - -If you find this repository useful, please give us a star! Thank you: ) - -If you wish to run your own dataset, please switch to the "release" branch: -```sh -git checkout release -``` -This fork modifys the original authors work to include the use of reasoning model for the critic stage in order to improve the level of accurary and precision in its detections. In addition claude support was added. New benchmarks on the original datasets are found at the bottom of this readme. - -## Getting Start - -## Using Deepseek Reasoner - -This fork adds support for Deepseek Reasoner, a specialized model for reasoning tasks that can improve the accuracy of vulnerability detection. - -To use Deepseek Reasoner: - -1. Set your Deepseek API key in the environment: - ```sh - export DEEPSEEK_API_KEY="your-api-key-here" - ``` - -2. Run the auditor with Deepseek Reasoner: - ```sh - python src/run_auditor.py --backend=deepseek-r1 --temperature=0.7 --topk=3 --num_auditor=1 - ``` - Note: The temperature parameter is passed for compatibility but has no effect with Deepseek Reasoner. - -3. Run the critic with Deepseek Reasoner: - ```sh - python src/run_critic.py --backend=deepseek-r1 --temperature=0 --auditor_dir="auditor_deepseek-r1_0.7_top3_1" --num_critic=1 --shot=few - ``` - -### Step 0: Set up your GPT-4 API - -Get GPT-4 API from https://platform.openai.com/account/api-keys - -Replace OPENAI_API_KEY = "Enter your openai API key" in src/model.py (line 4) with your API key. - -Set up Python environment by importing environment.yml as a Conda env. - -### Step 1: Run Auditor - -Stay on GPTLens base folder - -```sh -python src/run_auditor.py --backend=gpt-4 --temperature=0.7 --topk=3 --num_auditor=1 -``` - -| Parameter | Description | -|-----------------|-----------------------------------------------------------------| -| `backend` | The version of GPT | -| `temperature` | The hyper-parameter that controls the randomness of generation. | -| `topk` | Identify k vulnerabilities per each auditor | -| `num_auditor` | The total number of independent auditors. | - - -### Step 2: Run Critic - -```sh -python src/run_critic.py --backend=gpt-4 --temperature=0 --auditor_dir="auditor_gpt-4_0.7_top3_1" --num_critic=1 --shot=few -``` -| Parameter | Description | -|---------------|-----------------------------------------------------------------| -| `backend` | The version of GPT | -| `temperature` | The hyper-parameter that controls the randomness of generation. | -| `auditor_dir` | The directory of logs outputted by the auditor. | -| `num_critic` | The total number of independent critics. | -| `shot` | Whether few shot or zero shot prompt. | - - - -### Step 3: Run Ranker - -```sh -python src/run_rank.py --auditor_dir="auditor_gpt-4_0.7_top3_1" --critic_dir="critic_gpt-4_0_1_few" --strategy="default" -``` -| Parameter | Description | -|---------------|-------------------------------------------------| -| `auditor_dir` | The directory of logs outputted by the auditor. | -| `critic_dir` | The directory of logs outputted by the critic. | -| `strategy` | The strategy for generating the final score. | - - -Some updates: - -**09/28**: We observed that the outputs of auditors can drift largely at different time periods. -For instance, GPT-4 could easily identify the vulnerability in the CVE-2018-19830.sol at Sep. 16 but had difficulty detecting it at Sep. 28. -```sh - { - "function_name": "UBSexToken", - "vulnerability": "Unexpected Behaviour", - "criticism": "The reasoning is correct. The function name does not match the contract name, which means it is not the constructor and can be called by anyone at any time. This can lead to the totalSupply and owner of the token being reset, which is a serious vulnerability.", - "correctness": 9, - "severity": 9, - "profitability": 9, - "reason": "The function name does not match the contract name. This indicates that this function is intended to be the constructor, but it is not. This means that anyone can call the function at any time and reset the totalSupply and owner of the token.", - "code": "function UBSexToken() {\n owner = msg.sender;\n totalSupply = 1.9 * 10 ** 26;\n balances[owner] = totalSupply;\n}", - "label": "Access Control", - "file_name": "2018-19830.sol", - "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity." - }, -``` -We uploaded a set of results that we obtained on Sep. 28 using GPT-4 with 1 auditor, 1 critic and 3 outputs per each contract (see src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_zero_0928). -The composite score less than 5 can be deemed as not being a vulnerability. - -**10/26**: We observed that the output of critic can also be different (-.-) at different time periods, even with the same input and the temperature set to 0 (deterministic generation). This might be caused by the update of GPT-4 (?). To make scoring consistent, we added few shot examples for critic prompt. -We uploaded a set of results of the critic with few-shot prompt that obtained on Oct. 26 using GPT-4 (see src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_few_1026). - -This repo will be continuously updated to make generation more consistent and robust. - ------ -## Citation - -``` -@misc{hu2023large, - title={Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives}, - author={Sihao Hu and Tiansheng Huang and Fatih İlhan and Selim Furkan Tekin and Ling Liu}, - year={2023}, - eprint={2310.01152}, - archivePrefix={arXiv}, - primaryClass={cs.CR} -} -``` - ------ -## Q&A - -If you have any questions, you can either open an issue or contact me (sihaohu@gatech.edu), and I will reply as soon as I see the issue or email. - diff --git a/data/CVE/2018-10706.sol b/data/CVE/2018-10706.sol deleted file mode 100644 index a3e3950c..00000000 --- a/data/CVE/2018-10706.sol +++ /dev/null @@ -1,404 +0,0 @@ -pragma solidity ^0.4.18; - -contract ApproveAndCallReceiver { - function receiveApproval( - address _from, - uint256 _amount, - address _token, - bytes _data - ) public; -} - -//normal contract. already compiled as bin -contract Controlled { - modifier onlyController { - require(msg.sender == controller); - _; - } - address public controller; - - function Controlled() public { - controller = msg.sender; - } - - function changeController(address _newController) onlyController public { - controller = _newController; - } -} - - -contract ERC20Token { - - /// total amount of tokens - uint256 public totalSupply; - //function totalSupply() public constant returns (uint256 balance); - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - mapping (address => uint256) public balanceOf; - - // function balanceOf(address _owner) public constant returns (uint256 balance); - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) public returns (bool success); - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - - /// @notice `msg.sender` approves `_spender` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of tokens to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) public returns (bool success); - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - mapping (address => mapping (address => uint256)) public allowance; - //function allowance(address _owner, address _spender) public constant returns (uint256 remaining); - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - -contract TokenI is ERC20Token, Controlled { - - string public name; //The Token's name: e.g. DigixDAO Tokens - uint8 public decimals; //Number of decimals of the smallest unit - string public symbol; //An identifier: e.g. REP - - - // ERC20 Methods - - /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on - /// its behalf, and then a function is triggered in the contract that is - /// being approved, `_spender`. This allows users to use their tokens to - /// interact with contracts in one function call instead of two - /// @param _spender The address of the contract able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the function call was successful - function approveAndCall( - address _spender, - uint256 _amount, - bytes _extraData - ) public returns (bool success); - - - // Generate and destroy tokens - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _owner The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _owner, uint _amount) public returns (bool); - - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _owner The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _owner, uint _amount) public returns (bool); - -} - -contract Token is TokenI { - - struct FreezeInfo { - address user; - uint256 amount; - } - //Key1: step(募资阶段); Key2: user sequence(用户序列) - mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; //所有锁仓,key 使用序号向上增加,方便程序查询。 - mapping (uint8 => uint8) public lastFreezeSeq; //最后的 freezeOf 键值。key: step; value: sequence - mapping (address => uint256) public airdropOf;//空投用户 - - address public owner; - bool public paused=false;//是否暂停私募 - uint256 public minFunding = 1 ether; //最低起投额度 - uint256 public airdropQty=0;//每个账户空投获得的量 - uint256 public airdropTotalQty=0;//总共发放的空投代币数量 - uint256 public tokensPerEther = 10000;//1eth兑换多少代币 - address private vaultAddress;//存储众筹ETH的地址 - uint256 public totalCollected = 0;//已经募到ETH的总数量 - - /* This generates a public event on the blockchain that will notify clients */ - //event Transfer(address indexed from, address indexed to, uint256 value); - - /* This notifies clients about the amount burnt */ - event Burn(address indexed from, uint256 value); - - /* This notifies clients about the amount frozen */ - event Freeze(address indexed from, uint256 value); - - /* This notifies clients about the amount unfrozen */ - event Unfreeze(address indexed from, uint256 value); - - event Payment(address sender, uint256 _ethAmount, uint256 _tokenAmount); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function Token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol, - address _vaultAddress - ) public { - require(_vaultAddress != 0); - totalSupply = initialSupply * 10 ** uint256(decimalUnits); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - owner = msg.sender; - vaultAddress=_vaultAddress; - } - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - modifier realUser(address user){ - if(user == 0x0){ - revert(); - } - _; - } - - modifier moreThanZero(uint256 _value){ - if (_value <= 0){ - revert(); - } - _; - } - - /// @dev Internal function to determine if an address is a contract - /// @param _addr The address being queried - /// @return True if `_addr` is a contract - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) { - return false; - } - assembly { - size := extcodesize(_addr) - } - return size>0; - } - - /* Send coins */ - function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[msg.sender] = balanceOf[msg.sender] - _value; // Subtract from the sender - balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient - emit Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - return true; - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) moreThanZero(_value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * @notice `msg.sender` approves `_spender` to send `_amount` tokens on - * its behalf, and then a function is triggered in the contract that is - * being approved, `_spender`. This allows users to use their tokens to - * interact with contracts in one function call instead of two - * @param _spender The address of the contract able to transfer the tokens - * @param _amount The amount of tokens to be approved for transfer - * @return True if the function call was successful - */ - function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { - require(approve(_spender, _amount)); - ApproveAndCallReceiver(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - - return true; - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the sender has enough - require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] = balanceOf[_from] - _value; // Subtract from the sender - balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient - allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; - emit Transfer(_from, _to, _value); - return true; - } - - function transferMulti(address[] _to, uint256[] _value) public returns (uint256 amount){ - require(_to.length == _value.length); - uint8 len = uint8(_to.length); - for(uint8 j; j= amount); - for(uint8 i; i= _value); - balanceOf[_user] = balanceOf[_user] - _value; - freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); - lastFreezeSeq[_step]++; - emit Freeze(_user, _value); - return true; - } - - - //为用户解锁账户资金 - function unFreeze(uint8 _step) onlyOwner public returns (bool unlockOver) { - //_end = length of freezeOf[_step] - uint8 _end = lastFreezeSeq[_step]; - require(_end > 0); - unlockOver=false; - uint8 _start=0; - for(; _end>_start; _end--){ - FreezeInfo storage fInfo = freezeOf[_step][_end-1]; - uint256 _amount = fInfo.amount; - balanceOf[fInfo.user] += _amount; - delete freezeOf[_step][_end-1]; - lastFreezeSeq[_step]--; - emit Unfreeze(fInfo.user, _amount); - } - } - - - //////////////// - // Generate and destroy tokens - //////////////// - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _user The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _user, uint _amount) onlyController public returns (bool) { - _amount=_amount*10**uint256(decimals); - return _generateTokens(_user,_amount); - } - - function _generateTokens(address _user, uint _amount) private returns (bool) { - require(balanceOf[owner] >= _amount); - balanceOf[_user] += _amount; - balanceOf[owner] -= _amount; - emit Transfer(0, _user, _amount); - return true; - } - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _user The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _user, uint256 _amount) onlyOwner public returns (bool) { - _amount=_amount*10**uint256(decimals); - return _destroyTokens(_user,_amount); - } - - function _destroyTokens(address _user, uint256 _amount) private returns (bool) { - require(balanceOf[_user] >= _amount); - balanceOf[owner] += _amount; - balanceOf[_user] -= _amount; - emit Transfer(_user, 0, _amount); - emit Burn(_user, _amount); - return true; - } - - - function changeOwner(address newOwner) onlyOwner public returns (bool) { - balanceOf[newOwner] += balanceOf[owner]; - balanceOf[owner] = 0; - owner = newOwner; - return true; - } - - - /** - * 修改token兑换比率,1eth兑换多少代币 - */ - function changeTokensPerEther(uint256 _newRate) onlyController public { - tokensPerEther = _newRate; - } - - /** - * 修改每个账户可获得的空投量 - */ - function changeAirdropQty(uint256 _airdropQty) onlyController public { - airdropQty = _airdropQty; - } - - /** - * 修改空投总量 - */ - function changeAirdropTotalQty(uint256 _airdropTotalQty) onlyController public { - uint256 _token =_airdropTotalQty*10**uint256(decimals); - require(balanceOf[owner] >= _token); - airdropTotalQty = _airdropTotalQty; - } - - //////////////// - // 修是否暂停私募 - //////////////// - function changePaused(bool _paused) onlyController public { - paused = _paused; - } - - //accept ether - function() payable public { - require(!paused); - address _user=msg.sender; - uint256 tokenValue; - if(msg.value==0){//空投 - require(airdropQty>0); - require(airdropTotalQty>=airdropQty); - require(airdropOf[_user]==0); - tokenValue=airdropQty*10**uint256(decimals); - airdropOf[_user]=tokenValue; - airdropTotalQty-=airdropQty; - require(_generateTokens(_user, tokenValue)); - emit Payment(_user, msg.value, tokenValue); - }else{ - require(msg.value >= minFunding);//最低起投 - require(msg.value % 1 ether==0);//只能投整数倍eth - totalCollected +=msg.value; - require(vaultAddress.send(msg.value));//Send the ether to the vault - tokenValue = (msg.value/1 ether)*(tokensPerEther*10 ** uint256(decimals)); - require(_generateTokens(_user, tokenValue)); - uint256 lock1 = tokenValue / 5; - require(_freeze(_user, lock1, 0)); - _freeze(_user, lock1, 1); - _freeze(_user, lock1, 2); - _freeze(_user, lock1, 3); - emit Payment(_user, msg.value, tokenValue); - } - } -} diff --git a/data/CVE/2018-10944.sol b/data/CVE/2018-10944.sol deleted file mode 100644 index 4abed958..00000000 --- a/data/CVE/2018-10944.sol +++ /dev/null @@ -1,1344 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-01 -*/ - -pragma solidity ^0.4.8; - - - -// -/* -Copyright (c) 2015-2016 Oraclize SRL -Copyright (c) 2016 Oraclize LTD - - - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - - - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - - - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - - -contract OraclizeI { - address public cbAddress; - function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); - function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); - function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); - function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); - function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); - function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); - function getPrice(string _datasource) returns (uint _dsprice); - function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); - function useCoupon(string _coupon); - function setProofType(byte _proofType); - function setConfig(bytes32 _config); - function setCustomGasPrice(uint _gasPrice); - function randomDS_getSessionPubKeyHash() returns(bytes32); -} -contract OraclizeAddrResolverI { - function getAddress() returns (address _addr); -} -contract usingOraclize { - uint constant day = 60*60*24; - uint constant week = 60*60*24*7; - uint constant month = 60*60*24*30; - byte constant proofType_NONE = 0x00; - byte constant proofType_TLSNotary = 0x10; - byte constant proofType_Android = 0x20; - byte constant proofType_Ledger = 0x30; - byte constant proofType_Native = 0xF0; - byte constant proofStorage_IPFS = 0x01; - uint8 constant networkID_auto = 0; - uint8 constant networkID_mainnet = 1; - uint8 constant networkID_testnet = 2; - uint8 constant networkID_morden = 2; - uint8 constant networkID_consensys = 161; - - OraclizeAddrResolverI OAR; - - OraclizeI oraclize; - modifier oraclizeAPI { - if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); - oraclize = OraclizeI(OAR.getAddress()); - _; - } - modifier coupon(string code){ - oraclize = OraclizeI(OAR.getAddress()); - oraclize.useCoupon(code); - _; - } - - function oraclize_setNetwork(uint8 networkID) internal returns(bool){ - if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet - OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); - oraclize_setNetworkName("eth_mainnet"); - return true; - } - if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet - OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); - oraclize_setNetworkName("eth_ropsten3"); - return true; - } - if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet - OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); - oraclize_setNetworkName("eth_kovan"); - return true; - } - if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet - OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); - oraclize_setNetworkName("eth_rinkeby"); - return true; - } - if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge - OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); - return true; - } - if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide - OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); - return true; - } - if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity - OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); - return true; - } - return false; - } - - function __callback(bytes32 myid, string result) { - __callback(myid, result, new bytes(0)); - } - function __callback(bytes32 myid, string result, bytes proof) { - } - - function oraclize_useCoupon(string code) oraclizeAPI internal { - oraclize.useCoupon(code); - } - - function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ - return oraclize.getPrice(datasource); - } - - function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ - return oraclize.getPrice(datasource, gaslimit); - } - - function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - return oraclize.query.value(price)(0, datasource, arg); - } - function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - return oraclize.query.value(price)(timestamp, datasource, arg); - } - function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); - } - function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); - } - function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - return oraclize.query2.value(price)(0, datasource, arg1, arg2); - } - function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); - } - function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); - } - function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); - } - function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - bytes memory args = stra2cbor(argN); - return oraclize.queryN.value(price)(0, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - bytes memory args = stra2cbor(argN); - return oraclize.queryN.value(price)(timestamp, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - bytes memory args = stra2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); - } - function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - bytes memory args = stra2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); - } - function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - bytes memory args = ba2cbor(argN); - return oraclize.queryN.value(price)(0, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - bytes memory args = ba2cbor(argN); - return oraclize.queryN.value(price)(timestamp, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - bytes memory args = ba2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); - } - function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - bytes memory args = ba2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); - } - function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_cbAddress() oraclizeAPI internal returns (address){ - return oraclize.cbAddress(); - } - function oraclize_setProof(byte proofP) oraclizeAPI internal { - return oraclize.setProofType(proofP); - } - function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { - return oraclize.setCustomGasPrice(gasPrice); - } - function oraclize_setConfig(bytes32 config) oraclizeAPI internal { - return oraclize.setConfig(config); - } - - function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ - return oraclize.randomDS_getSessionPubKeyHash(); - } - - function getCodeSize(address _addr) constant internal returns(uint _size) { - assembly { - _size := extcodesize(_addr) - } - } - - function parseAddr(string _a) internal returns (address){ - bytes memory tmp = bytes(_a); - uint160 iaddr = 0; - uint160 b1; - uint160 b2; - for (uint i=2; i<2+2*20; i+=2){ - iaddr *= 256; - b1 = uint160(tmp[i]); - b2 = uint160(tmp[i+1]); - if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; - else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; - else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; - if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; - else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; - else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; - iaddr += (b1*16+b2); - } - return address(iaddr); - } - - function strCompare(string _a, string _b) internal returns (int) { - bytes memory a = bytes(_a); - bytes memory b = bytes(_b); - uint minLength = a.length; - if (b.length < minLength) minLength = b.length; - for (uint i = 0; i < minLength; i ++) - if (a[i] < b[i]) - return -1; - else if (a[i] > b[i]) - return 1; - if (a.length < b.length) - return -1; - else if (a.length > b.length) - return 1; - else - return 0; - } - - function indexOf(string _haystack, string _needle) internal returns (int) { - bytes memory h = bytes(_haystack); - bytes memory n = bytes(_needle); - if(h.length < 1 || n.length < 1 || (n.length > h.length)) - return -1; - else if(h.length > (2**128 -1)) - return -1; - else - { - uint subindex = 0; - for (uint i = 0; i < h.length; i ++) - { - if (h[i] == n[0]) - { - subindex = 1; - while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) - { - subindex++; - } - if(subindex == n.length) - return int(i); - } - } - return -1; - } - } - - function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { - bytes memory _ba = bytes(_a); - bytes memory _bb = bytes(_b); - bytes memory _bc = bytes(_c); - bytes memory _bd = bytes(_d); - bytes memory _be = bytes(_e); - string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); - bytes memory babcde = bytes(abcde); - uint k = 0; - for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; - for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; - for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; - for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; - for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; - return string(babcde); - } - - function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { - return strConcat(_a, _b, _c, _d, ""); - } - - function strConcat(string _a, string _b, string _c) internal returns (string) { - return strConcat(_a, _b, _c, "", ""); - } - - function strConcat(string _a, string _b) internal returns (string) { - return strConcat(_a, _b, "", "", ""); - } - - // parseInt - function parseInt(string _a) internal returns (uint) { - return parseInt(_a, 0); - } - - // parseInt(parseFloat*10^_b) - function parseInt(string _a, uint _b) internal returns (uint) { - bytes memory bresult = bytes(_a); - uint mint = 0; - bool decimals = false; - for (uint i=0; i= 48)&&(bresult[i] <= 57)){ - if (decimals){ - if (_b == 0) break; - else _b--; - } - mint *= 10; - mint += uint(bresult[i]) - 48; - } else if (bresult[i] == 46) decimals = true; - } - if (_b > 0) mint *= 10**_b; - return mint; - } - - function uint2str(uint i) internal returns (string){ - if (i == 0) return "0"; - uint j = i; - uint len; - while (j != 0){ - len++; - j /= 10; - } - bytes memory bstr = new bytes(len); - uint k = len - 1; - while (i != 0){ - bstr[k--] = byte(48 + i % 10); - i /= 10; - } - return string(bstr); - } - - function stra2cbor(string[] arr) internal returns (bytes) { - uint arrlen = arr.length; - - // get correct cbor output length - uint outputlen = 0; - bytes[] memory elemArray = new bytes[](arrlen); - for (uint i = 0; i < arrlen; i++) { - elemArray[i] = (bytes(arr[i])); - outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types - } - uint ctr = 0; - uint cborlen = arrlen + 0x80; - outputlen += byte(cborlen).length; - bytes memory res = new bytes(outputlen); - - while (byte(cborlen).length > ctr) { - res[ctr] = byte(cborlen)[ctr]; - ctr++; - } - for (i = 0; i < arrlen; i++) { - res[ctr] = 0x5F; - ctr++; - for (uint x = 0; x < elemArray[i].length; x++) { - // if there's a bug with larger strings, this may be the culprit - if (x % 23 == 0) { - uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; - elemcborlen += 0x40; - uint lctr = ctr; - while (byte(elemcborlen).length > ctr - lctr) { - res[ctr] = byte(elemcborlen)[ctr - lctr]; - ctr++; - } - } - res[ctr] = elemArray[i][x]; - ctr++; - } - res[ctr] = 0xFF; - ctr++; - } - return res; - } - - function ba2cbor(bytes[] arr) internal returns (bytes) { - uint arrlen = arr.length; - - // get correct cbor output length - uint outputlen = 0; - bytes[] memory elemArray = new bytes[](arrlen); - for (uint i = 0; i < arrlen; i++) { - elemArray[i] = (bytes(arr[i])); - outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types - } - uint ctr = 0; - uint cborlen = arrlen + 0x80; - outputlen += byte(cborlen).length; - bytes memory res = new bytes(outputlen); - - while (byte(cborlen).length > ctr) { - res[ctr] = byte(cborlen)[ctr]; - ctr++; - } - for (i = 0; i < arrlen; i++) { - res[ctr] = 0x5F; - ctr++; - for (uint x = 0; x < elemArray[i].length; x++) { - // if there's a bug with larger strings, this may be the culprit - if (x % 23 == 0) { - uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; - elemcborlen += 0x40; - uint lctr = ctr; - while (byte(elemcborlen).length > ctr - lctr) { - res[ctr] = byte(elemcborlen)[ctr - lctr]; - ctr++; - } - } - res[ctr] = elemArray[i][x]; - ctr++; - } - res[ctr] = 0xFF; - ctr++; - } - return res; - } - - - string oraclize_network_name; - function oraclize_setNetworkName(string _network_name) internal { - oraclize_network_name = _network_name; - } - - function oraclize_getNetworkName() internal returns (string) { - return oraclize_network_name; - } - - function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ - if ((_nbytes == 0)||(_nbytes > 32)) throw; - bytes memory nbytes = new bytes(1); - nbytes[0] = byte(_nbytes); - bytes memory unonce = new bytes(32); - bytes memory sessionKeyHash = new bytes(32); - bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); - assembly { - mstore(unonce, 0x20) - mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) - mstore(sessionKeyHash, 0x20) - mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) - } - bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; - bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit); - oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); - return queryId; - } - - function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { - oraclize_randomDS_args[queryId] = commitment; - } - - mapping(bytes32=>bytes32) oraclize_randomDS_args; - mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; - - function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ - bool sigok; - address signer; - - bytes32 sigr; - bytes32 sigs; - - bytes memory sigr_ = new bytes(32); - uint offset = 4+(uint(dersig[3]) - 0x20); - sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); - bytes memory sigs_ = new bytes(32); - offset += 32 + 2; - sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); - - assembly { - sigr := mload(add(sigr_, 32)) - sigs := mload(add(sigs_, 32)) - } - - - (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); - if (address(sha3(pubkey)) == signer) return true; - else { - (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); - return (address(sha3(pubkey)) == signer); - } - } - - function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { - bool sigok; - - // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) - bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); - copyBytes(proof, sig2offset, sig2.length, sig2, 0); - - bytes memory appkey1_pubkey = new bytes(64); - copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); - - bytes memory tosign2 = new bytes(1+65+32); - tosign2[0] = 1; //role - copyBytes(proof, sig2offset-65, 65, tosign2, 1); - bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c"; - copyBytes(CODEHASH, 0, 32, tosign2, 1+65); - sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); - - if (sigok == false) return false; - - - // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) - bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4"; - - bytes memory tosign3 = new bytes(1+65); - tosign3[0] = 0xFE; - copyBytes(proof, 3, 65, tosign3, 1); - - bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); - copyBytes(proof, 3+65, sig3.length, sig3, 0); - - sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); - - return sigok; - } - - modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { - // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) - if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) throw; - - bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); - if (proofVerified == false) throw; - - _; - } - - function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ - bool match_ = true; - - for (var i=0; i - - -contract ERC20 { - - uint public totalSupply; - - function balanceOf(address who) constant returns (uint256); - - function allowance(address owner, address spender) constant returns (uint); - - function transferFrom(address from, address to, uint value) returns (bool ok); - - function approve(address spender, uint value) returns (bool ok); - - function transfer(address to, uint value) returns (bool ok); - - function convert(uint _value) returns (bool ok); - - event Transfer(address indexed from, address indexed to, uint value); - - event Approval(address indexed owner, address indexed spender, uint value); - -} - - contract ICO is ERC20,usingOraclize - -{ - - address[] public addresses ; - - // Name of the token - string public constant name = "ROC"; - - // Symbol of token - string public constant symbol = "ROC"; - uint8 public constant decimals = 10; // decimal places - - mapping(address => address) public userStructs; - - - bytes32 myid_; - - mapping(bytes32=>bytes32) myidList; - - uint public totalSupply = 5000000 *10000000000 ; - - mapping(address => uint) balances; - - mapping (address => mapping (address => uint)) allowed; - - address owner; - - - uint one_ether_usd_price; - - enum State {created , gotapidata,wait} - State state; - - uint256 ether_profit; - - uint256 profit_per_token; - - uint256 holder_token_balance; - - uint256 holder_profit; - - event Message(uint256 holder_profit); - - - // Functions with this modifier can only be executed by the owner - modifier onlyOwner() { - if (msg.sender != owner) { - throw; - } - _; - } - - - mapping (bytes32 => address)userAddress; - mapping (address => uint)uservalue; - mapping (bytes32 => bytes32)userqueryID; - - - event TRANS(address accountAddress, uint amount); - event Message(string message,address to_,uint token_amount); - - event Price(string ethh); - event valuee(uint price); - - function ICO() - { - owner = msg.sender; - balances[owner] = totalSupply; - - } - - - function() payable { - - - TRANS(msg.sender, msg.value); // fire event - - if(msg.sender != owner) - { - // kraken api - // oraclize_query(5, "URL", "json(https://api.kraken.com/0/public/Ticker?pair=ETHUSD).result.XETHZUSD.c.0"); - - bytes32 ID = oraclize_query("URL","json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD"); - - - userAddress[ID]=msg.sender; - uservalue[msg.sender]=msg.value; - userqueryID[ID]=ID; - } - - else if(msg.sender ==owner){ - - ether_profit = msg.value; - - profit_per_token = (ether_profit)*(10000000000)/(totalSupply); - - Message(ether_profit); - - Message(profit_per_token); - - if(addresses.length >0) - { - for (uint i = 0; i < addresses.length; i++) { - - if(addresses[i] !=owner) - { - request_dividend(addresses[i]); - } - - } - } - - } - - - // transfer(msg.sender,no_of_token); - } - - function __callback(bytes32 myid, string result) { - if (msg.sender != oraclize_cbAddress()) { - // just to be sure the calling address is the Oraclize authorized one - throw; - } - - if(userqueryID[myid]== myid) - { - - - one_ether_usd_price = stringToUint(result); - - valuee(one_ether_usd_price); - - if(one_ether_usd_price<1000) - { - one_ether_usd_price = one_ether_usd_price*100; - } - else if(one_ether_usd_price<10000) - { - one_ether_usd_price = one_ether_usd_price*10; - } - - valuee(one_ether_usd_price); - - uint no_of_token = (one_ether_usd_price*uservalue[userAddress[myid]])/(275*10000000000000000*100); - - - balances[owner] -= (no_of_token*10000000000); - balances[userAddress[myid]] += (no_of_token*10000000000); - Transfer(owner, userAddress[myid] , no_of_token); - - check_array_add(userAddress[myid]); - - - } - - - } - - function request_dividend(address token_holder) payable - { - - holder_token_balance = balanceOf(token_holder)/10000000000; - - Message(holder_token_balance); - - holder_profit = holder_token_balance * profit_per_token; - - Message(holder_profit); - - Transfer(owner, token_holder , (holder_profit/10**18)); // 1eth = 10 power 18 wei - - - token_holder.send(holder_profit); - - } - - function balanceOf(address sender) constant returns (uint256 balance) { - - return balances[sender]; - } - - // Transfer the balance from owner's account to another account - function transfer(address _to, uint256 _amount) returns (bool success) { - if (balances[msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - - check_array_add(_to); - - return true; - } else { - return false; - } - } - - function check_array_add(address _to) - { - if(addresses.length >0) - { - if(userStructs[_to] != _to) - { - userStructs[_to]= _to; - addresses.push(_to); - } - } - else - { - userStructs[_to]= _to; - addresses.push(_to); - } - } - - - // Send _value amount of tokens from address _from to address _to - // The transferFrom method is used for a withdraw workflow, allowing contracts to send - // tokens on your behalf, for example to "deposit" to a contract address and/or to charge - // fees in sub-currencies; the command should fail unless the _from account has - // deliberately authorized the sender of the message via some mechanism; we propose - // these standardized APIs for approval: - - function transferFrom( - address _from, - address _to, - uint256 _amount - ) returns (bool success) { - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - - // Allow _spender to withdraw from your account, multiple times, up to the _value amount. - // If this function is called again it overwrites the current allowance with _value. - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - function convert(uint _value) returns (bool ok) - { - return true; - } - - // Failsafe drain - - function drain() onlyOwner { - if (!owner.send(this.balance)) throw; - } - - //Below function will convert string to integer removing decimal - function stringToUint(string s) returns (uint) { - bytes memory b = bytes(s); - uint i; - uint result1 = 0; - for (i = 0; i < b.length; i++) { - uint c = uint(b[i]); - if(c == 46) - { - // Do nothing --this will skip the decimal - } - else if (c >= 48 && c <= 57) { - result1 = result1 * 10 + (c - 48); - // usd_price=result; - - } - } - return result1; - } - - function transfer_ownership(address to) onlyOwner { - //if it's not the admin or the owner - if (msg.sender != owner) throw; - owner = to; - balances[owner]=balances[msg.sender]; - balances[msg.sender]=0; - } - - -} \ No newline at end of file diff --git a/data/CVE/2018-11239.sol b/data/CVE/2018-11239.sol deleted file mode 100644 index 33fd39a0..00000000 --- a/data/CVE/2018-11239.sol +++ /dev/null @@ -1,102 +0,0 @@ -pragma solidity ^0.4.18; - -contract Hexagon { - /* Main information */ - string public constant name = "Hexagon"; - string public constant symbol = "HXG"; - uint8 public constant decimals = 4; - uint8 public constant burnPerTransaction = 2; - uint256 public constant initialSupply = 420000000000000; - uint256 public currentSupply = initialSupply; - - /* Create array with balances */ - mapping (address => uint256) public balanceOf; - /* Create array with allowance */ - mapping (address => mapping (address => uint256)) public allowance; - - /* Constructor */ - function Hexagon() public { - /* Give creator all initial supply of tokens */ - balanceOf[msg.sender] = initialSupply; - } - - /* PUBLIC */ - /* Send tokens */ - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - - return true; - } - - /* Return current supply */ - function totalSupply() public constant returns (uint) { - return currentSupply; - } - - /* Burn tokens */ - function burn(uint256 _value) public returns (bool success) { - /* Check if the sender has enough */ - require(balanceOf[msg.sender] >= _value); - /* Subtract from the sender */ - balanceOf[msg.sender] -= _value; - /* Send to the black hole */ - balanceOf[0x0] += _value; - /* Update current supply */ - currentSupply -= _value; - /* Notify network */ - Burn(msg.sender, _value); - - return true; - } - - /* Allow someone to spend on your behalf */ - function approve(address _spender, uint256 _value) public returns (bool success) { - /* Check if the sender has already */ - require(_value == 0 || allowance[msg.sender][_spender] == 0); - /* Add to allowance */ - allowance[msg.sender][_spender] = _value; - /* Notify network */ - Approval(msg.sender, _spender, _value); - - return true; - } - - /* Transfer tokens from allowance */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - /* Prevent transfer of not allowed tokens */ - require(allowance[_from][msg.sender] >= _value); - /* Remove tokens from allowance */ - allowance[_from][msg.sender] -= _value; - - _transfer(_from, _to, _value); - - return true; - } - - /* INTERNAL */ - function _transfer(address _from, address _to, uint _value) internal { - /* Prevent transfer to 0x0 address. Use burn() instead */ - require (_to != 0x0); - /* Check if the sender has enough */ - require (balanceOf[_from] >= _value + burnPerTransaction); - /* Check for overflows */ - require (balanceOf[_to] + _value > balanceOf[_to]); - /* Subtract from the sender */ - balanceOf[_from] -= _value + burnPerTransaction; - /* Add the same to the recipient */ - balanceOf[_to] += _value; - /* Apply transaction fee */ - balanceOf[0x0] += burnPerTransaction; - /* Update current supply */ - currentSupply -= burnPerTransaction; - /* Notify network */ - Burn(_from, burnPerTransaction); - /* Notify network */ - Transfer(_from, _to, _value); - } - - /* Events */ - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} \ No newline at end of file diff --git a/data/CVE_clean/2018-10706.sol b/data/CVE_clean/2018-10706.sol deleted file mode 100644 index c215c751..00000000 --- a/data/CVE_clean/2018-10706.sol +++ /dev/null @@ -1,252 +0,0 @@ -pragma solidity ^0.4.18; -contract ApproveAndCallReceiver { - function receiveApproval( - address _from, - uint256 _amount, - address _token, - bytes _data - ) public; -} -contract Controlled { - modifier onlyController { - require(msg.sender == controller); - _; - } - address public controller; - function Controlled() public { - controller = msg.sender; - } - function changeController(address _newController) onlyController public { - controller = _newController; - } -} -contract ERC20Token { - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - function transfer(address _to, uint256 _value) public returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - function approve(address _spender, uint256 _value) public returns (bool success); - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract TokenI is ERC20Token, Controlled { - string public name; - uint8 public decimals; - string public symbol; - function approveAndCall( - address _spender, - uint256 _amount, - bytes _extraData - ) public returns (bool success); - function generateTokens(address _owner, uint _amount) public returns (bool); - function destroyTokens(address _owner, uint _amount) public returns (bool); -} -contract Token is TokenI { - struct FreezeInfo { - address user; - uint256 amount; - } - mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; - mapping (uint8 => uint8) public lastFreezeSeq; - mapping (address => uint256) public airdropOf; - address public owner; - bool public paused=false; - uint256 public minFunding = 1 ether; - uint256 public airdropQty=0; - uint256 public airdropTotalQty=0; - uint256 public tokensPerEther = 10000; - address private vaultAddress; - uint256 public totalCollected = 0; - event Burn(address indexed from, uint256 value); - event Freeze(address indexed from, uint256 value); - event Unfreeze(address indexed from, uint256 value); - event Payment(address sender, uint256 _ethAmount, uint256 _tokenAmount); - function Token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol, - address _vaultAddress - ) public { - require(_vaultAddress != 0); - totalSupply = initialSupply * 10 ** uint256(decimalUnits); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - owner = msg.sender; - vaultAddress=_vaultAddress; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - modifier realUser(address user){ - if(user == 0x0){ - revert(); - } - _; - } - modifier moreThanZero(uint256 _value){ - if (_value <= 0){ - revert(); - } - _; - } - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) { - return false; - } - assembly { - size := extcodesize(_addr) - } - return size>0; - } - function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { - require(balanceOf[msg.sender] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[msg.sender] = balanceOf[msg.sender] - _value; - balanceOf[_to] = balanceOf[_to] + _value; - emit Transfer(msg.sender, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) moreThanZero(_value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { - require(approve(_spender, _amount)); - ApproveAndCallReceiver(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] = balanceOf[_from] - _value; - balanceOf[_to] = balanceOf[_to] + _value; - allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; - emit Transfer(_from, _to, _value); - return true; - } - function transferMulti(address[] _to, uint256[] _value) public returns (uint256 amount){ - require(_to.length == _value.length); - uint8 len = uint8(_to.length); - for(uint8 j; j= amount); - for(uint8 i; i= _value); - balanceOf[_user] = balanceOf[_user] - _value; - freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); - lastFreezeSeq[_step]++; - emit Freeze(_user, _value); - return true; - } - function unFreeze(uint8 _step) onlyOwner public returns (bool unlockOver) { - uint8 _end = lastFreezeSeq[_step]; - require(_end > 0); - unlockOver=false; - uint8 _start=0; - for(; _end>_start; _end--){ - FreezeInfo storage fInfo = freezeOf[_step][_end-1]; - uint256 _amount = fInfo.amount; - balanceOf[fInfo.user] += _amount; - delete freezeOf[_step][_end-1]; - lastFreezeSeq[_step]--; - emit Unfreeze(fInfo.user, _amount); - } - } - function generateTokens(address _user, uint _amount) onlyController public returns (bool) { - _amount=_amount*10**uint256(decimals); - return _generateTokens(_user,_amount); - } - function _generateTokens(address _user, uint _amount) private returns (bool) { - require(balanceOf[owner] >= _amount); - balanceOf[_user] += _amount; - balanceOf[owner] -= _amount; - emit Transfer(0, _user, _amount); - return true; - } - function destroyTokens(address _user, uint256 _amount) onlyOwner public returns (bool) { - _amount=_amount*10**uint256(decimals); - return _destroyTokens(_user,_amount); - } - function _destroyTokens(address _user, uint256 _amount) private returns (bool) { - require(balanceOf[_user] >= _amount); - balanceOf[owner] += _amount; - balanceOf[_user] -= _amount; - emit Transfer(_user, 0, _amount); - emit Burn(_user, _amount); - return true; - } - function changeOwner(address newOwner) onlyOwner public returns (bool) { - balanceOf[newOwner] += balanceOf[owner]; - balanceOf[owner] = 0; - owner = newOwner; - return true; - } - function changeTokensPerEther(uint256 _newRate) onlyController public { - tokensPerEther = _newRate; - } - function changeAirdropQty(uint256 _airdropQty) onlyController public { - airdropQty = _airdropQty; - } - function changeAirdropTotalQty(uint256 _airdropTotalQty) onlyController public { - uint256 _token =_airdropTotalQty*10**uint256(decimals); - require(balanceOf[owner] >= _token); - airdropTotalQty = _airdropTotalQty; - } - function changePaused(bool _paused) onlyController public { - paused = _paused; - } - function() payable public { - require(!paused); - address _user=msg.sender; - uint256 tokenValue; - if(msg.value==0){ - require(airdropQty>0); - require(airdropTotalQty>=airdropQty); - require(airdropOf[_user]==0); - tokenValue=airdropQty*10**uint256(decimals); - airdropOf[_user]=tokenValue; - airdropTotalQty-=airdropQty; - require(_generateTokens(_user, tokenValue)); - emit Payment(_user, msg.value, tokenValue); - }else{ - require(msg.value >= minFunding); - require(msg.value % 1 ether==0); - totalCollected +=msg.value; - require(vaultAddress.send(msg.value)); - tokenValue = (msg.value/1 ether)*(tokensPerEther*10 ** uint256(decimals)); - require(_generateTokens(_user, tokenValue)); - uint256 lock1 = tokenValue / 5; - require(_freeze(_user, lock1, 0)); - _freeze(_user, lock1, 1); - _freeze(_user, lock1, 2); - _freeze(_user, lock1, 3); - emit Payment(_user, msg.value, tokenValue); - } - } -} \ No newline at end of file diff --git a/data/CVE_clean/2018-10944.sol b/data/CVE_clean/2018-10944.sol deleted file mode 100644 index 543e341c..00000000 --- a/data/CVE_clean/2018-10944.sol +++ /dev/null @@ -1,1041 +0,0 @@ -pragma solidity ^0.4.8; -contract OraclizeI { - address public cbAddress; - function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); - function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); - function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); - function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); - function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); - function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); - function getPrice(string _datasource) returns (uint _dsprice); - function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); - function useCoupon(string _coupon); - function setProofType(byte _proofType); - function setConfig(bytes32 _config); - function setCustomGasPrice(uint _gasPrice); - function randomDS_getSessionPubKeyHash() returns(bytes32); -} -contract OraclizeAddrResolverI { - function getAddress() returns (address _addr); -} -contract usingOraclize { - uint constant day = 60*60*24; - uint constant week = 60*60*24*7; - uint constant month = 60*60*24*30; - byte constant proofType_NONE = 0x00; - byte constant proofType_TLSNotary = 0x10; - byte constant proofType_Android = 0x20; - byte constant proofType_Ledger = 0x30; - byte constant proofType_Native = 0xF0; - byte constant proofStorage_IPFS = 0x01; - uint8 constant networkID_auto = 0; - uint8 constant networkID_mainnet = 1; - uint8 constant networkID_testnet = 2; - uint8 constant networkID_morden = 2; - uint8 constant networkID_consensys = 161; - OraclizeAddrResolverI OAR; - OraclizeI oraclize; - modifier oraclizeAPI { - if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); - oraclize = OraclizeI(OAR.getAddress()); - _; - } - modifier coupon(string code){ - oraclize = OraclizeI(OAR.getAddress()); - oraclize.useCoupon(code); - _; - } - function oraclize_setNetwork(uint8 networkID) internal returns(bool){ - if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ - OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); - oraclize_setNetworkName("eth_mainnet"); - return true; - } - if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ - OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); - oraclize_setNetworkName("eth_ropsten3"); - return true; - } - if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ - OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); - oraclize_setNetworkName("eth_kovan"); - return true; - } - if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ - OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); - oraclize_setNetworkName("eth_rinkeby"); - return true; - } - if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ - OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); - return true; - } - if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ - OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); - return true; - } - if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ - OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); - return true; - } - return false; - } - function __callback(bytes32 myid, string result) { - __callback(myid, result, new bytes(0)); - } - function __callback(bytes32 myid, string result, bytes proof) { - } - function oraclize_useCoupon(string code) oraclizeAPI internal { - oraclize.useCoupon(code); - } - function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ - return oraclize.getPrice(datasource); - } - function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ - return oraclize.getPrice(datasource, gaslimit); - } - function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - return oraclize.query.value(price)(0, datasource, arg); - } - function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - return oraclize.query.value(price)(timestamp, datasource, arg); - } - function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); - } - function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); - } - function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - return oraclize.query2.value(price)(0, datasource, arg1, arg2); - } - function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); - } - function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); - } - function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); - } - function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - bytes memory args = stra2cbor(argN); - return oraclize.queryN.value(price)(0, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - bytes memory args = stra2cbor(argN); - return oraclize.queryN.value(price)(timestamp, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - bytes memory args = stra2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); - } - function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - bytes memory args = stra2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); - } - function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - bytes memory args = ba2cbor(argN); - return oraclize.queryN.value(price)(0, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - bytes memory args = ba2cbor(argN); - return oraclize.queryN.value(price)(timestamp, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - bytes memory args = ba2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); - } - function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - bytes memory args = ba2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); - } - function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_cbAddress() oraclizeAPI internal returns (address){ - return oraclize.cbAddress(); - } - function oraclize_setProof(byte proofP) oraclizeAPI internal { - return oraclize.setProofType(proofP); - } - function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { - return oraclize.setCustomGasPrice(gasPrice); - } - function oraclize_setConfig(bytes32 config) oraclizeAPI internal { - return oraclize.setConfig(config); - } - function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ - return oraclize.randomDS_getSessionPubKeyHash(); - } - function getCodeSize(address _addr) constant internal returns(uint _size) { - assembly { - _size := extcodesize(_addr) - } - } - function parseAddr(string _a) internal returns (address){ - bytes memory tmp = bytes(_a); - uint160 iaddr = 0; - uint160 b1; - uint160 b2; - for (uint i=2; i<2+2*20; i+=2){ - iaddr *= 256; - b1 = uint160(tmp[i]); - b2 = uint160(tmp[i+1]); - if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; - else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; - else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; - if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; - else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; - else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; - iaddr += (b1*16+b2); - } - return address(iaddr); - } - function strCompare(string _a, string _b) internal returns (int) { - bytes memory a = bytes(_a); - bytes memory b = bytes(_b); - uint minLength = a.length; - if (b.length < minLength) minLength = b.length; - for (uint i = 0; i < minLength; i ++) - if (a[i] < b[i]) - return -1; - else if (a[i] > b[i]) - return 1; - if (a.length < b.length) - return -1; - else if (a.length > b.length) - return 1; - else - return 0; - } - function indexOf(string _haystack, string _needle) internal returns (int) { - bytes memory h = bytes(_haystack); - bytes memory n = bytes(_needle); - if(h.length < 1 || n.length < 1 || (n.length > h.length)) - return -1; - else if(h.length > (2**128 -1)) - return -1; - else - { - uint subindex = 0; - for (uint i = 0; i < h.length; i ++) - { - if (h[i] == n[0]) - { - subindex = 1; - while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) - { - subindex++; - } - if(subindex == n.length) - return int(i); - } - } - return -1; - } - } - function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { - bytes memory _ba = bytes(_a); - bytes memory _bb = bytes(_b); - bytes memory _bc = bytes(_c); - bytes memory _bd = bytes(_d); - bytes memory _be = bytes(_e); - string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); - bytes memory babcde = bytes(abcde); - uint k = 0; - for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; - for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; - for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; - for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; - for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; - return string(babcde); - } - function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { - return strConcat(_a, _b, _c, _d, ""); - } - function strConcat(string _a, string _b, string _c) internal returns (string) { - return strConcat(_a, _b, _c, "", ""); - } - function strConcat(string _a, string _b) internal returns (string) { - return strConcat(_a, _b, "", "", ""); - } - function parseInt(string _a) internal returns (uint) { - return parseInt(_a, 0); - } - function parseInt(string _a, uint _b) internal returns (uint) { - bytes memory bresult = bytes(_a); - uint mint = 0; - bool decimals = false; - for (uint i=0; i= 48)&&(bresult[i] <= 57)){ - if (decimals){ - if (_b == 0) break; - else _b--; - } - mint *= 10; - mint += uint(bresult[i]) - 48; - } else if (bresult[i] == 46) decimals = true; - } - if (_b > 0) mint *= 10**_b; - return mint; - } - function uint2str(uint i) internal returns (string){ - if (i == 0) return "0"; - uint j = i; - uint len; - while (j != 0){ - len++; - j /= 10; - } - bytes memory bstr = new bytes(len); - uint k = len - 1; - while (i != 0){ - bstr[k--] = byte(48 + i % 10); - i /= 10; - } - return string(bstr); - } - function stra2cbor(string[] arr) internal returns (bytes) { - uint arrlen = arr.length; - uint outputlen = 0; - bytes[] memory elemArray = new bytes[](arrlen); - for (uint i = 0; i < arrlen; i++) { - elemArray[i] = (bytes(arr[i])); - outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; - } - uint ctr = 0; - uint cborlen = arrlen + 0x80; - outputlen += byte(cborlen).length; - bytes memory res = new bytes(outputlen); - while (byte(cborlen).length > ctr) { - res[ctr] = byte(cborlen)[ctr]; - ctr++; - } - for (i = 0; i < arrlen; i++) { - res[ctr] = 0x5F; - ctr++; - for (uint x = 0; x < elemArray[i].length; x++) { - if (x % 23 == 0) { - uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; - elemcborlen += 0x40; - uint lctr = ctr; - while (byte(elemcborlen).length > ctr - lctr) { - res[ctr] = byte(elemcborlen)[ctr - lctr]; - ctr++; - } - } - res[ctr] = elemArray[i][x]; - ctr++; - } - res[ctr] = 0xFF; - ctr++; - } - return res; - } - function ba2cbor(bytes[] arr) internal returns (bytes) { - uint arrlen = arr.length; - uint outputlen = 0; - bytes[] memory elemArray = new bytes[](arrlen); - for (uint i = 0; i < arrlen; i++) { - elemArray[i] = (bytes(arr[i])); - outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; - } - uint ctr = 0; - uint cborlen = arrlen + 0x80; - outputlen += byte(cborlen).length; - bytes memory res = new bytes(outputlen); - while (byte(cborlen).length > ctr) { - res[ctr] = byte(cborlen)[ctr]; - ctr++; - } - for (i = 0; i < arrlen; i++) { - res[ctr] = 0x5F; - ctr++; - for (uint x = 0; x < elemArray[i].length; x++) { - if (x % 23 == 0) { - uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; - elemcborlen += 0x40; - uint lctr = ctr; - while (byte(elemcborlen).length > ctr - lctr) { - res[ctr] = byte(elemcborlen)[ctr - lctr]; - ctr++; - } - } - res[ctr] = elemArray[i][x]; - ctr++; - } - res[ctr] = 0xFF; - ctr++; - } - return res; - } - string oraclize_network_name; - function oraclize_setNetworkName(string _network_name) internal { - oraclize_network_name = _network_name; - } - function oraclize_getNetworkName() internal returns (string) { - return oraclize_network_name; - } - function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ - if ((_nbytes == 0)||(_nbytes > 32)) throw; - bytes memory nbytes = new bytes(1); - nbytes[0] = byte(_nbytes); - bytes memory unonce = new bytes(32); - bytes memory sessionKeyHash = new bytes(32); - bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); - assembly { - mstore(unonce, 0x20) - mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) - mstore(sessionKeyHash, 0x20) - mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) - } - bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; - bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit); - oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); - return queryId; - } - function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { - oraclize_randomDS_args[queryId] = commitment; - } - mapping(bytes32=>bytes32) oraclize_randomDS_args; - mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; - function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ - bool sigok; - address signer; - bytes32 sigr; - bytes32 sigs; - bytes memory sigr_ = new bytes(32); - uint offset = 4+(uint(dersig[3]) - 0x20); - sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); - bytes memory sigs_ = new bytes(32); - offset += 32 + 2; - sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); - assembly { - sigr := mload(add(sigr_, 32)) - sigs := mload(add(sigs_, 32)) - } - (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); - if (address(sha3(pubkey)) == signer) return true; - else { - (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); - return (address(sha3(pubkey)) == signer); - } - } - function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { - bool sigok; - bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); - copyBytes(proof, sig2offset, sig2.length, sig2, 0); - bytes memory appkey1_pubkey = new bytes(64); - copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); - bytes memory tosign2 = new bytes(1+65+32); - tosign2[0] = 1; - copyBytes(proof, sig2offset-65, 65, tosign2, 1); - bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c"; - copyBytes(CODEHASH, 0, 32, tosign2, 1+65); - sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); - if (sigok == false) return false; - bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4"; - bytes memory tosign3 = new bytes(1+65); - tosign3[0] = 0xFE; - copyBytes(proof, 3, 65, tosign3, 1); - bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); - copyBytes(proof, 3+65, sig3.length, sig3, 0); - sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); - return sigok; - } - modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { - if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) throw; - bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); - if (proofVerified == false) throw; - _; - } - function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ - bool match_ = true; - for (var i=0; i address) public userStructs; - bytes32 myid_; - mapping(bytes32=>bytes32) myidList; - uint public totalSupply = 5000000 *10000000000 ; - mapping(address => uint) balances; - mapping (address => mapping (address => uint)) allowed; - address owner; - uint one_ether_usd_price; - enum State {created , gotapidata,wait} - State state; - uint256 ether_profit; - uint256 profit_per_token; - uint256 holder_token_balance; - uint256 holder_profit; - event Message(uint256 holder_profit); - modifier onlyOwner() { - if (msg.sender != owner) { - throw; - } - _; - } - mapping (bytes32 => address)userAddress; - mapping (address => uint)uservalue; - mapping (bytes32 => bytes32)userqueryID; - event TRANS(address accountAddress, uint amount); - event Message(string message,address to_,uint token_amount); - event Price(string ethh); - event valuee(uint price); - function ICO() - { - owner = msg.sender; - balances[owner] = totalSupply; - } - function() payable { - TRANS(msg.sender, msg.value); - if(msg.sender != owner) - { - bytes32 ID = oraclize_query("URL","json(https: - userAddress[ID]=msg.sender; - uservalue[msg.sender]=msg.value; - userqueryID[ID]=ID; - } - else if(msg.sender ==owner){ - ether_profit = msg.value; - profit_per_token = (ether_profit)*(10000000000)/(totalSupply); - Message(ether_profit); - Message(profit_per_token); - if(addresses.length >0) - { - for (uint i = 0; i < addresses.length; i++) { - if(addresses[i] !=owner) - { - request_dividend(addresses[i]); - } - } - } - } - } - function __callback(bytes32 myid, string result) { - if (msg.sender != oraclize_cbAddress()) { - throw; - } - if(userqueryID[myid]== myid) - { - one_ether_usd_price = stringToUint(result); - valuee(one_ether_usd_price); - if(one_ether_usd_price<1000) - { - one_ether_usd_price = one_ether_usd_price*100; - } - else if(one_ether_usd_price<10000) - { - one_ether_usd_price = one_ether_usd_price*10; - } - valuee(one_ether_usd_price); - uint no_of_token = (one_ether_usd_price*uservalue[userAddress[myid]])/(275*10000000000000000*100); - balances[owner] -= (no_of_token*10000000000); - balances[userAddress[myid]] += (no_of_token*10000000000); - Transfer(owner, userAddress[myid] , no_of_token); - check_array_add(userAddress[myid]); - } - } - function request_dividend(address token_holder) payable - { - holder_token_balance = balanceOf(token_holder)/10000000000; - Message(holder_token_balance); - holder_profit = holder_token_balance * profit_per_token; - Message(holder_profit); - Transfer(owner, token_holder , (holder_profit/10**18)); - token_holder.send(holder_profit); - } - function balanceOf(address sender) constant returns (uint256 balance) { - return balances[sender]; - } - function transfer(address _to, uint256 _amount) returns (bool success) { - if (balances[msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - check_array_add(_to); - return true; - } else { - return false; - } - } - function check_array_add(address _to) - { - if(addresses.length >0) - { - if(userStructs[_to] != _to) - { - userStructs[_to]= _to; - addresses.push(_to); - } - } - else - { - userStructs[_to]= _to; - addresses.push(_to); - } - } - function transferFrom( - address _from, - address _to, - uint256 _amount - ) returns (bool success) { - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function convert(uint _value) returns (bool ok) - { - return true; - } - function drain() onlyOwner { - if (!owner.send(this.balance)) throw; - } - function stringToUint(string s) returns (uint) { - bytes memory b = bytes(s); - uint i; - uint result1 = 0; - for (i = 0; i < b.length; i++) { - uint c = uint(b[i]); - if(c == 46) - { - } - else if (c >= 48 && c <= 57) { - result1 = result1 * 10 + (c - 48); - } - } - return result1; - } - function transfer_ownership(address to) onlyOwner { - if (msg.sender != owner) throw; - owner = to; - balances[owner]=balances[msg.sender]; - balances[msg.sender]=0; - } -} \ No newline at end of file diff --git a/data/CVE_clean/2018-11239.sol b/data/CVE_clean/2018-11239.sol deleted file mode 100644 index 28d0eb53..00000000 --- a/data/CVE_clean/2018-11239.sol +++ /dev/null @@ -1,55 +0,0 @@ -pragma solidity ^0.4.18; -contract Hexagon { - string public constant name = "Hexagon"; - string public constant symbol = "HXG"; - uint8 public constant decimals = 4; - uint8 public constant burnPerTransaction = 2; - uint256 public constant initialSupply = 420000000000000; - uint256 public currentSupply = initialSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - function Hexagon() public { - balanceOf[msg.sender] = initialSupply; - } - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - function totalSupply() public constant returns (uint) { - return currentSupply; - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - balanceOf[0x0] += _value; - currentSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - require(_value == 0 || allowance[msg.sender][_spender] == 0); - allowance[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(allowance[_from][msg.sender] >= _value); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value + burnPerTransaction); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value + burnPerTransaction; - balanceOf[_to] += _value; - balanceOf[0x0] += burnPerTransaction; - currentSupply -= burnPerTransaction; - Burn(_from, burnPerTransaction); - Transfer(_from, _to, _value); - } - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} \ No newline at end of file diff --git a/data/CVE_label/CVE2description.json b/data/CVE_label/CVE2description.json deleted file mode 100644 index e05f122c..00000000 --- a/data/CVE_label/CVE2description.json +++ /dev/null @@ -1,564 +0,0 @@ -{ - "CVE-2023-41052": "Vyper is a Pythonic Smart Contract Language. In affected versions the order of evaluation of the arguments of the builtin functions `uint256_addmod`, `uint256_mulmod`, `ecadd` and `ecmul` does not follow source order. This behaviour is problematic when the evaluation of one of the arguments produces side effects that other arguments depend on. A patch is currently being developed on pull request #3583. When using builtins from the list above, users should make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", - "CVE-2023-40015": "Vyper is a Pythonic Smart Contract Language. For the following (probably non-exhaustive) list of expressions, the compiler evaluates the arguments from right to left instead of left to right. `unsafe_add, unsafe_sub, unsafe_mul, unsafe_div, pow_mod256, |, &, ^ (bitwise operators), bitwise_or (deprecated), bitwise_and (deprecated), bitwise_xor (deprecated), raw_call, <, >, <=, >=, ==, !=, in, not in (when lhs and rhs are enums)`. This behaviour becomes a problem when the evaluation of one of the arguments produces side effects that other arguments depend on. The following expressions can produce side-effect: state modifying external call , state modifying internal call, `raw_call`, `pop()` when used on a Dynamic Array stored in the storage, `create_minimal_proxy_to`, `create_copy_of`, `create_from_blueprint`. This issue has not yet been patched. Users are advised to make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", - "CVE-2023-40014": "OpenZeppelin Contracts is a library for secure smart contract development. Starting in version 4.0.0 and prior to version 4.9.3, contracts using `ERC2771Context` along with a custom trusted forwarder may see `_msgSender` return `address(0)` in calls that originate from the forwarder with calldata shorter than 20 bytes. This combination of circumstances does not appear to be common, in particular it is not the case for `MinimalForwarder` from OpenZeppelin Contracts, or any deployed forwarder the team is aware of, given that the signer address is appended to all calls that originate from these forwarders. The problem has been patched in v4.9.3.", - "CVE-2023-39363": "Vyer is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a `.vy` contract compiled with `vyper` versions `0.2.15`, `0.2.16`, or `0.3.0`; a primary function that utilizes the `@nonreentrant` decorator with a specific `key` and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same `key` and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.", - "CVE-2023-34459": "OpenZeppelin Contracts is a library for smart contract development. Starting in version 4.7.0 and prior to version 4.9.2, when the `verifyMultiProof`, `verifyMultiProofCalldata`, `procesprocessMultiProof`, or `processMultiProofCalldat` functions are in use, it is possible to construct merkle trees that allow forging a valid multiproof for an arbitrary set of leaves. A contract may be vulnerable if it uses multiproofs for verification and the merkle tree that is processed includes a node with value 0 at depth 1 (just under the root). This could happen inadvertedly for balanced trees with 3 leaves or less, if the leaves are not hashed. This could happen deliberately if a malicious tree builder includes such a node in the tree. A contract is not vulnerable if it uses single-leaf proving (`verify`, `verifyCalldata`, `processProof`, or `processProofCalldata`), or if it uses multiproofs with a known tree that has hashed leaves. Standard merkle trees produced or validated with the @openzeppelin/merkle-tree library are safe. The problem has been patched in version 4.9.2. Some workarounds are available. For those using multiproofs: When constructing merkle trees hash the leaves and do not insert empty nodes in your trees. Using the @openzeppelin/merkle-tree package eliminates this issue. Do not accept user-provided merkle roots without reconstructing at least the first level of the tree. Verify the merkle tree structure by reconstructing it from the leaves.", - "CVE-2023-34449": "ink! is an embedded domain specific language to write smart contracts in Rust for blockchains built on the Substrate framework. Starting in version 4.0.0 and prior to version 4.2.1, the return value when using delegate call mechanics, either through `CallBuilder::delegate` or `ink_env::invoke_contract_delegate`, is decoded incorrectly. This bug was related to the mechanics around decoding a call's return buffer, which was changed as part of pull request 1450. Since this feature was only released in ink! 4.0.0, no previous versions are affected. Users who have an ink! 4.x series contract should upgrade to 4.2.1 to receive a patch.", - "CVE-2023-34234": "OpenZeppelin Contracts is a library for smart contract development. By frontrunning the creation of a proposal, an attacker can become the proposer and gain the ability to cancel it. The attacker can do this repeatedly to try to prevent a proposal from being proposed at all. This impacts the `Governor` contract in v4.9.0 only, and the `GovernorCompatibilityBravo` contract since v4.3.0. This problem has been patched in 4.9.1 by introducing opt-in frontrunning protection. Users are advised to upgrade. Users unable to upgrade may submit the proposal creation transaction to an endpoint with frontrunning protection as a workaround.", - "CVE-2023-32675": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In contracts with more than one regular nonpayable function, it is possible to send funds to the default function, even if the default function is marked `nonpayable`. This applies to contracts compiled with vyper versions prior to 0.3.8. This issue was fixed by the removal of the global `calldatasize` check in commit `02339dfda`. Users are advised to upgrade to version 0.3.8. Users unable to upgrade should avoid use of nonpayable default functions.", - "CVE-2023-32059": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, internal calls with default arguments are compiled incorrectly. Depending on the number of arguments provided in the call, the defaults are added not right-to-left, but left-to-right. If the types are incompatible, typechecking is bypassed. The ability to pass kwargs to internal functions is an undocumented feature that is not well known about. The issue is patched in version 0.3.8.", - "CVE-2023-32058": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, due to missing overflow check for loop variables, by assigning the iterator of a loop to a variable, it is possible to overflow the type of the latter. The issue seems to happen only in loops of type `for i in range(a, a + N)` as in loops of type `for i in range(start, stop)` and `for i in range(stop)`, the compiler is able to raise a `TypeMismatch` when trying to overflow the variable. The problem has been patched in version 0.3.8.", - "CVE-2023-31146": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, during codegen, the length word of a dynarray is written before the data, which can result in out-of-bounds array access in the case where the dynarray is on both the lhs and rhs of an assignment. The issue can cause data corruption across call frames. The expected behavior is to revert due to out-of-bounds array access. Version 0.3.8 contains a patch for this issue.", - "CVE-2023-30837": "Vyper is a pythonic smart contract language for the EVM. The storage allocator does not guard against allocation overflows in versions prior to 0.3.8. An attacker can overwrite the owner variable. This issue was fixed in version 0.3.8.", - "CVE-2023-30629": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions 0.3.1 through 0.3.7, the Vyper compiler generates the wrong bytecode. Any contract that uses the `raw_call` with `revert_on_failure=False` and `max_outsize=0` receives the wrong response from `raw_call`. Depending on the memory garbage, the result can be either `True` or `False`. A patch is available and, as of time of publication, anticipated to be part of Vyper 0.3.8. As a workaround, one may always put `max_outsize>0`.", - "CVE-2023-30542": "OpenZeppelin Contracts is a library for secure smart contract development. The proposal creation entrypoint (`propose`) in `GovernorCompatibilityBravo` allows the creation of proposals with a `signatures` array shorter than the `calldatas` array. This causes the additional elements of the latter to be ignored, and if the proposal succeeds the corresponding actions would eventually execute without any calldata. The `ProposalCreated` event correctly represents what will eventually execute, but the proposal parameters as queried through `getActions` appear to respect the original intended calldata. This issue has been patched in 4.8.3. As a workaround, ensure that all proposals that pass through governance have equal length `signatures` and `calldatas` parameters.", - "CVE-2023-30541": "OpenZeppelin Contracts is a library for secure smart contract development. A function in the implementation contract may be inaccessible if its selector clashes with one of the proxy's own selectors. Specifically, if the clashing function has a different signature with incompatible ABI encoding, the proxy could revert while attempting to decode the arguments from calldata. The probability of an accidental clash is negligible, but one could be caused deliberately and could cause a reduction in availability. The issue has been fixed in version 4.8.3. As a workaround if a function appears to be inaccessible for this reason, it may be possible to craft the calldata such that ABI decoding does not fail at the proxy and the function is properly proxied through.", - "CVE-2023-26488": "OpenZeppelin Contracts is a library for secure smart contract development. The ERC721Consecutive contract designed for minting NFTs in batches does not update balances when a batch has size 1 and consists of a single token. Subsequent transfers from the receiver of that token may overflow the balance as reported by `balanceOf`. The issue exclusively presents with batches of size 1. The issue has been patched in 4.8.2.", - "CVE-2023-23940": "OpenZeppelin Contracts for Cairo is a library for secure smart contract development written in Cairo for StarkNet, a decentralized ZK Rollup. `is_valid_eth_signature` is missing a call to `finalize_keccak` after calling `verify_eth_signature`. As a result, any contract using `is_valid_eth_signature` from the account library (such as the `EthAccount` preset) is vulnerable to a malicious sequencer. Specifically, the malicious sequencer would be able to bypass signature validation to impersonate an instance of these accounts. The issue has been patched in 0.6.1.", - "CVE-2022-46173": "Elrond-GO is a go implementation for the Elrond Network protocol. Versions prior to 1.3.50 are subject to a processing issue where nodes are affected when trying to process a cross-shard relayed transaction with a smart contract deploy transaction data. The problem was a bad correlation between the transaction caches and the processing component. If the above-mentioned transaction was sent with more gas than required, the smart contract result (SCR transaction) that should have returned the leftover gas, would have been wrongly added to a cache that the processing unit did not consider. The node stopped notarizing metachain blocks. The fix was actually to extend the SCR transaction search in all other caches if it wasn't found in the correct (expected) sharded-cache. There are no known workarounds at this time. This issue has been patched in version 1.3.50.", - "CVE-2022-39384": "OpenZeppelin Contracts is a library for secure smart contract development. Before version 4.4.1 but after 3.2.0, initializer functions that are invoked separate from contract creation (the most prominent example being minimal proxies) may be reentered if they make an untrusted non-view external call. Once an initializer has finished running it can never be re-executed. However, an exception put in place to support multiple inheritance made reentrancy possible in the scenario described above, breaking the expectation that there is a single execution. Note that upgradeable proxies are commonly initialized together with contract creation, where reentrancy is not feasible, so the impact of this issue is believed to be minor. This issue has been patched, please upgrade to version 4.4.1. As a workaround, avoid untrusted external calls during initialization.", - "CVE-2022-36061": "Elrond go is the go implementation for the Elrond Network protocol. In versions prior to 1.3.35, read only calls between contracts can generate smart contracts results. For example, if contract A calls in read only mode contract B and the called function will make changes upon the contract's B state, the state will be altered for contract B as if the call was not made in the read-only mode. This can lead to some effects not designed by the original smart contracts programmers. This issue was patched in version 1.3.35. There are no known workarounds.", - "CVE-2022-35961": "OpenZeppelin Contracts is a library for secure smart contract development. The functions `ECDSA.recover` and `ECDSA.tryRecover` are vulnerable to a kind of signature malleability due to accepting EIP-2098 compact signatures in addition to the traditional 65 byte signature format. This is only an issue for the functions that take a single `bytes` argument, and not the functions that take `r, v, s` or `r, vs` as separate arguments. The potentially affected contracts are those that implement signature reuse or replay protection by marking the signature itself as used rather than the signed message or a nonce included in it. A user may take a signature that has already been submitted, submit it again in a different form, and bypass this protection. The issue has been patched in 4.7.3.", - "CVE-2022-35916": "OpenZeppelin Contracts is a library for secure smart contract development. Contracts using the cross chain utilities for Arbitrum L2, `CrossChainEnabledArbitrumL2` or `LibArbitrumL2`, will classify direct interactions of externally owned accounts (EOAs) as cross chain calls, even though they are not started on L1. This issue has been patched in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-35915": "OpenZeppelin Contracts is a library for secure smart contract development. The target contract of an EIP-165 `supportsInterface` query can cause unbounded gas consumption by returning a lot of data, while it is generally assumed that this operation has a bounded cost. The issue has been fixed in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-31198": "OpenZeppelin Contracts is a library for secure smart contract development. This issue concerns instances of Governor that use the module `GovernorVotesQuorumFraction`, a mechanism that determines quorum requirements as a percentage of the voting token's total supply. In affected instances, when a proposal is passed to lower the quorum requirements, past proposals may become executable if they had been defeated only due to lack of quorum, and the number of votes it received meets the new quorum requirement. Analysis of instances on chain found only one proposal that met this condition, and we are actively monitoring for new occurrences of this particular issue. This issue has been patched in v4.7.2. Users are advised to upgrade. Users unable to upgrade should consider avoiding lowering quorum requirements if a past proposal was defeated for lack of quorum.", - "CVE-2022-31172": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.1.0 until 4.7.1 are vulnerable to the SignatureChecker reverting. `SignatureChecker.isValidSignatureNow` is not expected to revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-1271 as expected. The contracts that may be affected are those that use `SignatureChecker` to check the validity of a signature and handle invalid signatures in a way other than reverting. The issue was patched in version 4.7.1.", - "CVE-2022-31170": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.0.0 until 4.7.1 are vulnerable to ERC165Checker reverting instead of returning `false`. `ERC165Checker.supportsInterface` is designed to always successfully return a boolean, and under no circumstance revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-165 as expected, specifically if it returns a value other than 0 or 1. The contracts that may be affected are those that use `ERC165Checker` to check for support for an interface and then handle the lack of support in a way other than reverting. The issue was patched in version 4.7.1.", - "CVE-2022-29255": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions prior to 0.3.4 when a calling an external contract with no return value, the contract address (including side effects) could be evaluated twice. This may result in incorrect outcomes for contracts. This issue has been addressed in v0.3.4.", - "CVE-2022-27134": "EOSIO batdappboomx v327c04cf has an Access-control vulnerability in the `transfer` function of the smart contract which allows remote attackers to win the cryptocurrency without paying ticket fee via the `std::string memo` parameter.", - "CVE-2022-24845": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In affected versions, the return of `<iface>.returns_int128()` is not validated to fall within the bounds of `int128`. This issue can result in a misinterpretation of the integer value and lead to incorrect behavior. As of v0.3.0, `<iface>.returns_int128()` is validated in simple expressions, but not complex expressions. Users are advised to upgrade. There is no known workaround for this issue.", - "CVE-2022-24788": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. Versions of vyper prior to 0.3.2 suffer from a potential buffer overrun. Importing a function from a JSON interface which returns `bytes` generates bytecode which does not clamp bytes length, potentially resulting in a buffer overrun. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-24787": "Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. In version 0.3.1 and prior, bytestrings can have dirty bytes in them, resulting in the word-for-word comparisons giving incorrect results. Even without dirty nonzero bytes, two bytestrings can compare to equal if one ends with `\"\\x00\"` because there is no comparison of the length. A patch is available and expected to be part of the 0.3.2 release. There are currently no known workarounds.", - "CVE-2021-41264": "OpenZeppelin Contracts is a library for smart contract development. In affected versions upgradeable contracts using `UUPSUpgradeable` may be vulnerable to an attack affecting uninitialized implementation contracts. A fix is included in version 4.3.2 of `@openzeppelin/contracts` and `@openzeppelin/contracts-upgradeable`. For users unable to upgrade; initialize implementation contracts using `UUPSUpgradeable` by invoking the initializer function (usually called `initialize`). An example is provided [in the forum](https://forum.openzeppelin.com/t/security-advisory-initialize-uups-implementation-contracts/15301).", - "CVE-2021-41122": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions external functions did not properly validate the bounds of decimal arguments. The can lead to logic errors. This issue has been resolved in version 0.3.0.", - "CVE-2021-41121": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions when performing a function call inside a literal struct, there is a memory corruption issue that occurs because of an incorrect pointer to the the top of the stack. This issue has been resolved in version 0.3.0.", - "CVE-2021-39168": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", - "CVE-2021-39167": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", - "CVE-2021-34273": "A security flaw in the 'owned' function of a smart contract implementation for BTC2X (B2X), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", - "CVE-2021-34272": "A security flaw in the 'owned' function of a smart contract implementation for RobotCoin (RBTC), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", - "CVE-2021-34270": "An integer overflow in the mintToken function of a smart contract implementation for Doftcoin Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses.", - "CVE-2021-33403": "An integer overflow in the transfer function of a smart contract implementation for Lancer Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses between two large accounts during a transaction.", - "CVE-2021-3006": "The breed function in the smart contract implementation for Farm in Seal Finance (Seal), an Ethereum token, lacks access control and thus allows price manipulation, as exploited in the wild in December 2020 and January 2021.", - "CVE-2021-3004": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", - "CVE-2020-35962": "The sellTokenForLRC function in the vault protocol in the smart contract implementation for Loopring (LRC), an Ethereum token, lacks access control for fee swapping and thus allows price manipulation.", - "CVE-2020-17753": "An issue was discovered in function addMeByRC in the smart contract implementation for RC, an Ethereum token, allows attackers to transfer an arbitrary amount of tokens to an arbitrary address.", - "CVE-2020-17752": "Integer overflow vulnerability in payable function of a smart contract implementation for an Ethereum token, as demonstrated by the smart contract implemented at address 0xB49E984A83d7A638E7F2889fc8328952BA951AbE, an implementation for MillionCoin (MON).", - "CVE-2019-15080": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", - "CVE-2019-15079": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", - "CVE-2019-15078": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", - "CVE-2018-19834": "The quaker function of a smart contract implementation for BOMBBA (BOMB), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19833": "The owned function of a smart contract implementation for DDQ, an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19832": "The NETM() function of a smart contract implementation for NewIntelTechMedia (NETM), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19831": "The ToOwner() function of a smart contract implementation for Cryptbond Network (CBN), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19830": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", - "CVE-2018-18425": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", - "CVE-2018-17987": "The determineWinner function of a smart contract implementation for HashHeroes Tiles, an Ethereum game, uses a certain blockhash value in an attempt to generate a random number for the case where NUM_TILES equals the number of people who purchased a tile, which allows an attacker to control the awarding of the prize by being the last person to purchase a tile.", - "CVE-2018-17968": "A gambling smart contract implementation for RuletkaIo, an Ethereum gambling game, generates a random value that is predictable by an external contract call. The developer wrote a random() function that uses a block timestamp and block hash from the Ethereum blockchain. This can be predicted by writing the same random function code in an exploit contract to determine the deadSeat value.", - "CVE-2018-17882": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", - "CVE-2018-17877": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-17111": "The onlyOwner modifier of a smart contract implementation for Coinlancer (CL), an Ethereum ERC20 token, has a potential access control vulnerability. All contract users can access functions that use this onlyOwner modifier, because the comparison between msg.sender and owner is incorrect.", - "CVE-2018-17071": "The fallback function of a simple lottery smart contract implementation for Lucky9io, an Ethereum gambling game, generates a random value with the publicly readable variable entry_number. This variable is private, yet it is readable by eth.getStorageAt function. Also, attackers can purchase a ticket at a low price by directly calling the fallback function with small msg.value, because the developer set the currency unit incorrectly. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-17050": "The mintToken function of a smart contract implementation for PolyAi (AI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-15552": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-14715": "The endCoinFlip function and throwSlammer function of the smart contract implementations for Cryptogs, an Ethereum game, generate random numbers with an old block's hash. Therefore, attackers can predict the random number and always win the game.", - "CVE-2018-14576": "The mintTokens function of a smart contract implementation for SunContract, an Ethereum token, has an integer overflow via the _amount variable.", - "CVE-2018-14089": "An issue was discovered in a smart contract implementation for Virgo_ZodiacToken, an Ethereum token. In this contract, 'bool sufficientAllowance = allowance <= _value' will cause an arbitrary transfer in the function transferFrom because '<=' is used instead of '>=' (which was intended). An attacker can transfer from any address to his address, and does not need to meet the 'allowance > value' condition.", - "CVE-2018-14088": "An issue was discovered in a smart contract implementation for STeX White List (STE(WL)), an Ethereum token. The contract has an integer overflow. If the owner sets the value of amount to a large number then the \"amount * 1000000000000000\" will cause an integer overflow in withdrawToFounders().", - "CVE-2018-14087": "An issue was discovered in a smart contract implementation for EUC (EUC), an Ethereum token. The contract has an integer overflow. If the owner sets the value of buyPrice to a large number in setPrices() then the \"msg.value * buyPrice\" will cause an integer overflow in the fallback function.", - "CVE-2018-14086": "An issue was discovered in a smart contract implementation for SingaporeCoinOrigin (SCO), an Ethereum token. The contract has an integer overflow. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", - "CVE-2018-14085": "An issue was discovered in a smart contract implementation for UserWallet 0x0a7bca9FB7AfF26c6ED8029BB6f0F5D291587c42, an Ethereum token. First, suppose that the owner adds the evil contract address to his sweepers. The evil contract looks like this: contract Exploit { uint public start; function sweep(address _token, uint _amount) returns (bool) { start = 0x123456789; return true;} }. Then, when one calls the function sweep() in the UserWallet contract, it will change the sweeperList to 0X123456789.", - "CVE-2018-14084": "An issue was discovered in a smart contract implementation for MKCB, an Ethereum token. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", - "CVE-2018-14063": "The increaseApproval function of a smart contract implementation for Tracto (TRCT), an Ethereum ERC20 token, has an integer overflow.", - "CVE-2018-14006": "An integer overflow vulnerability exists in the function multipleTransfer of Neo Genesis Token (NGT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14005": "An integer overflow vulnerability exists in the function transferAny of Malaysia coins (Xmc), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14004": "An integer overflow vulnerability exists in the function transfer_tokens_after_ICO of GlobeCoin (GLB), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14003": "An integer overflow vulnerability exists in the function batchTransfer of WeMediaChain (WMC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14002": "An integer overflow vulnerability exists in the function distribute of MP3 Coin (MP3), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14001": "An integer overflow vulnerability exists in the function batchTransfer of SHARKTECH (SKT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-13877": "The doPayouts() function of the smart contract implementation for MegaCryptoPolis, an Ethereum game, has a Denial of Service vulnerability. If a smart contract that has a fallback function always causing exceptions buys a land, users cannot buy lands near that contract's land, because those purchase attempts will not be completed unless the doPayouts() function successfully sends Ether to certain neighbors.", - "CVE-2018-13836": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-13783": "The mintToken function of a smart contract implementation for JiucaiToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13782": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13781": "The mintToken function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13780": "The mintToken function of a smart contract implementation for ESH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13779": "The mintToken function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13778": "The mintToken function of a smart contract implementation for CGCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13777": "The mintToken function of a smart contract implementation for RRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13776": "The mintToken function of a smart contract implementation for AppleToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13775": "The mintToken function of a smart contract implementation for RCKT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13774": "The mintToken function of a smart contract implementation for Bitstarti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13773": "The mintToken function of a smart contract implementation for Enterprise Token Ecosystem (ETE) (Contract Name: NetkillerToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13772": "The mintToken function of a smart contract implementation for TheFlashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13771": "The mintToken function of a smart contract implementation for ExacoreContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13770": "The mintToken function of a smart contract implementation for UltimateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13769": "The mintToken function of a smart contract implementation for JeansToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13768": "The mintToken function of a smart contract implementation for ZToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13767": "The mintToken function of a smart contract implementation for Cornerstone, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13766": "The mintToken function of a smart contract implementation for Easticoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13765": "The mintToken function of a smart contract implementation for LandCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13764": "The mintToken function of a smart contract implementation for BiquToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13763": "The mintToken function of a smart contract implementation for Ublasti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13762": "The mintToken function of a smart contract implementation for Yumerium, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13761": "The mintToken function of a smart contract implementation for NetkillerAdvancedTokenAirDrop, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13760": "The mintToken function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13759": "The mintToken function of a smart contract implementation for BIGCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13758": "The mintToken function of a smart contract implementation for LoliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13757": "The mintToken function of a smart contract implementation for Coinquer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13756": "The mintToken function of a smart contract implementation for CherryCoinFoundation, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13755": "The mintToken function of a smart contract implementation for OTAKUToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13754": "The mintToken function of a smart contract implementation for CryptosisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13753": "The mintToken function of a smart contract implementation for DeWeiSecurityServiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13752": "The mintToken function of a smart contract implementation for Thread, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13751": "The mintToken function of a smart contract implementation for JustWallet, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13750": "The mintToken function of a smart contract implementation for RichiumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13749": "The mintToken function of a smart contract implementation for FinalToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13748": "The mintToken function of a smart contract implementation for CarToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13747": "The mintToken function of a smart contract implementation for VanMinhCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13746": "The mintToken function of a smart contract implementation for kBit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13745": "The mintToken function of a smart contract implementation for STCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13744": "The mintToken function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13743": "The mintToken function of a smart contract implementation for SuperEnergy (SEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13742": "The mintToken function of a smart contract implementation for tickets (TKT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13741": "The mintToken function of a smart contract implementation for ABLGenesisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13740": "The mintToken function of a smart contract implementation for OneChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13739": "The mintToken function of a smart contract implementation for dopnetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13738": "The mintToken function of a smart contract implementation for PELOCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13737": "The mintToken function of a smart contract implementation for AnovaBace, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13736": "The mintToken function of a smart contract implementation for ELearningCoinERC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13735": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13734": "The mintToken function of a smart contract implementation for AZTToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13733": "The mintToken function of a smart contract implementation for ProjectJ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13732": "The mintToken function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13731": "The mintToken function of a smart contract implementation for TokenMACHU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13730": "The mintToken function of a smart contract implementation for HEY, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13729": "The mintToken function of a smart contract implementation for JPMD100B, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13728": "The mintToken function of a smart contract implementation for JixoCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13727": "The mintToken function of a smart contract implementation for Eastcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13726": "The mintToken function of a smart contract implementation for ISeeVoiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13725": "The mintToken function of a smart contract implementation for GlobalSuperGameToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13724": "The mint function of a smart contract implementation for HYIPCrowdsale1, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13723": "The mintToken function of a smart contract implementation for SERVVIZIOToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13722": "The mint function of a smart contract implementation for HYIPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13721": "The mintToken function of a smart contract implementation for GoMineWorld, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13720": "The mintToken function of a smart contract implementation for Antoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13719": "The mintToken function of a smart contract implementation for BiteduToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13718": "The mintToken function of a smart contract implementation for FuturXe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13717": "The mintToken function of a smart contract implementation for HormitechToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13716": "The mintToken function of a smart contract implementation for sexhdsolo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13715": "The mintToken function of a smart contract implementation for BpsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13714": "The mintToken function of a smart contract implementation for CM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13713": "The mintToken function of a smart contract implementation for Tradesman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13712": "The mintToken function of a smart contract implementation for PMET, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13711": "The mintToken function of a smart contract implementation for Databits, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13710": "The mintToken function of a smart contract implementation for Mjolnir, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13709": "The mintToken function of a smart contract implementation for Tube, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13708": "The mintToken function of a smart contract implementation for Order (ETH) (Contract Name: BuyToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13707": "The mintToken function of a smart contract implementation for YSS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13706": "The mintToken function of a smart contract implementation for IdeaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13705": "The mintToken function of a smart contract implementation for PMHToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13704": "The mintToken function of a smart contract implementation for eddToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13703": "The mintToken function of a smart contract implementation for CERB_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13702": "The mintToken function of a smart contract implementation for Essence, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13701": "The mintToken function of a smart contract implementation for KissMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13700": "The mintToken function of a smart contract implementation for IPMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13699": "The mintToken function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13698": "The mintTokens function of a smart contract implementation for Play2LivePromo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13697": "The mintToken function of a smart contract implementation for RobotBTC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13696": "The mintToken function of a smart contract implementation for RedTicket, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13695": "The mint function of a smart contract implementation for CTest7, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13694": "The mintToken function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13693": "The mintToken function of a smart contract implementation for GreenEnergyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13692": "The mintToken function of a smart contract implementation for MehdiTAZIToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13691": "The mintToken function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13690": "The mintToken function of a smart contract implementation for Instacocoa, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13689": "The mintToken function of a smart contract implementation for CJXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13688": "The mintToken function of a smart contract implementation for MallToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13687": "The mintToken function of a smart contract implementation for normikaivo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13686": "The mintToken function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13685": "The mintToken function of a smart contract implementation for Vornox (VRX) (Contract Name: VornoxCoinToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13684": "The mintToken function of a smart contract implementation for ZIP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13683": "The mintToken function of a smart contract implementation for exsulcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13682": "The mintToken function of a smart contract implementation for ViteMoneyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13681": "The mintToken function of a smart contract implementation for SOSCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13680": "The mintToken function of a smart contract implementation for LexitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13679": "The mintToken function of a smart contract implementation for ZPEcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13678": "The mintToken function of a smart contract implementation for Lottery, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13677": "The mintToken function of a smart contract implementation for Goochain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13676": "The mintToken function of a smart contract implementation for Orderbook Presale Token (OBP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13675": "The mintToken function of a smart contract implementation for YAMBYO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13674": "The mintToken function of a smart contract implementation for ComBillAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13673": "The mintToken function of a smart contract implementation for GoldTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13672": "The mintToken function of a smart contract implementation for OBTCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13671": "The mintToken function of a smart contract implementation for DinsteinCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13670": "The mintToken function of a smart contract implementation for GFCB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13669": "The mintToken function of a smart contract implementation for NCU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13668": "The mintToken function of a smart contract implementation for BTPCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13667": "The mintToken function of a smart contract implementation for UTBTokenTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13666": "The mintToken function of a smart contract implementation for EristicaICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13665": "The mintToken function of a smart contract implementation for BCaaS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13664": "The mintToken function of a smart contract implementation for CWS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13663": "The mintToken function of a smart contract implementation for BSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13662": "The mintToken function of a smart contract implementation for WorldOpctionChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13661": "The mintToken function of a smart contract implementation for APP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13660": "The mint function of a smart contract implementation for BillionRewardsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13659": "The mintToken function of a smart contract implementation for BrianCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13658": "The mintToken function of a smart contract implementation for TheGoDgital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13657": "The mintToken function of a smart contract implementation for Rice, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13656": "The mintToken function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13655": "The mintToken function of a smart contract implementation for GFC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13654": "The mintToken function of a smart contract implementation for ESTSToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13653": "The mintToken function of a smart contract implementation for ipshoots, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13652": "The mintToken function of a smart contract implementation for TheGoDigital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13651": "The mintToken function of a smart contract implementation for MicoinNetworkToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13650": "The mintToken function of a smart contract implementation for BitmaxerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13649": "The mintToken function of a smart contract implementation for Deploy, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13648": "The mintToken function of a smart contract implementation for BGC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13647": "The mintToken function of a smart contract implementation for TrueGoldCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13646": "The mintToken function of a smart contract implementation for Datiac, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13645": "The mintToken function of a smart contract implementation for Fiocoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13644": "The mintToken function of a smart contract implementation for RoyalClassicCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13643": "The mintToken function of a smart contract implementation for GCRTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13642": "The mintToken function of a smart contract implementation for SECoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13641": "The mintToken function of a smart contract implementation for MVGcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13640": "The mintToken function of a smart contract implementation for EthereumSmart, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13639": "The mintToken function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13638": "The mintToken function of a smart contract implementation for Bitpark, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13637": "The mintToken function of a smart contract implementation for CikkaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13636": "The mintToken function of a smart contract implementation for TurdCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13635": "The mintToken function of a smart contract implementation for HBCM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13634": "The mintToken function of a smart contract implementation for MediaCubeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13633": "The mintToken function of a smart contract implementation for Martcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13632": "The mintToken function of a smart contract implementation for NEXPARA, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13631": "The mintToken function of a smart contract implementation for doccoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13630": "The mintToken function of a smart contract implementation for DoccoinPreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13629": "The mintToken function of a smart contract implementation for CrimsonShilling, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13628": "The mintToken function of a smart contract implementation for MomentumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13627": "The mintToken function of a smart contract implementation for MyOffer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13626": "The mintToken function of a smart contract implementation for SemainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13625": "The mintlvlToken function of a smart contract implementation for Krown, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13624": "The mintToken function of a smart contract implementation for WXSLToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13623": "The mintToken function of a smart contract implementation for AirdropperCryptics, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13622": "The mintToken function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13621": "The mintToken function of a smart contract implementation for SoundTribeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13620": "The mintToken function of a smart contract implementation for TripCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13619": "The mintToken function of a smart contract implementation for MicoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13618": "The mintToken function of a smart contract implementation for VICETOKEN_ICO_IS_A_SCAM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13617": "The mintToken function of a smart contract implementation for CAPTOZ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13616": "The mintToken function of a smart contract implementation for IOCT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13615": "The mintToken function of a smart contract implementation for MJCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13614": "The mintToken function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13613": "The mintToken function of a smart contract implementation for CON0217, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13612": "The mintToken function of a smart contract implementation for Robincoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13611": "The mintToken function of a smart contract implementation for CDcurrency, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13610": "The mintToken function of a smart contract implementation for MedicayunLink, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13609": "The mintToken function of a smart contract implementation for CSAToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13608": "The mintToken function of a smart contract implementation for archercoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13607": "The mintToken function of a smart contract implementation for ResidualShare, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13606": "The mintToken function of a smart contract implementation for ARChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13605": "The mintToken function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13604": "The mintToken function of a smart contract implementation for wellieat, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13603": "The mintToken function of a smart contract implementation for Briant2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13602": "The mint function of a smart contract implementation for MiningToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13601": "The mintToken function of a smart contract implementation for GalacticX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13600": "The mintToken function of a smart contract implementation for AMToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13599": "The mintToken function of a smart contract implementation for ResidualValue, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13598": "The mintToken function of a smart contract implementation for SendMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13597": "The mintToken function of a smart contract implementation for testcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13596": "The mintToken function of a smart contract implementation for TESTAhihi, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13595": "The mintToken function of a smart contract implementation for BitStore, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13594": "The mintToken function of a smart contract implementation for CardFactory, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13593": "The mintToken function of a smart contract implementation for CardToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13592": "The mintToken function of a smart contract implementation for RajTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13591": "The mintToken function of a smart contract implementation for KAPcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13590": "The mintToken function of a smart contract implementation for SIPCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13589": "The mintToken function of a smart contract implementation for MooAdvToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13588": "The mintToken function of a smart contract implementation for Code47 (C47), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13587": "The mintToken function of a smart contract implementation for DECToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13586": "The mintToken function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13585": "The mintToken function of a smart contract implementation for CHERRYCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13584": "The mintToken function of a smart contract implementation for yasudem, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13583": "The mintToken function of a smart contract implementation for Shmoo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13582": "The mintToken function of a smart contract implementation for My2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13581": "The mintToken function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13580": "The mintToken function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13579": "The mintToken function of a smart contract implementation for ForeverCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13578": "The mintToken function of a smart contract implementation for GalaxyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13577": "The mintToken function of a smart contract implementation for ShitCoin (SHITC) (Contract Name: AdvancedShit), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13576": "The mintToken function of a smart contract implementation for Escut (ESCT) (Contract Name: JuntsPerCreixer), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13575": "The mintToken function of a smart contract implementation for YESToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13574": "The mintToken function of a smart contract implementation for DataShieldCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13573": "The mintToken function of a smart contract implementation for TripPay, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13572": "The mintToken function of a smart contract implementation for PGM_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13571": "The mintToken function of a smart contract implementation for GoramCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13570": "The mint function of a smart contract implementation for kkTestCoin1 (KTC1), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13569": "The mintToken function of a smart contract implementation for HitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13568": "The mintToken function of a smart contract implementation for MktCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13567": "The mintToken function of a smart contract implementation for SDR, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13566": "The mintToken function of a smart contract implementation for RETNToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13565": "The mintToken function of a smart contract implementation for Co2Bit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13564": "The mintToken function of a smart contract implementation for GATcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13563": "The mintToken function of a smart contract implementation for UPayToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13562": "The mintToken function of a smart contract implementation for BMVCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13561": "The mintToken function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13560": "The mintToken function of a smart contract implementation for KelvinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13559": "The mintToken function of a smart contract implementation for UTCT, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13558": "The mintToken function of a smart contract implementation for rhovit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13557": "The mintToken function of a smart contract implementation for Trabet_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13556": "The mintToken function of a smart contract implementation for COSMOTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13555": "The mintToken function of a smart contract implementation for JaxBox, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13554": "The mintToken function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13553": "The mintToken function of a smart contract implementation for Micro BTC (MBTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13552": "The mintToken function of a smart contract implementation for Trabet_Coin_PreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13551": "The mintToken function of a smart contract implementation for Bgamecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13550": "The mintToken function of a smart contract implementation for Coquinho Coin (CQNC) (Contract Name: CoquinhoERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13549": "The mintToken function of a smart contract implementation for NeuroToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13548": "The mintToken function of a smart contract implementation for Mimicoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13547": "The mintToken function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13546": "The mintToken function of a smart contract implementation for CCASH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13545": "The mintToken function of a smart contract implementation for HashShield, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13544": "The mintToken function of a smart contract implementation for Numisma, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13543": "The mintToken function of a smart contract implementation for GemstoneToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13542": "The mintToken function of a smart contract implementation for ZIBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13541": "The mintToken function of a smart contract implementation for CryptoLeu, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13540": "The mintToken function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13539": "The mintToken function of a smart contract implementation for Bcxss, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13538": "The mintToken function of a smart contract implementation for SIPCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13537": "The mintToken function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13536": "The mintToken function of a smart contract implementation for ERC20_ICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13535": "The mintToken function of a smart contract implementation for PACCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13534": "The mintToken function of a smart contract implementation for SpeedCashLite (SCSL), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13533": "The mintToken function of a smart contract implementation for ALUXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13532": "The mintToken function of a smart contract implementation for Mindexcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13531": "The mintToken function of a smart contract implementation for MaxHouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13530": "The mintToken function of a smart contract implementation for HunterCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13529": "The mintToken function of a smart contract implementation for BetterThanAdrien, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13528": "The mintToken function of a smart contract implementation for DhaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13527": "The mintToken function of a smart contract implementation for ElevateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13526": "The mintToken function of a smart contract implementation for WangWangToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13525": "The mintToken function of a smart contract implementation for Flow, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13524": "The mintToken function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13523": "The mintToken function of a smart contract implementation for SmartPayment, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13522": "The mintToken function of a smart contract implementation for EXGROUP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13521": "The mintToken function of a smart contract implementation for PinkyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13520": "The mintToken function of a smart contract implementation for TopscoinAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13519": "The mint function of a smart contract implementation for DigitalCloudToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13518": "The mintToken function of a smart contract implementation for TCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13517": "The mintToken function of a smart contract implementation for C3 Token (C3), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13516": "The mintToken function of a smart contract implementation for Super Cool Awesome Money (SCAM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13515": "The mintToken function of a smart contract implementation for aman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13514": "The mintToken function of a smart contract implementation for esportz, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13513": "The mintToken function of a smart contract implementation for Ubiou, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13512": "The mintToken function of a smart contract implementation for SmartHomeCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13511": "The mintToken function of a smart contract implementation for CorelliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13510": "The mintToken function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13509": "The mintToken function of a smart contract implementation for IamRich, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13508": "The mintToken function of a smart contract implementation for VITToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13507": "The mintToken function of a smart contract implementation for SLCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13506": "The mintToken function of a smart contract implementation for SDR22, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13505": "The mintToken function of a smart contract implementation for ecogreenhouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13504": "The mintToken function of a smart contract implementation for MMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13503": "The mintToken function of a smart contract implementation for South Park Token Token (SPTKN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13502": "The mintToken function of a smart contract implementation for HeliumNetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13501": "The mintToken function of a smart contract implementation for HRWtoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13500": "The mintToken function of a smart contract implementation for MSXAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13499": "The mintToken function of a smart contract implementation for Crowdsale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13498": "The mintToken function of a smart contract implementation for KAPAYcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13497": "The mintToken function of a smart contract implementation for COBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13496": "The mintToken function of a smart contract implementation for RajTestICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13495": "The mintToken function of a smart contract implementation for KMCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13494": "The mintToken function of a smart contract implementation for SusanTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13493": "The mintToken function of a smart contract implementation for DaddyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13492": "The mintToken function of a smart contract implementation for naga, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13491": "The mintToken function of a smart contract implementation for Carrot, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13490": "The mintToken function of a smart contract implementation for FILM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13489": "The mintToken function of a smart contract implementation for OllisCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13488": "The mintToken function of a smart contract implementation for Crypto Alley Shares (CAST), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13487": "The mintToken function of a smart contract implementation for PlatoToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13486": "The mintToken function of a smart contract implementation for HELP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13485": "The mintToken function of a smart contract implementation for BitcoinAgileToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13484": "The mintToken function of a smart contract implementation for CBRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13483": "The mintToken function of a smart contract implementation for mkethToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13482": "The mintToken function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13481": "The mintToken function of a smart contract implementation for TRIUM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13480": "The mintToken function of a smart contract implementation for QRG, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13479": "The mintToken function of a smart contract implementation for SlidebitsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13478": "The mintToken function of a smart contract implementation for DMPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13477": "The mintToken function of a smart contract implementation for CTESale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13476": "The mintToken function of a smart contract implementation for PhilCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13475": "The mintToken function of a smart contract implementation for VSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13474": "The mintToken function of a smart contract implementation for FansChainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13473": "The mintToken function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13472": "The mint function of a smart contract implementation for CloutToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13471": "The mintToken function of a smart contract implementation for BeyondCashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13470": "The mintToken function of a smart contract implementation for BuyerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13469": "The mintToken function of a smart contract implementation for IcoContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13468": "The mintToken function of a smart contract implementation for Cavecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13467": "The mintToken function of a smart contract implementation for EpiphanyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13466": "The mintToken function of a smart contract implementation for Crystals, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13465": "The mintToken function of a smart contract implementation for PaulyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13464": "The mintToken function of a smart contract implementation for t_swap, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13463": "The mintToken function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13462": "The mintToken function of a smart contract implementation for MoonToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13328": "The transfer, transferFrom, and mint functions of a smart contract implementation for PFGc, an Ethereum token, have an integer overflow.", - "CVE-2018-13327": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for ChuCunLingAIGO (CCLAG), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13326": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Bittelux (BTX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13325": "The _sell function of a smart contract implementation for GROWCHAIN (GROW), an Ethereum token, has an integer overflow.", - "CVE-2018-13233": "The sell function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13232": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13231": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13230": "The sell function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13229": "The sell function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13228": "The sell function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13227": "The sell function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13226": "The sell function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13225": "The sell function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13224": "The sell function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13223": "The sell function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13222": "The sell function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13221": "The sell function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13220": "The sell function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13219": "The sell function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13218": "The sell function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13217": "The sell function of a smart contract implementation for CoinToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13216": "The sell function of a smart contract implementation for GreenMed (GRMD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13215": "The sell function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13214": "The sell function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13213": "The sell function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13212": "The sell function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13211": "The sell function of a smart contract implementation for MyToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13210": "The sell function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13209": "The sell function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13208": "The sell function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13207": "The sell function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13206": "The sell function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13205": "The sell function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13204": "The sell function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13203": "The sellBuyerTokens function of a smart contract implementation for SwapToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13202": "The sell function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13201": "The sell function of a smart contract implementation for TiTok - Ticket Token (Contract Name: MyAdvancedToken7), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13200": "The sell function of a smart contract implementation for DateMe (DMX) (Contract Name: ProgressiveToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13199": "The sell function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13198": "The sell function of a smart contract implementation for STeX Exchange ICO (STE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13197": "The sell function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13196": "The sell function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13195": "The mintToken function of a smart contract implementation for Cranoo (CRN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13194": "The mintToken function of a smart contract implementation for TongTong Coin (TTCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13193": "The mintToken function of a smart contract implementation for hentaisolo (HAO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13192": "The mintToken function of a smart contract implementation for Jobscoin (JOB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13191": "The mintToken function of a smart contract implementation for Super Carbon Coin (SCC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13190": "The mintToken function of a smart contract implementation for DVChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13189": "The mint function of a smart contract implementation for Unolabo (UNLB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13188": "The mintToken function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13187": "The mintToken function of a smart contract implementation for CIBN Live Token (CIBN LIVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13186": "The mintToken function of a smart contract implementation for MMTCoin (MMT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13185": "The mintToken function of a smart contract implementation for appcoins (APPC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13184": "The mintToken function of a smart contract implementation for TravelZedi Token (ZEDI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13183": "The mintToken function of a smart contract implementation for JWC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13182": "The mintToken function of a smart contract implementation for loncoin (LON), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13181": "The mintToken function of a smart contract implementation for Troo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13180": "The mintToken function of a smart contract implementation for IMM Coin (IMC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13179": "The mintToken function of a smart contract implementation for Air-Contact Token (AIR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13178": "The mintToken function of a smart contract implementation for ECToints (ECT) (Contract Name: ECPoints), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13177": "The mintToken function of a smart contract implementation for MiningRigRentals Token (MRR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13176": "The mintToken function of a smart contract implementation for Trust Zen Token (ZEN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13175": "The mintToken function of a smart contract implementation for AIChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13174": "The mintToken function of a smart contract implementation for CryptoABS (ABS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13173": "The mintToken function of a smart contract implementation for EliteShipperToken (ESHIP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13172": "The mintToken function of a smart contract implementation for bzxcoin (BZX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13171": "The mintToken function of a smart contract implementation for LadaToken (LDT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13170": "The mintToken function of a smart contract implementation for Snoqualmie Coin (SNOW), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13169": "The mintToken function of a smart contract implementation for Ethereum Cash Pro (ECP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13168": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO) (Contract Name: NetkillerBatchToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13167": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13166": "The mintToken function of a smart contract implementation for AthletiCoin (ATHA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13165": "The mintToken function of a smart contract implementation for JustDCoin (JustD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13164": "The mintToken function of a smart contract implementation for EPPCOIN (EPP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13163": "The mintToken function of a smart contract implementation for Ethernet Cash (ENC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13162": "The mintToken function of a smart contract implementation for ALEX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13161": "The mintToken function of a smart contract implementation for MultiGames (MLT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13160": "The mintToken function of a smart contract implementation for etktokens (ETK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13159": "The mintToken function of a smart contract implementation for bankcoin (BNK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13158": "The mintToken function of a smart contract implementation for AssetToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13157": "The mintToken function of a smart contract implementation for CryptonitexCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13156": "The mintToken function of a smart contract implementation for bonusToken (BNS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13155": "The mintToken function of a smart contract implementation for GEMCHAIN (GEM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13146": "The mintToken, buy, and sell functions of a smart contract implementation for LEF, an Ethereum token, have an integer overflow.", - "CVE-2018-13145": "The mintToken function of a smart contract implementation for JavaSwapTest (JST), an Ethereum token, has an integer overflow.", - "CVE-2018-13144": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Pandora (PDX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13132": "Spadeico is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13131": "SpadePreSale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13130": "Bitotal (TFUND) is a smart contract running on Ethereum. The mintTokens function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13129": "SP8DE Token (SPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13128": "Etherty Token (ETY) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13127": "SP8DE PreSale Token (DSPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13126": "MoxyOnePresale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13113": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Easy Trading Token (ETT), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13092": "The mintToken function of a smart contract implementation for Reimburse Token (REIM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13091": "The mintToken function of a smart contract implementation for sumocoin (SUMO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13090": "The mintToken function of a smart contract implementation for YiTongCoin (YTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13089": "The mintToken function of a smart contract implementation for Universal Coin (UCOIN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13088": "The mintToken function of a smart contract implementation for Futures Pease (FP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13087": "The mintToken function of a smart contract implementation for Coinstar (CSTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13086": "The mintToken function of a smart contract implementation for IADOWR Coin (IAD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13085": "The mintToken function of a smart contract implementation for FreeCoin (FREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13084": "The mintToken function of a smart contract implementation for Good Time Coin (GTY), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13083": "The mintToken function of a smart contract implementation for Plaza Token (PLAZA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13082": "The mintToken function of a smart contract implementation for MODI Token (MODI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13081": "The mintToken function of a smart contract implementation for GZS Token (GZS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13080": "The mintToken function of a smart contract implementation for Goutex (GTX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13079": "The mintToken function of a smart contract implementation for GoodTo (GTO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13078": "The mintToken function of a smart contract implementation for Jitech (JTH), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13077": "The mintToken function of a smart contract implementation for CTB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13076": "The mintToken function of a smart contract implementation for Betcash (BC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13075": "The mintToken function of a smart contract implementation for Carbon Exchange Coin Token (CEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13074": "The mintToken function of a smart contract implementation for FIBToken (FIB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13073": "The mintToken function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13072": "The mintToken function of a smart contract implementation for Coffeecoin (COFFEE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13071": "The mintToken function of a smart contract implementation for CCindex10 (T10), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13070": "The mintToken function of a smart contract implementation for EncryptedToken (ECC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13069": "The mintToken function of a smart contract implementation for DYchain (DYC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13068": "The mintToken function of a smart contract implementation for AzurionToken (AZU), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13041": "The mint function of a smart contract implementation for Link Platform (LNK), an Ethereum ERC20 token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-12975": "The random() function of the smart contract implementation for CryptoSaga, an Ethereum game, generates a random value with publicly readable variables such as timestamp, the current block's blockhash, and a private variable (which can be read with a getStorageAt call). Therefore, attackers can precompute the random number and manipulate the game (e.g., get powerful characters or get critical damages).", - "CVE-2018-12959": "The approveAndCall function of a smart contract implementation for Aditus (ADI), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all contract balances into their account).", - "CVE-2018-12885": "The randMod() function of the smart contract implementation for MyCryptoChamp, an Ethereum game, generates a random value with publicly readable variables such as the current block information and a private variable, (which can be read with a getStorageAt call). Therefore, attackers can get powerful champs/items and get rewards.", - "CVE-2018-12703": "The approveAndCallcode function of a smart contract implementation for Block 18 (18T), an tradable Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", - "CVE-2018-12702": "The approveAndCallcode function of a smart contract implementation for Globalvillage ecosystem (GVE), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", - "CVE-2018-12511": "In the mintToken function of a smart contract implementation for Substratum (SUB), an Ethereum ERC20 token, the administrator can control mintedAmount, leverage an integer overflow, and modify a user account's balance arbitrarily.", - "CVE-2018-12454": "The _addguess function of a simplelottery smart contract implementation for 1000 Guess, an Ethereum gambling game, generates a random value with publicly readable variables such as the current block information and a private variable (which can be read with a getStorageAt call). Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-12230": "An wrong logical check identified in the transferFrom function of a smart contract implementation for RemiCoin (RMC), an Ethereum ERC20 token, allows the attacker to steal tokens or conduct resultant integer underflow attacks.", - "CVE-2018-12084": "The mintToken function of a smart contract implementation for BitAsean (BAS), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12083": "The mintToken function of a smart contract implementation for GOAL Bonanza (GOAL), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12082": "The mintToken function of a smart contract implementation for Fujinto (NTO), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12081": "The mintToken function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12080": "The mintToken function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12079": "The mintToken function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12078": "The mintToken function of a smart contract implementation for PolyAI (AI), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12070": "The sell function of a smart contract implementation for SEC, a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12068": "The sell function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12067": "The sell function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12063": "The sell function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12062": "The sell function of a smart contract implementation for SwftCoin (SWFTC), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12056": "The maxRandom function of a smart contract implementation for All For One, an Ethereum gambling game, generates a random value with publicly readable variables because the _seed value can be retrieved with a getStorageAt call. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-12025": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", - "CVE-2018-11687": "An integer overflow in the distributeBTR function of a smart contract implementation for Bitcoin Red (BTCR), an Ethereum ERC20 token, allows the owner to accomplish an unauthorized increase of digital assets by providing a large address[] array, as exploited in the wild in May 2018, aka the \"ownerUnderflow\" issue.", - "CVE-2018-11561": "An integer overflow in the unprotected distributeToken function of a smart contract implementation for EETHER (EETHER), an Ethereum ERC20 token, will lead to an unauthorized increase of an attacker's digital assets.", - "CVE-2018-11446": "The buy function of a smart contract implementation for Gold Reward (GRX), an Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the buyer because of overflow of the multiplication of its argument amount and a manipulable variable buyPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-11429": "ATLANT (ATL) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-11411": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect.", - "CVE-2018-11335": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-11329": "The DrugDealer function of a smart contract implementation for Ether Cartel, an Ethereum game, allows attackers to take over the contract's ownership, aka ceoAnyone. After that, all the digital assets (including Ether balance and tokens) might be manipulated by the attackers, as exploited in the wild in May 2018.", - "CVE-2018-11239": "An integer overflow in the _transfer function of a smart contract implementation for Hexagon (HXG), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets by providing a _to argument in conjunction with a large _value argument, as exploited in the wild in May 2018, aka the \"burnOverflow\" issue.", - "CVE-2018-10973": "An integer overflow in the transferMulti function of a smart contract implementation for KoreaShow, an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _value parameters.", - "CVE-2018-10944": "The request_dividend function of a smart contract implementation for ROC (aka Rasputin Online Coin), an Ethereum ERC20 token, allows attackers to steal all of the contract's Ether.", - "CVE-2018-10769": "The transferProxy and approveProxy functions of a smart contract implementation for SmartMesh (SMT), an Ethereum ERC20 token, allow attackers to accomplish an unauthorized transfer of digital assets because replay attacks can occur with the same-named functions (with the same signatures) in other tokens: First (FST), GG Token (GG), M2C Mesh Network (MTC), M2C Mesh Network (mesh), and UG Token (UGT).", - "CVE-2018-10706": "An integer overflow in the transferMulti function of a smart contract implementation for Social Chain (SCA), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets, aka the \"multiOverflow\" issue.", - "CVE-2018-10705": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", - "CVE-2018-10666": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", - "CVE-2018-10468": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue.", - "CVE-2018-10376": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", - "CVE-2018-10299": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", - "CVE-2017-14457": "An exploitable information leak/denial of service vulnerability exists in the libevm (Ethereum Virtual Machine) `create2` opcode handler of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read leading to memory disclosure or denial of service. An attacker can create/send malicious a smart contract to trigger this vulnerability.", - "CVE-2017-14451": "An exploitable out-of-bounds read vulnerability exists in libevm (Ethereum Virtual Machine) of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read which can subsequently trigger an out-of-bounds write resulting in remote code execution. An attacker can create/send malicious smart contract to trigger this vulnerability." -} \ No newline at end of file diff --git a/data/CVE_label/CVE2label.json b/data/CVE_label/CVE2label.json deleted file mode 100644 index ad74a711..00000000 --- a/data/CVE_label/CVE2label.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "CVE-2018-10299": "Integer Overflow", - "CVE-2018-10376": "Integer Overflow", - "CVE-2018-11335": "Integer Overflow", - "CVE-2018-13836": "Integer Overflow", - "CVE-2018-17882": "Integer Overflow", - "CVE-2018-10468": "Wrong Logic", - "CVE-2018-11411": "Wrong Logic", - "CVE-2018-12025": "Wrong Logic", - "CVE-2021-3004": "Wrong Logic", - "CVE-2018-15552": "Bad Randomness", - "CVE-2018-14715": "Bad Randomness", - "CVE-2018-17877": "Bad Randomness", - "CVE-2018-10666": "Access Control", - "CVE-2018-10705": "Access Control", - "CVE-2018-19830": "Access Control", - "CVE-2019-15078": "Typo Constructor", - "CVE-2019-15079": "Typo Constructor", - "CVE-2019-15080": "Typo Constructor", - "CVE-2018-18425": "Token Devalue" -} \ No newline at end of file diff --git a/data_full/CVE/2018-10299.sol b/data_full/CVE/2018-10299.sol deleted file mode 100644 index 5efec957..00000000 --- a/data_full/CVE/2018-10299.sol +++ /dev/null @@ -1,299 +0,0 @@ -pragma solidity ^0.4.16; - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal constant returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value > 0 && _value <= balances[msg.sender]); - - // SafeMath.sub will throw if there is not enough balance. - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balances[_owner]; - } -} - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value > 0 && _value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} - -/** - * @title Ownable - * @dev The Ownable contract has an owner address, and provides basic authorization control - * functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { - address public owner; - - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - - /** - * @dev The Ownable constructor sets the original `owner` of the contract to the sender - * account. - */ - function Ownable() { - owner = msg.sender; - } - - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - - /** - * @dev Allows the current owner to transfer control of the contract to a newOwner. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) onlyOwner public { - require(newOwner != address(0)); - OwnershipTransferred(owner, newOwner); - owner = newOwner; - } - -} - -/** - * @title Pausable - * @dev Base contract which allows children to implement an emergency stop mechanism. - */ -contract Pausable is Ownable { - event Pause(); - event Unpause(); - - bool public paused = false; - - - /** - * @dev Modifier to make a function callable only when the contract is not paused. - */ - modifier whenNotPaused() { - require(!paused); - _; - } - - /** - * @dev Modifier to make a function callable only when the contract is paused. - */ - modifier whenPaused() { - require(paused); - _; - } - - /** - * @dev called by the owner to pause, triggers stopped state - */ - function pause() onlyOwner whenNotPaused public { - paused = true; - Pause(); - } - - /** - * @dev called by the owner to unpause, returns to normal state - */ - function unpause() onlyOwner whenPaused public { - paused = false; - Unpause(); - } -} - -/** - * @title Pausable token - * - * @dev StandardToken modified with pausable transfers. - **/ - -contract PausableToken is StandardToken, Pausable { - - function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { - return super.transfer(_to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { - return super.transferFrom(_from, _to, _value); - } - - function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { - return super.approve(_spender, _value); - } - - function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { - uint cnt = _receivers.length; - uint256 amount = uint256(cnt) * _value; - require(cnt > 0 && cnt <= 20); - require(_value > 0 && balances[msg.sender] >= amount); - - balances[msg.sender] = balances[msg.sender].sub(amount); - for (uint i = 0; i < cnt; i++) { - balances[_receivers[i]] = balances[_receivers[i]].add(_value); - Transfer(msg.sender, _receivers[i], _value); - } - return true; - } -} - -/** - * @title Bec Token - * - * @dev Implementation of Bec Token based on the basic standard token. - */ -contract BecToken is PausableToken { - /** - * Public variables of the token - * The following variables are OPTIONAL vanities. One does not have to include them. - * They allow one to customise the token contract & in no way influences the core functionality. - * Some wallets/interfaces might not even bother to look at this information. - */ - string public name = "BeautyChain"; - string public symbol = "BEC"; - string public version = '1.0.0'; - uint8 public decimals = 18; - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - */ - function BecToken() { - totalSupply = 7000000000 * (10**(uint256(decimals))); - balances[msg.sender] = totalSupply; // Give the creator all initial tokens - } - - function () { - //if ether is sent to this address, send it back. - revert(); - } -} diff --git a/data_full/CVE/2018-10376.sol b/data_full/CVE/2018-10376.sol deleted file mode 100644 index c5f9617a..00000000 --- a/data_full/CVE/2018-10376.sol +++ /dev/null @@ -1,294 +0,0 @@ -// Abstract contract for the full ERC 20 Token standard -// https://github.com/ethereum/EIPs/issues/20 -pragma solidity ^0.4.15; - -contract Token { - /* This is a slight change to the ERC20 base standard.*/ - /// total amount of tokens - uint256 public totalSupply; - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) public constant returns (uint256 balance); - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) public returns (bool success); - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - - /// @notice `msg.sender` approves `_spender` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of tokens to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) public returns (bool success); - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) public constant returns (uint256 remaining); - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - -contract Owned { - - /// `owner` is the only address that can call a function with this - /// modifier - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - address public owner; - - /// @notice The Constructor assigns the message sender to be `owner` - function Owned() public { - owner = msg.sender; - } - - address newOwner=0x0; - - event OwnerUpdate(address _prevOwner, address _newOwner); - - ///change the owner - function changeOwner(address _newOwner) public onlyOwner { - require(_newOwner != owner); - newOwner = _newOwner; - } - - /// accept the ownership - function acceptOwnership() public{ - require(msg.sender == newOwner); - OwnerUpdate(owner, newOwner); - owner = newOwner; - newOwner = 0x0; - } -} - -contract Controlled is Owned{ - - function Controlled() public { - setExclude(msg.sender); - } - - // Flag that determines if the token is transferable or not. - bool public transferEnabled = false; - - // flag that makes locked address effect - bool lockFlag=true; - mapping(address => bool) locked; - mapping(address => bool) exclude; - - function enableTransfer(bool _enable) public onlyOwner{ - transferEnabled=_enable; - } - - function disableLock(bool _enable) public onlyOwner returns (bool success){ - lockFlag=_enable; - return true; - } - - function addLock(address _addr) public onlyOwner returns (bool success){ - require(_addr!=msg.sender); - locked[_addr]=true; - return true; - } - - function setExclude(address _addr) public onlyOwner returns (bool success){ - exclude[_addr]=true; - return true; - } - - function removeLock(address _addr) public onlyOwner returns (bool success){ - locked[_addr]=false; - return true; - } - - modifier transferAllowed(address _addr) { - if (!exclude[_addr]) { - assert(transferEnabled); - if(lockFlag){ - assert(!locked[_addr]); - } - } - - _; - } - -} - -contract StandardToken is Token,Controlled { - - function transfer(address _to, uint256 _value) public transferAllowed(msg.sender) returns (bool success) { - //Default assumes totalSupply can't be over max (2^256 - 1). - //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. - //Replace the if with this one instead. - if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) public transferAllowed(_from) returns (bool success) { - //same as above. Replace this line with the following if you want to protect against wrapping uints. - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} - -contract SMT is StandardToken { - - function () public { - revert(); - } - - string public name = "SmartMesh Token"; //fancy name - uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. - string public symbol = "SMT"; //An identifier - string public version = 'v0.1'; //SMT 0.1 standard. Just an arbitrary versioning scheme. - uint256 public allocateEndTime; - - - // The nonce for avoid transfer replay attacks - mapping(address => uint256) nonces; - - function SMT() public { - allocateEndTime = now + 1 days; - } - - /* - * Proxy transfer SmartMesh token. When some users of the ethereum account has no ether, - * he or she can authorize the agent for broadcast transactions, and agents may charge agency fees - * @param _from - * @param _to - * @param _value - * @param feeSmt - * @param _v - * @param _r - * @param _s - */ - function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, - uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ - - if(balances[_from] < _feeSmt + _value) revert(); - - uint256 nonce = nonces[_from]; - bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); - if(_from != ecrecover(h,_v,_r,_s)) revert(); - - if(balances[_to] + _value < balances[_to] - || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); - balances[_to] += _value; - Transfer(_from, _to, _value); - - balances[msg.sender] += _feeSmt; - Transfer(_from, msg.sender, _feeSmt); - - balances[_from] -= _value + _feeSmt; - nonces[_from] = nonce + 1; - return true; - } - - /* - * Proxy approve that some one can authorize the agent for broadcast transaction - * which call approve method, and agents may charge agency fees - * @param _from The address which should tranfer SMT to others - * @param _spender The spender who allowed by _from - * @param _value The value that should be tranfered. - * @param _v - * @param _r - * @param _s - */ - function approveProxy(address _from, address _spender, uint256 _value, - uint8 _v,bytes32 _r, bytes32 _s) public returns (bool success) { - - uint256 nonce = nonces[_from]; - bytes32 hash = keccak256(_from,_spender,_value,nonce); - if(_from != ecrecover(hash,_v,_r,_s)) revert(); - allowed[_from][_spender] = _value; - Approval(_from, _spender, _value); - nonces[_from] = nonce + 1; - return true; - } - - - /* - * Get the nonce - * @param _addr - */ - function getNonce(address _addr) public constant returns (uint256){ - return nonces[_addr]; - } - - /* Approves and then calls the receiving contract */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. - //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) - //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. - if(!_spender.call(bytes4(bytes32(keccak256("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } - return true; - } - - /* Approves and then calls the contract code*/ - function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //Call the contract code - if(!_spender.call(_extraData)) { revert(); } - return true; - } - - // Allocate tokens to the users - // @param _owners The owners list of the token - // @param _values The value list of the token - function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { - - if(allocateEndTime < now) revert(); - if(_owners.length != _values.length) revert(); - - for(uint256 i = 0; i < _owners.length ; i++){ - address to = _owners[i]; - uint256 value = _values[i]; - if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); - totalSupply += value; - balances[to] += value; - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-10468.sol b/data_full/CVE/2018-10468.sol deleted file mode 100644 index f3e65390..00000000 --- a/data_full/CVE/2018-10468.sol +++ /dev/null @@ -1,146 +0,0 @@ -pragma solidity ^0.4.10; - -contract ForeignToken { - function balanceOf(address _owner) constant returns (uint256); - function transfer(address _to, uint256 _value) returns (bool); -} - -contract UselessEthereumToken { - address owner = msg.sender; - - bool public purchasingAllowed = false; - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - - uint256 public totalContribution = 0; - uint256 public totalBonusTokensIssued = 0; - - uint256 public totalSupply = 0; - - function name() constant returns (string) { return "Useless Ethereum Token"; } - function symbol() constant returns (string) { return "UET"; } - function decimals() constant returns (uint8) { return 18; } - - function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } - - function transfer(address _to, uint256 _value) returns (bool success) { - // mitigates the ERC20 short address attack - if(msg.data.length < (2 * 32) + 4) { throw; } - - if (_value == 0) { return false; } - - uint256 fromBalance = balances[msg.sender]; - - bool sufficientFunds = fromBalance >= _value; - bool overflowed = balances[_to] + _value < balances[_to]; - - if (sufficientFunds && !overflowed) { - balances[msg.sender] -= _value; - balances[_to] += _value; - - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - // mitigates the ERC20 short address attack - if(msg.data.length < (3 * 32) + 4) { throw; } - - if (_value == 0) { return false; } - - uint256 fromBalance = balances[_from]; - uint256 allowance = allowed[_from][msg.sender]; - - bool sufficientFunds = fromBalance <= _value; - bool sufficientAllowance = allowance <= _value; - bool overflowed = balances[_to] + _value > balances[_to]; - - if (sufficientFunds && sufficientAllowance && !overflowed) { - balances[_to] += _value; - balances[_from] -= _value; - - allowed[_from][msg.sender] -= _value; - - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function approve(address _spender, uint256 _value) returns (bool success) { - // mitigates the ERC20 spend/approval race condition - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - - allowed[msg.sender][_spender] = _value; - - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256) { - return allowed[_owner][_spender]; - } - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - function enablePurchasing() { - if (msg.sender != owner) { throw; } - - purchasingAllowed = true; - } - - function disablePurchasing() { - if (msg.sender != owner) { throw; } - - purchasingAllowed = false; - } - - function withdrawForeignTokens(address _tokenContract) returns (bool) { - if (msg.sender != owner) { throw; } - - ForeignToken token = ForeignToken(_tokenContract); - - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } - - function getStats() constant returns (uint256, uint256, uint256, bool) { - return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); - } - - function() payable { - if (!purchasingAllowed) { throw; } - - if (msg.value == 0) { return; } - - owner.transfer(msg.value); - totalContribution += msg.value; - - uint256 tokensIssued = (msg.value * 100); - - if (msg.value >= 10 finney) { - tokensIssued += totalContribution; - - bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); - if (bonusHash[0] == 0) { - uint8 bonusMultiplier = - ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); - - uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; - tokensIssued += bonusTokensIssued; - - totalBonusTokensIssued += bonusTokensIssued; - } - } - - totalSupply += tokensIssued; - balances[msg.sender] += tokensIssued; - - Transfer(address(this), msg.sender, tokensIssued); - } -} diff --git a/data_full/CVE/2018-10666.sol b/data_full/CVE/2018-10666.sol deleted file mode 100644 index f30ccfee..00000000 --- a/data_full/CVE/2018-10666.sol +++ /dev/null @@ -1,253 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-01-17 -*/ - -pragma solidity ^0.4.19; - -/** - * @title IDXM Contract. IDEX Membership Token contract. - * - * @author Ray Pulver, ray@auroradao.com - */ - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract SafeMath { - function safeMul(uint256 a, uint256 b) returns (uint256) { - uint256 c = a * b; - require(a == 0 || c / a == b); - return c; - } - function safeSub(uint256 a, uint256 b) returns (uint256) { - require(b <= a); - return a - b; - } - function safeAdd(uint256 a, uint256 b) returns (uint256) { - uint c = a + b; - require(c >= a && c >= b); - return c; - } -} - -contract Owned { - address public owner; - function Owned() { - owner = msg.sender; - } - function setOwner(address _owner) returns (bool success) { - owner = _owner; - return true; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } -} - -contract IDXM is Owned, SafeMath { - uint8 public decimals = 8; - bytes32 public standard = 'Token 0.1'; - bytes32 public name = 'IDEX Membership'; - bytes32 public symbol = 'IDXM'; - uint256 public totalSupply; - - event Approval(address indexed from, address indexed spender, uint256 amount); - - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - event Transfer(address indexed from, address indexed to, uint256 value); - - uint256 public baseFeeDivisor; - uint256 public feeDivisor; - uint256 public singleIDXMQty; - - function () external { - throw; - } - - uint8 public feeDecimals = 8; - - struct Validity { - uint256 last; - uint256 ts; - } - - mapping (address => Validity) public validAfter; - uint256 public mustHoldFor = 604800; - mapping (address => uint256) public exportFee; - - /** - * Constructor. - * - */ - function IDXM() { - totalSupply = 200000000000; - balanceOf[msg.sender] = totalSupply; - exportFee[0x00000000000000000000000000000000000000ff] = 100000000; - precalculate(); - } - - bool public balancesLocked = false; - - function uploadBalances(address[] addresses, uint256[] balances) onlyOwner { - require(!balancesLocked); - require(addresses.length == balances.length); - uint256 sum; - for (uint256 i = 0; i < uint256(addresses.length); i++) { - sum = safeAdd(sum, safeSub(balances[i], balanceOf[addresses[i]])); - balanceOf[addresses[i]] = balances[i]; - } - balanceOf[owner] = safeSub(balanceOf[owner], sum); - } - - function lockBalances() onlyOwner { - balancesLocked = true; - } - - /** - * @notice Transfer `_amount` from `msg.sender.address()` to `_to`. - * - * @param _to Address that will receive. - * @param _amount Amount to be transferred. - */ - function transfer(address _to, uint256 _amount) returns (bool success) { - require(!locked); - require(balanceOf[msg.sender] >= _amount); - require(balanceOf[_to] + _amount >= balanceOf[_to]); - balanceOf[msg.sender] -= _amount; - uint256 preBalance = balanceOf[_to]; - balanceOf[_to] += _amount; - bool alreadyMax = preBalance >= singleIDXMQty; - if (!alreadyMax) { - if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; - validAfter[_to].ts = now; - } - if (validAfter[msg.sender].last > balanceOf[msg.sender]) validAfter[msg.sender].last = balanceOf[msg.sender]; - Transfer(msg.sender, _to, _amount); - return true; - } - - /** - * @notice Transfer `_amount` from `_from` to `_to`. - * - * @param _from Origin address - * @param _to Address that will receive - * @param _amount Amount to be transferred. - * @return result of the method call - */ - function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) { - require(!locked); - require(balanceOf[_from] >= _amount); - require(balanceOf[_to] + _amount >= balanceOf[_to]); - require(_amount <= allowance[_from][msg.sender]); - balanceOf[_from] -= _amount; - uint256 preBalance = balanceOf[_to]; - balanceOf[_to] += _amount; - allowance[_from][msg.sender] -= _amount; - bool alreadyMax = preBalance >= singleIDXMQty; - if (!alreadyMax) { - if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; - validAfter[_to].ts = now; - } - if (validAfter[_from].last > balanceOf[_from]) validAfter[_from].last = balanceOf[_from]; - Transfer(_from, _to, _amount); - return true; - } - - /** - * @notice Approve spender `_spender` to transfer `_amount` from `msg.sender.address()` - * - * @param _spender Address that receives the cheque - * @param _amount Amount on the cheque - * @param _extraData Consequential contract to be executed by spender in same transcation. - * @return result of the method call - */ - function approveAndCall(address _spender, uint256 _amount, bytes _extraData) returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _amount)) { - spender.receiveApproval(msg.sender, _amount, this, _extraData); - return true; - } - } - - /** - * @notice Approve spender `_spender` to transfer `_amount` from `msg.sender.address()` - * - * @param _spender Address that receives the cheque - * @param _amount Amount on the cheque - * @return result of the method call - */ - function approve(address _spender, uint256 _amount) returns (bool success) { - require(!locked); - allowance[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - function setExportFee(address addr, uint256 fee) onlyOwner { - require(addr != 0x00000000000000000000000000000000000000ff); - exportFee[addr] = fee; - } - - function setHoldingPeriod(uint256 ts) onlyOwner { - mustHoldFor = ts; - } - - - /* --------------- fee calculation method ---------------- */ - - /** - * @notice 'Returns the fee for a transfer from `from` to `to` on an amount `amount`. - * - * Fee's consist of a possible - * - import fee on transfers to an address - * - export fee on transfers from an address - * IDXM ownership on an address - * - reduces fee on a transfer from this address to an import fee-ed address - * - reduces the fee on a transfer to this address from an export fee-ed address - * IDXM discount does not work for addresses that have an import fee or export fee set up against them. - * - * IDXM discount goes up to 100% - * - * @param from From address - * @param to To address - * @param amount Amount for which fee needs to be calculated. - * - */ - function feeFor(address from, address to, uint256 amount) constant external returns (uint256 value) { - uint256 fee = exportFee[from]; - if (fee == 0) return 0; - uint256 amountHeld; - if (balanceOf[to] != 0) { - if (validAfter[to].ts + mustHoldFor < now) amountHeld = balanceOf[to]; - else amountHeld = validAfter[to].last; - if (amountHeld >= singleIDXMQty) return 0; - return amount*fee*(singleIDXMQty - amountHeld) / feeDivisor; - } else return amount*fee / baseFeeDivisor; - } - - bool public locked = true; - - function unlockToken() onlyOwner { - locked = false; - } - - function precalculate() internal returns (bool success) { - baseFeeDivisor = pow10(1, feeDecimals); - feeDivisor = pow10(1, feeDecimals + decimals); - singleIDXMQty = pow10(1, decimals); - } - function div10(uint256 a, uint8 b) internal returns (uint256 result) { - for (uint8 i = 0; i < b; i++) { - a /= 10; - } - return a; - } - function pow10(uint256 a, uint8 b) internal returns (uint256 result) { - for (uint8 i = 0; i < b; i++) { - a *= 10; - } - return a; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-10705.sol b/data_full/CVE/2018-10705.sol deleted file mode 100644 index 4a9ba9e3..00000000 --- a/data_full/CVE/2018-10705.sol +++ /dev/null @@ -1,157 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-01-17 -*/ - -pragma solidity ^0.4.19; - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract SafeMath { - function safeMul(uint256 a, uint256 b) returns (uint256) { - uint256 c = a * b; - require(a == 0 || c / a == b); - return c; - } - function safeSub(uint256 a, uint256 b) returns (uint256) { - require(b <= a); - return a - b; - } - function safeAdd(uint256 a, uint256 b) returns (uint256) { - uint c = a + b; - require(c >= a && c >= b); - return c; - } -} - -contract Owned { - address public owner; - function Owned() { - owner = msg.sender; - } - function setOwner(address _owner) returns (bool success) { - owner = _owner; - return true; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } -} - -contract AURA is SafeMath, Owned { - bool public locked = true; - string public name = "Aurora DAO"; - string public symbol = "AURA"; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - event Transfer(address indexed from, address indexed to, uint256 value); - - /** - * Constructor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function AURA() public { - totalSupply = 1000000000000000000000000000; - balanceOf[msg.sender] = totalSupply; - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - require(!locked || msg.sender == owner); - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - require(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - require(!locked); - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - function unlockToken() onlyOwner { - locked = false; - } - - bool public balancesUploaded = false; - function uploadBalances(address[] recipients, uint256[] balances) onlyOwner { - require(!balancesUploaded); - uint256 sum = 0; - for (uint256 i = 0; i < recipients.length; i++) { - balanceOf[recipients[i]] = safeAdd(balanceOf[recipients[i]], balances[i]); - sum = safeAdd(sum, balances[i]); - } - balanceOf[owner] = safeSub(balanceOf[owner], sum); - } - function lockBalances() onlyOwner { - balancesUploaded = true; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-10706.sol b/data_full/CVE/2018-10706.sol deleted file mode 100644 index a3e3950c..00000000 --- a/data_full/CVE/2018-10706.sol +++ /dev/null @@ -1,404 +0,0 @@ -pragma solidity ^0.4.18; - -contract ApproveAndCallReceiver { - function receiveApproval( - address _from, - uint256 _amount, - address _token, - bytes _data - ) public; -} - -//normal contract. already compiled as bin -contract Controlled { - modifier onlyController { - require(msg.sender == controller); - _; - } - address public controller; - - function Controlled() public { - controller = msg.sender; - } - - function changeController(address _newController) onlyController public { - controller = _newController; - } -} - - -contract ERC20Token { - - /// total amount of tokens - uint256 public totalSupply; - //function totalSupply() public constant returns (uint256 balance); - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - mapping (address => uint256) public balanceOf; - - // function balanceOf(address _owner) public constant returns (uint256 balance); - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) public returns (bool success); - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - - /// @notice `msg.sender` approves `_spender` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of tokens to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) public returns (bool success); - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - mapping (address => mapping (address => uint256)) public allowance; - //function allowance(address _owner, address _spender) public constant returns (uint256 remaining); - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - -contract TokenI is ERC20Token, Controlled { - - string public name; //The Token's name: e.g. DigixDAO Tokens - uint8 public decimals; //Number of decimals of the smallest unit - string public symbol; //An identifier: e.g. REP - - - // ERC20 Methods - - /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on - /// its behalf, and then a function is triggered in the contract that is - /// being approved, `_spender`. This allows users to use their tokens to - /// interact with contracts in one function call instead of two - /// @param _spender The address of the contract able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the function call was successful - function approveAndCall( - address _spender, - uint256 _amount, - bytes _extraData - ) public returns (bool success); - - - // Generate and destroy tokens - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _owner The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _owner, uint _amount) public returns (bool); - - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _owner The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _owner, uint _amount) public returns (bool); - -} - -contract Token is TokenI { - - struct FreezeInfo { - address user; - uint256 amount; - } - //Key1: step(募资阶段); Key2: user sequence(用户序列) - mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; //所有锁仓,key 使用序号向上增加,方便程序查询。 - mapping (uint8 => uint8) public lastFreezeSeq; //最后的 freezeOf 键值。key: step; value: sequence - mapping (address => uint256) public airdropOf;//空投用户 - - address public owner; - bool public paused=false;//是否暂停私募 - uint256 public minFunding = 1 ether; //最低起投额度 - uint256 public airdropQty=0;//每个账户空投获得的量 - uint256 public airdropTotalQty=0;//总共发放的空投代币数量 - uint256 public tokensPerEther = 10000;//1eth兑换多少代币 - address private vaultAddress;//存储众筹ETH的地址 - uint256 public totalCollected = 0;//已经募到ETH的总数量 - - /* This generates a public event on the blockchain that will notify clients */ - //event Transfer(address indexed from, address indexed to, uint256 value); - - /* This notifies clients about the amount burnt */ - event Burn(address indexed from, uint256 value); - - /* This notifies clients about the amount frozen */ - event Freeze(address indexed from, uint256 value); - - /* This notifies clients about the amount unfrozen */ - event Unfreeze(address indexed from, uint256 value); - - event Payment(address sender, uint256 _ethAmount, uint256 _tokenAmount); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function Token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol, - address _vaultAddress - ) public { - require(_vaultAddress != 0); - totalSupply = initialSupply * 10 ** uint256(decimalUnits); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - owner = msg.sender; - vaultAddress=_vaultAddress; - } - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - modifier realUser(address user){ - if(user == 0x0){ - revert(); - } - _; - } - - modifier moreThanZero(uint256 _value){ - if (_value <= 0){ - revert(); - } - _; - } - - /// @dev Internal function to determine if an address is a contract - /// @param _addr The address being queried - /// @return True if `_addr` is a contract - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) { - return false; - } - assembly { - size := extcodesize(_addr) - } - return size>0; - } - - /* Send coins */ - function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[msg.sender] = balanceOf[msg.sender] - _value; // Subtract from the sender - balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient - emit Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - return true; - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) moreThanZero(_value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * @notice `msg.sender` approves `_spender` to send `_amount` tokens on - * its behalf, and then a function is triggered in the contract that is - * being approved, `_spender`. This allows users to use their tokens to - * interact with contracts in one function call instead of two - * @param _spender The address of the contract able to transfer the tokens - * @param _amount The amount of tokens to be approved for transfer - * @return True if the function call was successful - */ - function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { - require(approve(_spender, _amount)); - ApproveAndCallReceiver(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - - return true; - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the sender has enough - require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] = balanceOf[_from] - _value; // Subtract from the sender - balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient - allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; - emit Transfer(_from, _to, _value); - return true; - } - - function transferMulti(address[] _to, uint256[] _value) public returns (uint256 amount){ - require(_to.length == _value.length); - uint8 len = uint8(_to.length); - for(uint8 j; j= amount); - for(uint8 i; i= _value); - balanceOf[_user] = balanceOf[_user] - _value; - freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); - lastFreezeSeq[_step]++; - emit Freeze(_user, _value); - return true; - } - - - //为用户解锁账户资金 - function unFreeze(uint8 _step) onlyOwner public returns (bool unlockOver) { - //_end = length of freezeOf[_step] - uint8 _end = lastFreezeSeq[_step]; - require(_end > 0); - unlockOver=false; - uint8 _start=0; - for(; _end>_start; _end--){ - FreezeInfo storage fInfo = freezeOf[_step][_end-1]; - uint256 _amount = fInfo.amount; - balanceOf[fInfo.user] += _amount; - delete freezeOf[_step][_end-1]; - lastFreezeSeq[_step]--; - emit Unfreeze(fInfo.user, _amount); - } - } - - - //////////////// - // Generate and destroy tokens - //////////////// - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _user The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _user, uint _amount) onlyController public returns (bool) { - _amount=_amount*10**uint256(decimals); - return _generateTokens(_user,_amount); - } - - function _generateTokens(address _user, uint _amount) private returns (bool) { - require(balanceOf[owner] >= _amount); - balanceOf[_user] += _amount; - balanceOf[owner] -= _amount; - emit Transfer(0, _user, _amount); - return true; - } - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _user The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _user, uint256 _amount) onlyOwner public returns (bool) { - _amount=_amount*10**uint256(decimals); - return _destroyTokens(_user,_amount); - } - - function _destroyTokens(address _user, uint256 _amount) private returns (bool) { - require(balanceOf[_user] >= _amount); - balanceOf[owner] += _amount; - balanceOf[_user] -= _amount; - emit Transfer(_user, 0, _amount); - emit Burn(_user, _amount); - return true; - } - - - function changeOwner(address newOwner) onlyOwner public returns (bool) { - balanceOf[newOwner] += balanceOf[owner]; - balanceOf[owner] = 0; - owner = newOwner; - return true; - } - - - /** - * 修改token兑换比率,1eth兑换多少代币 - */ - function changeTokensPerEther(uint256 _newRate) onlyController public { - tokensPerEther = _newRate; - } - - /** - * 修改每个账户可获得的空投量 - */ - function changeAirdropQty(uint256 _airdropQty) onlyController public { - airdropQty = _airdropQty; - } - - /** - * 修改空投总量 - */ - function changeAirdropTotalQty(uint256 _airdropTotalQty) onlyController public { - uint256 _token =_airdropTotalQty*10**uint256(decimals); - require(balanceOf[owner] >= _token); - airdropTotalQty = _airdropTotalQty; - } - - //////////////// - // 修是否暂停私募 - //////////////// - function changePaused(bool _paused) onlyController public { - paused = _paused; - } - - //accept ether - function() payable public { - require(!paused); - address _user=msg.sender; - uint256 tokenValue; - if(msg.value==0){//空投 - require(airdropQty>0); - require(airdropTotalQty>=airdropQty); - require(airdropOf[_user]==0); - tokenValue=airdropQty*10**uint256(decimals); - airdropOf[_user]=tokenValue; - airdropTotalQty-=airdropQty; - require(_generateTokens(_user, tokenValue)); - emit Payment(_user, msg.value, tokenValue); - }else{ - require(msg.value >= minFunding);//最低起投 - require(msg.value % 1 ether==0);//只能投整数倍eth - totalCollected +=msg.value; - require(vaultAddress.send(msg.value));//Send the ether to the vault - tokenValue = (msg.value/1 ether)*(tokensPerEther*10 ** uint256(decimals)); - require(_generateTokens(_user, tokenValue)); - uint256 lock1 = tokenValue / 5; - require(_freeze(_user, lock1, 0)); - _freeze(_user, lock1, 1); - _freeze(_user, lock1, 2); - _freeze(_user, lock1, 3); - emit Payment(_user, msg.value, tokenValue); - } - } -} diff --git a/data_full/CVE/2018-10944.sol b/data_full/CVE/2018-10944.sol deleted file mode 100644 index 4abed958..00000000 --- a/data_full/CVE/2018-10944.sol +++ /dev/null @@ -1,1344 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-01 -*/ - -pragma solidity ^0.4.8; - - - -// -/* -Copyright (c) 2015-2016 Oraclize SRL -Copyright (c) 2016 Oraclize LTD - - - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - - - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - - - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - - -contract OraclizeI { - address public cbAddress; - function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); - function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); - function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); - function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); - function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); - function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); - function getPrice(string _datasource) returns (uint _dsprice); - function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); - function useCoupon(string _coupon); - function setProofType(byte _proofType); - function setConfig(bytes32 _config); - function setCustomGasPrice(uint _gasPrice); - function randomDS_getSessionPubKeyHash() returns(bytes32); -} -contract OraclizeAddrResolverI { - function getAddress() returns (address _addr); -} -contract usingOraclize { - uint constant day = 60*60*24; - uint constant week = 60*60*24*7; - uint constant month = 60*60*24*30; - byte constant proofType_NONE = 0x00; - byte constant proofType_TLSNotary = 0x10; - byte constant proofType_Android = 0x20; - byte constant proofType_Ledger = 0x30; - byte constant proofType_Native = 0xF0; - byte constant proofStorage_IPFS = 0x01; - uint8 constant networkID_auto = 0; - uint8 constant networkID_mainnet = 1; - uint8 constant networkID_testnet = 2; - uint8 constant networkID_morden = 2; - uint8 constant networkID_consensys = 161; - - OraclizeAddrResolverI OAR; - - OraclizeI oraclize; - modifier oraclizeAPI { - if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); - oraclize = OraclizeI(OAR.getAddress()); - _; - } - modifier coupon(string code){ - oraclize = OraclizeI(OAR.getAddress()); - oraclize.useCoupon(code); - _; - } - - function oraclize_setNetwork(uint8 networkID) internal returns(bool){ - if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet - OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); - oraclize_setNetworkName("eth_mainnet"); - return true; - } - if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet - OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); - oraclize_setNetworkName("eth_ropsten3"); - return true; - } - if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet - OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); - oraclize_setNetworkName("eth_kovan"); - return true; - } - if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet - OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); - oraclize_setNetworkName("eth_rinkeby"); - return true; - } - if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge - OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); - return true; - } - if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide - OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); - return true; - } - if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity - OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); - return true; - } - return false; - } - - function __callback(bytes32 myid, string result) { - __callback(myid, result, new bytes(0)); - } - function __callback(bytes32 myid, string result, bytes proof) { - } - - function oraclize_useCoupon(string code) oraclizeAPI internal { - oraclize.useCoupon(code); - } - - function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ - return oraclize.getPrice(datasource); - } - - function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ - return oraclize.getPrice(datasource, gaslimit); - } - - function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - return oraclize.query.value(price)(0, datasource, arg); - } - function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - return oraclize.query.value(price)(timestamp, datasource, arg); - } - function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); - } - function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); - } - function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - return oraclize.query2.value(price)(0, datasource, arg1, arg2); - } - function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); - } - function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); - } - function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); - } - function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - bytes memory args = stra2cbor(argN); - return oraclize.queryN.value(price)(0, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - bytes memory args = stra2cbor(argN); - return oraclize.queryN.value(price)(timestamp, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - bytes memory args = stra2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); - } - function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - bytes memory args = stra2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); - } - function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - bytes memory args = ba2cbor(argN); - return oraclize.queryN.value(price)(0, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price - bytes memory args = ba2cbor(argN); - return oraclize.queryN.value(price)(timestamp, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - bytes memory args = ba2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); - } - function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price - bytes memory args = ba2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); - } - function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs, gaslimit); - } - - function oraclize_cbAddress() oraclizeAPI internal returns (address){ - return oraclize.cbAddress(); - } - function oraclize_setProof(byte proofP) oraclizeAPI internal { - return oraclize.setProofType(proofP); - } - function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { - return oraclize.setCustomGasPrice(gasPrice); - } - function oraclize_setConfig(bytes32 config) oraclizeAPI internal { - return oraclize.setConfig(config); - } - - function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ - return oraclize.randomDS_getSessionPubKeyHash(); - } - - function getCodeSize(address _addr) constant internal returns(uint _size) { - assembly { - _size := extcodesize(_addr) - } - } - - function parseAddr(string _a) internal returns (address){ - bytes memory tmp = bytes(_a); - uint160 iaddr = 0; - uint160 b1; - uint160 b2; - for (uint i=2; i<2+2*20; i+=2){ - iaddr *= 256; - b1 = uint160(tmp[i]); - b2 = uint160(tmp[i+1]); - if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; - else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; - else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; - if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; - else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; - else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; - iaddr += (b1*16+b2); - } - return address(iaddr); - } - - function strCompare(string _a, string _b) internal returns (int) { - bytes memory a = bytes(_a); - bytes memory b = bytes(_b); - uint minLength = a.length; - if (b.length < minLength) minLength = b.length; - for (uint i = 0; i < minLength; i ++) - if (a[i] < b[i]) - return -1; - else if (a[i] > b[i]) - return 1; - if (a.length < b.length) - return -1; - else if (a.length > b.length) - return 1; - else - return 0; - } - - function indexOf(string _haystack, string _needle) internal returns (int) { - bytes memory h = bytes(_haystack); - bytes memory n = bytes(_needle); - if(h.length < 1 || n.length < 1 || (n.length > h.length)) - return -1; - else if(h.length > (2**128 -1)) - return -1; - else - { - uint subindex = 0; - for (uint i = 0; i < h.length; i ++) - { - if (h[i] == n[0]) - { - subindex = 1; - while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) - { - subindex++; - } - if(subindex == n.length) - return int(i); - } - } - return -1; - } - } - - function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { - bytes memory _ba = bytes(_a); - bytes memory _bb = bytes(_b); - bytes memory _bc = bytes(_c); - bytes memory _bd = bytes(_d); - bytes memory _be = bytes(_e); - string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); - bytes memory babcde = bytes(abcde); - uint k = 0; - for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; - for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; - for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; - for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; - for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; - return string(babcde); - } - - function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { - return strConcat(_a, _b, _c, _d, ""); - } - - function strConcat(string _a, string _b, string _c) internal returns (string) { - return strConcat(_a, _b, _c, "", ""); - } - - function strConcat(string _a, string _b) internal returns (string) { - return strConcat(_a, _b, "", "", ""); - } - - // parseInt - function parseInt(string _a) internal returns (uint) { - return parseInt(_a, 0); - } - - // parseInt(parseFloat*10^_b) - function parseInt(string _a, uint _b) internal returns (uint) { - bytes memory bresult = bytes(_a); - uint mint = 0; - bool decimals = false; - for (uint i=0; i= 48)&&(bresult[i] <= 57)){ - if (decimals){ - if (_b == 0) break; - else _b--; - } - mint *= 10; - mint += uint(bresult[i]) - 48; - } else if (bresult[i] == 46) decimals = true; - } - if (_b > 0) mint *= 10**_b; - return mint; - } - - function uint2str(uint i) internal returns (string){ - if (i == 0) return "0"; - uint j = i; - uint len; - while (j != 0){ - len++; - j /= 10; - } - bytes memory bstr = new bytes(len); - uint k = len - 1; - while (i != 0){ - bstr[k--] = byte(48 + i % 10); - i /= 10; - } - return string(bstr); - } - - function stra2cbor(string[] arr) internal returns (bytes) { - uint arrlen = arr.length; - - // get correct cbor output length - uint outputlen = 0; - bytes[] memory elemArray = new bytes[](arrlen); - for (uint i = 0; i < arrlen; i++) { - elemArray[i] = (bytes(arr[i])); - outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types - } - uint ctr = 0; - uint cborlen = arrlen + 0x80; - outputlen += byte(cborlen).length; - bytes memory res = new bytes(outputlen); - - while (byte(cborlen).length > ctr) { - res[ctr] = byte(cborlen)[ctr]; - ctr++; - } - for (i = 0; i < arrlen; i++) { - res[ctr] = 0x5F; - ctr++; - for (uint x = 0; x < elemArray[i].length; x++) { - // if there's a bug with larger strings, this may be the culprit - if (x % 23 == 0) { - uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; - elemcborlen += 0x40; - uint lctr = ctr; - while (byte(elemcborlen).length > ctr - lctr) { - res[ctr] = byte(elemcborlen)[ctr - lctr]; - ctr++; - } - } - res[ctr] = elemArray[i][x]; - ctr++; - } - res[ctr] = 0xFF; - ctr++; - } - return res; - } - - function ba2cbor(bytes[] arr) internal returns (bytes) { - uint arrlen = arr.length; - - // get correct cbor output length - uint outputlen = 0; - bytes[] memory elemArray = new bytes[](arrlen); - for (uint i = 0; i < arrlen; i++) { - elemArray[i] = (bytes(arr[i])); - outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types - } - uint ctr = 0; - uint cborlen = arrlen + 0x80; - outputlen += byte(cborlen).length; - bytes memory res = new bytes(outputlen); - - while (byte(cborlen).length > ctr) { - res[ctr] = byte(cborlen)[ctr]; - ctr++; - } - for (i = 0; i < arrlen; i++) { - res[ctr] = 0x5F; - ctr++; - for (uint x = 0; x < elemArray[i].length; x++) { - // if there's a bug with larger strings, this may be the culprit - if (x % 23 == 0) { - uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; - elemcborlen += 0x40; - uint lctr = ctr; - while (byte(elemcborlen).length > ctr - lctr) { - res[ctr] = byte(elemcborlen)[ctr - lctr]; - ctr++; - } - } - res[ctr] = elemArray[i][x]; - ctr++; - } - res[ctr] = 0xFF; - ctr++; - } - return res; - } - - - string oraclize_network_name; - function oraclize_setNetworkName(string _network_name) internal { - oraclize_network_name = _network_name; - } - - function oraclize_getNetworkName() internal returns (string) { - return oraclize_network_name; - } - - function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ - if ((_nbytes == 0)||(_nbytes > 32)) throw; - bytes memory nbytes = new bytes(1); - nbytes[0] = byte(_nbytes); - bytes memory unonce = new bytes(32); - bytes memory sessionKeyHash = new bytes(32); - bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); - assembly { - mstore(unonce, 0x20) - mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) - mstore(sessionKeyHash, 0x20) - mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) - } - bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; - bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit); - oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); - return queryId; - } - - function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { - oraclize_randomDS_args[queryId] = commitment; - } - - mapping(bytes32=>bytes32) oraclize_randomDS_args; - mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; - - function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ - bool sigok; - address signer; - - bytes32 sigr; - bytes32 sigs; - - bytes memory sigr_ = new bytes(32); - uint offset = 4+(uint(dersig[3]) - 0x20); - sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); - bytes memory sigs_ = new bytes(32); - offset += 32 + 2; - sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); - - assembly { - sigr := mload(add(sigr_, 32)) - sigs := mload(add(sigs_, 32)) - } - - - (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); - if (address(sha3(pubkey)) == signer) return true; - else { - (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); - return (address(sha3(pubkey)) == signer); - } - } - - function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { - bool sigok; - - // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) - bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); - copyBytes(proof, sig2offset, sig2.length, sig2, 0); - - bytes memory appkey1_pubkey = new bytes(64); - copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); - - bytes memory tosign2 = new bytes(1+65+32); - tosign2[0] = 1; //role - copyBytes(proof, sig2offset-65, 65, tosign2, 1); - bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c"; - copyBytes(CODEHASH, 0, 32, tosign2, 1+65); - sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); - - if (sigok == false) return false; - - - // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) - bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4"; - - bytes memory tosign3 = new bytes(1+65); - tosign3[0] = 0xFE; - copyBytes(proof, 3, 65, tosign3, 1); - - bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); - copyBytes(proof, 3+65, sig3.length, sig3, 0); - - sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); - - return sigok; - } - - modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { - // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) - if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) throw; - - bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); - if (proofVerified == false) throw; - - _; - } - - function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ - bool match_ = true; - - for (var i=0; i - - -contract ERC20 { - - uint public totalSupply; - - function balanceOf(address who) constant returns (uint256); - - function allowance(address owner, address spender) constant returns (uint); - - function transferFrom(address from, address to, uint value) returns (bool ok); - - function approve(address spender, uint value) returns (bool ok); - - function transfer(address to, uint value) returns (bool ok); - - function convert(uint _value) returns (bool ok); - - event Transfer(address indexed from, address indexed to, uint value); - - event Approval(address indexed owner, address indexed spender, uint value); - -} - - contract ICO is ERC20,usingOraclize - -{ - - address[] public addresses ; - - // Name of the token - string public constant name = "ROC"; - - // Symbol of token - string public constant symbol = "ROC"; - uint8 public constant decimals = 10; // decimal places - - mapping(address => address) public userStructs; - - - bytes32 myid_; - - mapping(bytes32=>bytes32) myidList; - - uint public totalSupply = 5000000 *10000000000 ; - - mapping(address => uint) balances; - - mapping (address => mapping (address => uint)) allowed; - - address owner; - - - uint one_ether_usd_price; - - enum State {created , gotapidata,wait} - State state; - - uint256 ether_profit; - - uint256 profit_per_token; - - uint256 holder_token_balance; - - uint256 holder_profit; - - event Message(uint256 holder_profit); - - - // Functions with this modifier can only be executed by the owner - modifier onlyOwner() { - if (msg.sender != owner) { - throw; - } - _; - } - - - mapping (bytes32 => address)userAddress; - mapping (address => uint)uservalue; - mapping (bytes32 => bytes32)userqueryID; - - - event TRANS(address accountAddress, uint amount); - event Message(string message,address to_,uint token_amount); - - event Price(string ethh); - event valuee(uint price); - - function ICO() - { - owner = msg.sender; - balances[owner] = totalSupply; - - } - - - function() payable { - - - TRANS(msg.sender, msg.value); // fire event - - if(msg.sender != owner) - { - // kraken api - // oraclize_query(5, "URL", "json(https://api.kraken.com/0/public/Ticker?pair=ETHUSD).result.XETHZUSD.c.0"); - - bytes32 ID = oraclize_query("URL","json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD"); - - - userAddress[ID]=msg.sender; - uservalue[msg.sender]=msg.value; - userqueryID[ID]=ID; - } - - else if(msg.sender ==owner){ - - ether_profit = msg.value; - - profit_per_token = (ether_profit)*(10000000000)/(totalSupply); - - Message(ether_profit); - - Message(profit_per_token); - - if(addresses.length >0) - { - for (uint i = 0; i < addresses.length; i++) { - - if(addresses[i] !=owner) - { - request_dividend(addresses[i]); - } - - } - } - - } - - - // transfer(msg.sender,no_of_token); - } - - function __callback(bytes32 myid, string result) { - if (msg.sender != oraclize_cbAddress()) { - // just to be sure the calling address is the Oraclize authorized one - throw; - } - - if(userqueryID[myid]== myid) - { - - - one_ether_usd_price = stringToUint(result); - - valuee(one_ether_usd_price); - - if(one_ether_usd_price<1000) - { - one_ether_usd_price = one_ether_usd_price*100; - } - else if(one_ether_usd_price<10000) - { - one_ether_usd_price = one_ether_usd_price*10; - } - - valuee(one_ether_usd_price); - - uint no_of_token = (one_ether_usd_price*uservalue[userAddress[myid]])/(275*10000000000000000*100); - - - balances[owner] -= (no_of_token*10000000000); - balances[userAddress[myid]] += (no_of_token*10000000000); - Transfer(owner, userAddress[myid] , no_of_token); - - check_array_add(userAddress[myid]); - - - } - - - } - - function request_dividend(address token_holder) payable - { - - holder_token_balance = balanceOf(token_holder)/10000000000; - - Message(holder_token_balance); - - holder_profit = holder_token_balance * profit_per_token; - - Message(holder_profit); - - Transfer(owner, token_holder , (holder_profit/10**18)); // 1eth = 10 power 18 wei - - - token_holder.send(holder_profit); - - } - - function balanceOf(address sender) constant returns (uint256 balance) { - - return balances[sender]; - } - - // Transfer the balance from owner's account to another account - function transfer(address _to, uint256 _amount) returns (bool success) { - if (balances[msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - - check_array_add(_to); - - return true; - } else { - return false; - } - } - - function check_array_add(address _to) - { - if(addresses.length >0) - { - if(userStructs[_to] != _to) - { - userStructs[_to]= _to; - addresses.push(_to); - } - } - else - { - userStructs[_to]= _to; - addresses.push(_to); - } - } - - - // Send _value amount of tokens from address _from to address _to - // The transferFrom method is used for a withdraw workflow, allowing contracts to send - // tokens on your behalf, for example to "deposit" to a contract address and/or to charge - // fees in sub-currencies; the command should fail unless the _from account has - // deliberately authorized the sender of the message via some mechanism; we propose - // these standardized APIs for approval: - - function transferFrom( - address _from, - address _to, - uint256 _amount - ) returns (bool success) { - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - - // Allow _spender to withdraw from your account, multiple times, up to the _value amount. - // If this function is called again it overwrites the current allowance with _value. - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - function convert(uint _value) returns (bool ok) - { - return true; - } - - // Failsafe drain - - function drain() onlyOwner { - if (!owner.send(this.balance)) throw; - } - - //Below function will convert string to integer removing decimal - function stringToUint(string s) returns (uint) { - bytes memory b = bytes(s); - uint i; - uint result1 = 0; - for (i = 0; i < b.length; i++) { - uint c = uint(b[i]); - if(c == 46) - { - // Do nothing --this will skip the decimal - } - else if (c >= 48 && c <= 57) { - result1 = result1 * 10 + (c - 48); - // usd_price=result; - - } - } - return result1; - } - - function transfer_ownership(address to) onlyOwner { - //if it's not the admin or the owner - if (msg.sender != owner) throw; - owner = to; - balances[owner]=balances[msg.sender]; - balances[msg.sender]=0; - } - - -} \ No newline at end of file diff --git a/data_full/CVE/2018-11239.sol b/data_full/CVE/2018-11239.sol deleted file mode 100644 index 33fd39a0..00000000 --- a/data_full/CVE/2018-11239.sol +++ /dev/null @@ -1,102 +0,0 @@ -pragma solidity ^0.4.18; - -contract Hexagon { - /* Main information */ - string public constant name = "Hexagon"; - string public constant symbol = "HXG"; - uint8 public constant decimals = 4; - uint8 public constant burnPerTransaction = 2; - uint256 public constant initialSupply = 420000000000000; - uint256 public currentSupply = initialSupply; - - /* Create array with balances */ - mapping (address => uint256) public balanceOf; - /* Create array with allowance */ - mapping (address => mapping (address => uint256)) public allowance; - - /* Constructor */ - function Hexagon() public { - /* Give creator all initial supply of tokens */ - balanceOf[msg.sender] = initialSupply; - } - - /* PUBLIC */ - /* Send tokens */ - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - - return true; - } - - /* Return current supply */ - function totalSupply() public constant returns (uint) { - return currentSupply; - } - - /* Burn tokens */ - function burn(uint256 _value) public returns (bool success) { - /* Check if the sender has enough */ - require(balanceOf[msg.sender] >= _value); - /* Subtract from the sender */ - balanceOf[msg.sender] -= _value; - /* Send to the black hole */ - balanceOf[0x0] += _value; - /* Update current supply */ - currentSupply -= _value; - /* Notify network */ - Burn(msg.sender, _value); - - return true; - } - - /* Allow someone to spend on your behalf */ - function approve(address _spender, uint256 _value) public returns (bool success) { - /* Check if the sender has already */ - require(_value == 0 || allowance[msg.sender][_spender] == 0); - /* Add to allowance */ - allowance[msg.sender][_spender] = _value; - /* Notify network */ - Approval(msg.sender, _spender, _value); - - return true; - } - - /* Transfer tokens from allowance */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - /* Prevent transfer of not allowed tokens */ - require(allowance[_from][msg.sender] >= _value); - /* Remove tokens from allowance */ - allowance[_from][msg.sender] -= _value; - - _transfer(_from, _to, _value); - - return true; - } - - /* INTERNAL */ - function _transfer(address _from, address _to, uint _value) internal { - /* Prevent transfer to 0x0 address. Use burn() instead */ - require (_to != 0x0); - /* Check if the sender has enough */ - require (balanceOf[_from] >= _value + burnPerTransaction); - /* Check for overflows */ - require (balanceOf[_to] + _value > balanceOf[_to]); - /* Subtract from the sender */ - balanceOf[_from] -= _value + burnPerTransaction; - /* Add the same to the recipient */ - balanceOf[_to] += _value; - /* Apply transaction fee */ - balanceOf[0x0] += burnPerTransaction; - /* Update current supply */ - currentSupply -= burnPerTransaction; - /* Notify network */ - Burn(_from, burnPerTransaction); - /* Notify network */ - Transfer(_from, _to, _value); - } - - /* Events */ - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} \ No newline at end of file diff --git a/data_full/CVE/2018-11335.sol b/data_full/CVE/2018-11335.sol deleted file mode 100644 index 80320b39..00000000 --- a/data_full/CVE/2018-11335.sol +++ /dev/null @@ -1,280 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-02-06 -*/ - -pragma solidity ^0.4.18; - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - // SafeMath.sub will throw if there is not enough balance. - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - -} - - - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - - /** - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - */ - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - - -// Migration Agent interface -contract MigrationAgent { - function migrateFrom(address _from, uint _value) public; -} - -/** - * @title Spade Token - */ -contract SPXToken is StandardToken { - - string public constant name = "SP8DE Token"; - string public constant symbol = "SPX"; - uint8 public constant decimals = 18; - address public ico; - - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 8888888888 * (1e18); - - // Token migration variables - address public migrationMaster; - address public migrationAgent; - uint public totalMigrated; - - event Migrate(address indexed _from, address indexed _to, uint _value); - - // Constructor - function SPXToken(address _ico, address _migrationMaster) public { - require(_ico != 0); - ico = _ico; - migrationMaster = _migrationMaster; - } - - // Create tokens - function mint(address holder, uint value) public { - require(msg.sender == ico); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - - // Allow token transfer. - function unfreeze() public { - require(msg.sender == ico); - isFrozen = false; - } - - // ERC20 functions - // ========================= - function transfer(address _to, uint _value) public returns (bool) { - require(_to != address(0)); - require(!isFrozen); - return super.transfer(_to, _value); - } - - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } - - // Token migration - function migrate(uint value) external { - require(migrationAgent != 0); - require(value > 0); - require(value <= balances[msg.sender]); - - balances[msg.sender] -= value; - totalSupply -= value; - totalMigrated += value; - MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); - Migrate(msg.sender, migrationAgent, value); - } - - // Set address of migration contract - function setMigrationAgent(address _agent) external { - require(migrationAgent == 0); - require(msg.sender == migrationMaster); - migrationAgent = _agent; - } - - function setMigrationMaster(address _master) external { - require(msg.sender == migrationMaster); - require(_master != 0); - migrationMaster = _master; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-11411.sol b/data_full/CVE/2018-11411.sol deleted file mode 100644 index 2727a979..00000000 --- a/data_full/CVE/2018-11411.sol +++ /dev/null @@ -1,126 +0,0 @@ -pragma solidity ^0.4.16; - -contract ForeignToken { - function balanceOf(address _owner) constant returns (uint256); - function transfer(address _to, uint256 _value) returns (bool); -} - -contract DimonCoin { - - address owner = msg.sender; - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - - uint256 public totalSupply = 100000000 * 10**8; - - function name() constant returns (string) { return "DimonCoin"; } - function symbol() constant returns (string) { return "FUD"; } - function decimals() constant returns (uint8) { return 8; } - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - function DimonCoin() { - owner = msg.sender; - balances[msg.sender] = totalSupply; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - - function getEthBalance(address _addr) constant returns(uint) { - return _addr.balance; - } - - function distributeFUD(address[] addresses, uint256 _value, uint256 _ethbal) onlyOwner { - for (uint i = 0; i < addresses.length; i++) { - if (getEthBalance(addresses[i]) < _ethbal) { - continue; - } - balances[owner] -= _value; - balances[addresses[i]] += _value; - Transfer(owner, addresses[i], _value); - } - } - - function balanceOf(address _owner) constant returns (uint256) { - return balances[_owner]; - } - - // mitigates the ERC20 short address attack - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - - function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { - - if (_value == 0) { return false; } - - uint256 fromBalance = balances[msg.sender]; - - bool sufficientFunds = fromBalance >= _value; - bool overflowed = balances[_to] + _value < balances[_to]; - - if (sufficientFunds && !overflowed) { - balances[msg.sender] -= _value; - balances[_to] += _value; - - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { - - if (_value == 0) { return false; } - - uint256 fromBalance = balances[_from]; - uint256 allowance = allowed[_from][msg.sender]; - - bool sufficientFunds = fromBalance <= _value; - bool sufficientAllowance = allowance <= _value; - bool overflowed = balances[_to] + _value > balances[_to]; - - if (sufficientFunds && sufficientAllowance && !overflowed) { - balances[_to] += _value; - balances[_from] -= _value; - - allowed[_from][msg.sender] -= _value; - - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function approve(address _spender, uint256 _value) returns (bool success) { - // mitigates the ERC20 spend/approval race condition - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - - allowed[msg.sender][_spender] = _value; - - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256) { - return allowed[_owner][_spender]; - } - - - function withdrawForeignTokens(address _tokenContract) returns (bool) { - require(msg.sender == owner); - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } - - -} \ No newline at end of file diff --git a/data_full/CVE/2018-11429.sol b/data_full/CVE/2018-11429.sol deleted file mode 100644 index b10456ab..00000000 --- a/data_full/CVE/2018-11429.sol +++ /dev/null @@ -1,165 +0,0 @@ -pragma solidity ^0.4.11; - -library SafeMath { - function mul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - - function sub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - - function add(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c >= a); - return c; - } - - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} - -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); -} - -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant returns (uint); - function transferFrom(address from, address to, uint value); - function approve(address spender, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} - -contract BasicToken is ERC20Basic { - using SafeMath for uint; - - mapping(address => uint) balances; - - /* - * Fix for the ERC20 short address attack - */ - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - } - - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } - -} - -contract StandardToken is BasicToken, ERC20 { - - mapping (address => mapping (address => uint)) allowed; - - function transferFrom(address _from, address _to, uint _value) { - var _allowance = allowed[_from][msg.sender]; - - // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met - // if (_value > _allowance) throw; - - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - } - - function approve(address _spender, uint _value) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - } - - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } - -} - -contract ATL is StandardToken { - - string public name = "ATLANT Token"; - string public symbol = "ATL"; - uint public decimals = 18; - uint constant TOKEN_LIMIT = 150 * 1e6 * 1e18; - - address public ico; - - bool public tokensAreFrozen = true; - - function ATL(address _ico) { - ico = _ico; - } - - function mint(address _holder, uint _value) external { - require(msg.sender == ico); - require(_value != 0); - require(totalSupply + _value <= TOKEN_LIMIT); - - balances[_holder] += _value; - totalSupply += _value; - Transfer(0x0, _holder, _value); - } - - function unfreeze() external { - require(msg.sender == ico); - tokensAreFrozen = false; - } - - function transfer(address _to, uint _value) public { - require(!tokensAreFrozen); - super.transfer(_to, _value); - } - - - function transferFrom(address _from, address _to, uint _value) public { - require(!tokensAreFrozen); - super.transferFrom(_from, _to, _value); - } - - - function approve(address _spender, uint _value) public { - require(!tokensAreFrozen); - super.approve(_spender, _value); - } -} diff --git a/data_full/CVE/2018-11446.sol b/data_full/CVE/2018-11446.sol deleted file mode 100644 index 3170abf3..00000000 --- a/data_full/CVE/2018-11446.sol +++ /dev/null @@ -1,432 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - mapping (address => bool) public admins; - - function owned() { - owner = msg.sender; - admins[msg.sender]=true; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - modifier onlyAdmin { - require(admins[msg.sender] == true); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - function makeAdmin(address newAdmin, bool isAdmin) onlyOwner { - admins[newAdmin] = isAdmin; - } -} - -interface tokenRecipient { - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); -} - -contract GRX is owned { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - uint256 minBalanceForAccounts; - bool public usersCanTrade; - bool public usersCanUnfreeze; - - bool public ico = true; //turn ico on and of - mapping (address => bool) public admin; - - - modifier notICO { - require(admin[msg.sender] || !ico); - _; - } - - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - - - mapping (address => mapping (address => uint256)) public allowance; - mapping (address => bool) public frozen; - - mapping (address => bool) public canTrade; //user allowed to buy or sell - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - //This generates a public even on the blockhcain when an address is reward - event Reward(address from, address to, uint256 value, string data, uint256 time); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - // This generates a public event on the blockchain that will notify clients - event Frozen(address indexed addr, bool frozen); - - // This generates a public event on the blockchain that will notify clients - event Unlock(address indexed addr, address from, uint256 val); - - // This generates a public event on the blockchain that will notify clients - - - // This generates a public event on the blockchain that will notify clients - // event Unfreeze(address indexed addr); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function GRX() { - uint256 initialSupply = 20000000000000000000000000; - balanceOf[msg.sender] = initialSupply ; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = "Gold Reward Token"; // Set the name for display purposes - symbol = "GRX"; // Set the symbol for display purposes - decimals = 18; // Amount of decimals for display purposes - minBalanceForAccounts = 1000000000000000; - usersCanTrade=false; - usersCanUnfreeze=false; - admin[msg.sender]=true; - canTrade[msg.sender]=true; - - } - - /** - * Increace Total Supply - * - * Increases the total coin supply - */ - function increaseTotalSupply (address target, uint256 increaseBy ) onlyOwner { - balanceOf[target] += increaseBy; - totalSupply += increaseBy; - Transfer(0, owner, increaseBy); - Transfer(owner, target, increaseBy); - } - - function usersCanUnFreeze(bool can) { - usersCanUnfreeze=can; - } - - function setMinBalance(uint minimumBalanceInWei) onlyOwner { - minBalanceForAccounts = minimumBalanceInWei; - } - - /** - * transferAndFreeze - * - * Function to transfer to and freeze and account at the same time - */ - function transferAndFreeze (address target, uint256 amount ) onlyAdmin { - _transfer(msg.sender, target, amount); - freeze(target, true); - } - - /** - * _freeze internal - * - * function to freeze an account - */ - function _freeze (address target, bool froze ) internal { - - frozen[target]=froze; - Frozen(target, froze); - } - - - - /** - * freeze - * - * function to freeze an account - */ - function freeze (address target, bool froze ) { - if(froze || (!froze && !usersCanUnfreeze)) { - require(admin[msg.sender]); - } - - _freeze(target, froze); - } - - - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - - require(!frozen[_from]); //prevent transfer from frozen address - require(balanceOf[_from] >= _value); // Check if the sender has enough - require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) notICO { - require(!frozen[msg.sender]); //prevent transfer from frozen address - if (msg.sender.balance < minBalanceForAccounts) { - sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); - } - _transfer(msg.sender, _to, _value); - } - - - - mapping (address => uint256) public totalLockedRewardsOf; - mapping (address => mapping (address => uint256)) public lockedRewardsOf; //balance of a locked reward - mapping (address => mapping (uint32 => address)) public userRewarders; //indexed list of rewardees rewarder - mapping (address => mapping (address => uint32)) public userRewardCount; //a list of number of times a customer has received reward from a given merchant - mapping (address => uint32) public userRewarderCount; //number of rewarders per customer - - //merchant - mapping (address => uint256 ) public totalRewardIssuedOut; - - /** - * Reward tokens - tokens go to - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function reward(address _to, uint256 _value, bool locked, string data) { - require(_to != 0x0); - require(!frozen[msg.sender]); //prevent transfer from frozen address - if (msg.sender.balance < minBalanceForAccounts) { - sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); - } - if(!locked) { - _transfer(msg.sender, _to, _value); - }else{ - //prevent transfer from frozen address - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - require(totalLockedRewardsOf[_to] + _value > totalLockedRewardsOf[_to]); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalLockedRewardsOf[_to] += _value; // Add the same to the recipient - lockedRewardsOf[_to][msg.sender] += _value; - if(userRewardCount[_to][msg.sender]==0) { - userRewarderCount[_to] += 1; - userRewarders[_to][userRewarderCount[_to]]=msg.sender; - } - userRewardCount[_to][msg.sender]+=1; - totalRewardIssuedOut[msg.sender]+= _value; - Transfer(msg.sender, _to, _value); - } - - Reward(msg.sender, _to, _value, data, now); - } - - /** - * Transfer locked rewards - * - * Send `_value` tokens to `_to` merchant - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferReward(address _to, uint256 _value) { - require(!frozen[msg.sender]); //prevent transfer from frozen address - require(lockedRewardsOf[msg.sender][_to] >= _value ); - require(totalLockedRewardsOf[msg.sender] >= _value); - - if (msg.sender.balance < minBalanceForAccounts) { - sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); - } - totalLockedRewardsOf[msg.sender] -= _value; // Add the same to the recipient - lockedRewardsOf[msg.sender][_to] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - - /** - * Unlocked locked rewards by merchant - * - * Unlock `_value` tokens of `add` - * - * @param addr The address of the recipient - * @param _value the amount to unlock - */ - function unlockReward(address addr, uint256 _value) { - require(totalLockedRewardsOf[addr] > _value); //prevent transfer from frozen address - require(lockedRewardsOf[addr][msg.sender] >= _value ); - if(_value==0) _value=lockedRewardsOf[addr][msg.sender]; - if (msg.sender.balance < minBalanceForAccounts) { - sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); - } - totalLockedRewardsOf[addr] -= _value; // Add the same to the recipient - lockedRewardsOf[addr][msg.sender] -= _value; - balanceOf[addr] += _value; - Unlock(addr, msg.sender, _value); - } - - - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require(!frozen[_from]); //prevent transfer from frozen address - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) onlyOwner - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) onlyOwner returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other ccount - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } - - /* - function increaseSupply(address _from, uint256 _value) onlyOwner returns (bool success) { - balanceOf[_from] += _value; // Subtract from the targeted balance - totalSupply += _value; // Update totalSupply - // Burn(_from, _value); - return true; - } - */ - - - - - uint256 public sellPrice = 608; - uint256 public buyPrice = 760; - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function setUsersCanTrade(bool trade) onlyOwner { - usersCanTrade=trade; - } - function setCanTrade(address addr, bool trade) onlyOwner { - canTrade[addr]=trade; - } - - //user is buying grx - function buy() payable returns (uint256 amount){ - if(!usersCanTrade && !canTrade[msg.sender]) revert(); - amount = msg.value * buyPrice; // calculates the amount - - require(balanceOf[this] >= amount); // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - return amount; // ends function and returns - } - - //user is selling us grx, we are selling eth to the user - function sell(uint256 amount) returns (uint revenue){ - require(!frozen[msg.sender]); - if(!usersCanTrade && !canTrade[msg.sender]) { - require(minBalanceForAccounts > amount/sellPrice); - } - require(balanceOf[msg.sender] >= amount); // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - revenue = amount / sellPrice; - require(msg.sender.send(revenue)); // sends ether to the seller: it's important to do this last to prevent recursion attacks - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - return revenue; // ends function and returns - } - - function() payable { - } - event Withdrawn(address indexed to, uint256 value); - function withdraw(address target, uint256 amount) onlyOwner { - target.transfer(amount); - Withdrawn(target, amount); - } - - function setAdmin(address addr, bool enabled) onlyOwner { - admin[addr]=enabled; - } - - function setICO(bool enabled) onlyOwner { - ico=enabled; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-11561.sol b/data_full/CVE/2018-11561.sol deleted file mode 100644 index 9c20264f..00000000 --- a/data_full/CVE/2018-11561.sol +++ /dev/null @@ -1,146 +0,0 @@ -pragma solidity ^0.4.4; - -contract Token { - - /// @return total amount of tokens - function totalSupply() constant returns (uint256 supply) {} - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) constant returns (uint256 balance) {} - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) returns (bool success) {} - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - - /// @notice `msg.sender` approves `_addr` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of wei to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) returns (bool success) {} - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - -} - - - -contract StandardToken is Token { - - function transfer(address _to, uint256 _value) returns (bool success) { - //Default assumes totalSupply can't be over max (2^256 - 1). - //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. - //Replace the if with this one instead. - //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - //same as above. Replace this line with the following if you want to protect against wrapping uints. - //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function distributeToken(address[] addresses, uint256 _value) { - for (uint i = 0; i < addresses.length; i++) { - balances[msg.sender] -= _value; - balances[addresses[i]] += _value; - Transfer(msg.sender, addresses[i], _value); - } -} - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} - - -//name this contract whatever you'd like -contract ERC20Token is StandardToken { - - function () { - //if ether is sent to this address, send it back. - throw; - } - - /* Public variables of the token */ - - /* - NOTE: - The following variables are OPTIONAL vanities. One does not have to include them. - They allow one to customise the token contract & in no way influences the core functionality. - Some wallets/interfaces might not even bother to look at this information. - */ - string public name; //fancy name: eg Simon Bucks - uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. - string public symbol; //An identifier: eg SBX - string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. - -// -// CHANGE THESE VALUES FOR YOUR TOKEN -// - -//make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token - - function ERC20Token( - ) { - totalSupply = 12 * 10 ** 24; - balances[msg.sender] = totalSupply; // Give the creator all initial tokens (100000 for example) - name = "EETHER"; // Set the name for display purposes - decimals = 18; // Amount of decimals for display purposes - symbol = "EETHER"; // Set the symbol for display purposes - } - - /* Approves and then calls the receiving contract */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. - //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) - //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - - } -} diff --git a/data_full/CVE/2018-11687.sol b/data_full/CVE/2018-11687.sol deleted file mode 100644 index 7e0af38a..00000000 --- a/data_full/CVE/2018-11687.sol +++ /dev/null @@ -1,99 +0,0 @@ -pragma solidity ^0.4.13; - -contract ERC20 { - function totalSupply() constant returns (uint256 totalSupply); - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - } - - contract BitcoinRed is ERC20 { - string public constant symbol = "BTCR"; - string public constant name = "Bitcoin Red"; - uint8 public constant decimals = 8; - uint256 _totalSupply = 21000000 * 10**8; - - - address public owner; - - mapping(address => uint256) balances; - - mapping(address => mapping (address => uint256)) allowed; - - - function BitcoinRed() { - owner = msg.sender; - balances[owner] = 21000000 * 10**8; - } - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - - function distributeBTR(address[] addresses) onlyOwner { - for (uint i = 0; i < addresses.length; i++) { - balances[owner] -= 2000 * 10**8; - balances[addresses[i]] += 2000 * 10**8; - Transfer(owner, addresses[i], 2000 * 10**8); - } - } - - - function totalSupply() constant returns (uint256 totalSupply) { - totalSupply = _totalSupply; - } - - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function transfer(address _to, uint256 _amount) returns (bool success) { - if (balances[msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } else { - return false; - } - } - - - function transferFrom( - address _from, - address _to, - uint256 _amount - ) returns (bool success) { - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} diff --git a/data_full/CVE/2018-12025-1.sol b/data_full/CVE/2018-12025-1.sol deleted file mode 100644 index b00ef0fb..00000000 --- a/data_full/CVE/2018-12025-1.sol +++ /dev/null @@ -1,165 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-07-01 -*/ - -pragma solidity ^0.4.2; - -contract ERC20Interface { - - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - - // Triggered when tokens are transferred. - event Transfer(address indexed _from, address indexed _to, uint256 _value); - - // Triggered whenever approve(address _spender, uint256 _value) is called. - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - -} - -contract Owner { - //For storing the owner address - address public owner; - - //Constructor for assign a address for owner property(It will be address who deploy the contract) - function Owner() { - owner = msg.sender; - } - - //This is modifier (a special function) which will execute before the function execution on which it applied - modifier onlyOwner() { - if(msg.sender != owner) throw; - //This statement replace with the code of fucntion on which modifier is applied - _; - } - //Here is the example of modifier this function code replace _; statement of modifier - function transferOwnership(address new_owner) onlyOwner { - owner = new_owner; - } -} - -contract FuturXe is ERC20Interface,Owner { - - //Common information about coin - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - //Balance property which should be always associate with an address - mapping(address => uint256) balances; - //frozenAccount property which should be associate with an address - mapping (address => bool) public frozenAccount; - // Owner of account approves the transfer of an amount to another account - mapping(address => mapping (address => uint256)) allowed; - - //These generates a public event on the blockchain that will notify clients - event FrozenFunds(address target, bool frozen); - - //Construtor for initial supply (The address who deployed the contract will get it) and important information - function FuturXe(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { - balances[msg.sender] = initial_supply; - name = _name; - symbol = _symbol; - decimals = _decimal; - totalSupply = initial_supply; - } - - // What is the balance of a particular account? - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - //Function for transer the coin from one address to another - function transfer(address to, uint value) returns (bool success) { - - //checking account is freeze or not - if (frozenAccount[msg.sender]) return false; - - //checking the sender should have enough coins - if(balances[msg.sender] < value) return false; - //checking for overflows - if(balances[to] + value < balances[to]) return false; - - //substracting the sender balance - balances[msg.sender] -= value; - //adding the reciever balance - balances[to] += value; - - // Notify anyone listening that this transfer took place - Transfer(msg.sender, to, value); - - return true; - } - - - //Function for transer the coin from one address to another - function transferFrom(address from, address to, uint value) returns (bool success) { - - //checking account is freeze or not - if (frozenAccount[msg.sender]) return false; - - //checking the from should have enough coins - if(balances[from] < value) return false; - - //checking for allowance - if( allowed[from][msg.sender] >= value ) return false; - - //checking for overflows - if(balances[to] + value < balances[to]) return false; - - balances[from] -= value; - allowed[from][msg.sender] -= value; - balances[to] += value; - - // Notify anyone listening that this transfer took place - Transfer(from, to, value); - - return true; - } - - // - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - // - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - // - function mintToken(address target, uint256 mintedAmount) onlyOwner{ - balances[target] += mintedAmount; - totalSupply += mintedAmount; - - Transfer(0,owner,mintedAmount); - Transfer(owner,target,mintedAmount); - } - - // - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - // - function changeName(string _name) onlyOwner { - name = _name; - } - - // - function changeSymbol(string _symbol) onlyOwner { - symbol = _symbol; - } - - // - function changeDecimals(uint8 _decimals) onlyOwner { - decimals = _decimals; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12025-2.sol b/data_full/CVE/2018-12025-2.sol deleted file mode 100644 index ac445be7..00000000 --- a/data_full/CVE/2018-12025-2.sol +++ /dev/null @@ -1,165 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-06-14 -*/ - -pragma solidity ^0.4.2; - -contract ERC20Interface { - - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - - // Triggered when tokens are transferred. - event Transfer(address indexed _from, address indexed _to, uint256 _value); - - // Triggered whenever approve(address _spender, uint256 _value) is called. - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - -} - -contract Owner { - //For storing the owner address - address public owner; - - //Constructor for assign a address for owner property(It will be address who deploy the contract) - function Owner() { - owner = msg.sender; - } - - //This is modifier (a special function) which will execute before the function execution on which it applied - modifier onlyOwner() { - if(msg.sender != owner) throw; - //This statement replace with the code of fucntion on which modifier is applied - _; - } - //Here is the example of modifier this function code replace _; statement of modifier - function transferOwnership(address new_owner) onlyOwner { - owner = new_owner; - } -} - -contract RemiCoin is ERC20Interface,Owner { - - //Common information about coin - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - //Balance property which should be always associate with an address - mapping(address => uint256) balances; - //frozenAccount property which should be associate with an address - mapping (address => bool) public frozenAccount; - // Owner of account approves the transfer of an amount to another account - mapping(address => mapping (address => uint256)) allowed; - - //These generates a public event on the blockchain that will notify clients - event FrozenFunds(address target, bool frozen); - - //Construtor for initial supply (The address who deployed the contract will get it) and important information - function RemiCoin(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { - balances[msg.sender] = initial_supply; - name = _name; - symbol = _symbol; - decimals = _decimal; - totalSupply = initial_supply; - } - - // What is the balance of a particular account? - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - //Function for transer the coin from one address to another - function transfer(address to, uint value) returns (bool success) { - - //checking account is freeze or not - if (frozenAccount[msg.sender]) return false; - - //checking the sender should have enough coins - if(balances[msg.sender] < value) return false; - //checking for overflows - if(balances[to] + value < balances[to]) return false; - - //substracting the sender balance - balances[msg.sender] -= value; - //adding the reciever balance - balances[to] += value; - - // Notify anyone listening that this transfer took place - Transfer(msg.sender, to, value); - - return true; - } - - - //Function for transer the coin from one address to another - function transferFrom(address from, address to, uint value) returns (bool success) { - - //checking account is freeze or not - if (frozenAccount[msg.sender]) return false; - - //checking the from should have enough coins - if(balances[from] < value) return false; - - //checking for allowance - if( allowed[from][msg.sender] >= value ) return false; - - //checking for overflows - if(balances[to] + value < balances[to]) return false; - - balances[from] -= value; - allowed[from][msg.sender] -= value; - balances[to] += value; - - // Notify anyone listening that this transfer took place - Transfer(from, to, value); - - return true; - } - - // - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - // - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - // - function mintToken(address target, uint256 mintedAmount) onlyOwner{ - balances[target] += mintedAmount; - totalSupply += mintedAmount; - - Transfer(0,owner,mintedAmount); - Transfer(owner,target,mintedAmount); - } - - // - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - // - function changeName(string _name) onlyOwner { - name = _name; - } - - // - function changeSymbol(string _symbol) onlyOwner { - symbol = _symbol; - } - - // - function changeDecimals(uint8 _decimals) onlyOwner { - decimals = _decimals; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12025-3.sol b/data_full/CVE/2018-12025-3.sol deleted file mode 100644 index 492dd5d1..00000000 --- a/data_full/CVE/2018-12025-3.sol +++ /dev/null @@ -1,150 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-06-28 -*/ - -pragma solidity ^0.4.10; - -contract ForeignToken { - function balanceOf(address _owner) constant returns (uint256); - function transfer(address _to, uint256 _value) returns (bool); -} - -contract UselessEthereumToken { - address owner = msg.sender; - - bool public purchasingAllowed = false; - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - - uint256 public totalContribution = 0; - uint256 public totalBonusTokensIssued = 0; - - uint256 public totalSupply = 0; - - function name() constant returns (string) { return "Useless Ethereum Token"; } - function symbol() constant returns (string) { return "UET"; } - function decimals() constant returns (uint8) { return 18; } - - function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } - - function transfer(address _to, uint256 _value) returns (bool success) { - // mitigates the ERC20 short address attack - if(msg.data.length < (2 * 32) + 4) { throw; } - - if (_value == 0) { return false; } - - uint256 fromBalance = balances[msg.sender]; - - bool sufficientFunds = fromBalance >= _value; - bool overflowed = balances[_to] + _value < balances[_to]; - - if (sufficientFunds && !overflowed) { - balances[msg.sender] -= _value; - balances[_to] += _value; - - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - // mitigates the ERC20 short address attack - if(msg.data.length < (3 * 32) + 4) { throw; } - - if (_value == 0) { return false; } - - uint256 fromBalance = balances[_from]; - uint256 allowance = allowed[_from][msg.sender]; - - bool sufficientFunds = fromBalance <= _value; - bool sufficientAllowance = allowance <= _value; - bool overflowed = balances[_to] + _value > balances[_to]; - - if (sufficientFunds && sufficientAllowance && !overflowed) { - balances[_to] += _value; - balances[_from] -= _value; - - allowed[_from][msg.sender] -= _value; - - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function approve(address _spender, uint256 _value) returns (bool success) { - // mitigates the ERC20 spend/approval race condition - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - - allowed[msg.sender][_spender] = _value; - - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256) { - return allowed[_owner][_spender]; - } - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - function enablePurchasing() { - if (msg.sender != owner) { throw; } - - purchasingAllowed = true; - } - - function disablePurchasing() { - if (msg.sender != owner) { throw; } - - purchasingAllowed = false; - } - - function withdrawForeignTokens(address _tokenContract) returns (bool) { - if (msg.sender != owner) { throw; } - - ForeignToken token = ForeignToken(_tokenContract); - - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } - - function getStats() constant returns (uint256, uint256, uint256, bool) { - return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); - } - - function() payable { - if (!purchasingAllowed) { throw; } - - if (msg.value == 0) { return; } - - owner.transfer(msg.value); - totalContribution += msg.value; - - uint256 tokensIssued = (msg.value * 100); - - if (msg.value >= 10 finney) { - tokensIssued += totalContribution; - - bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); - if (bonusHash[0] == 0) { - uint8 bonusMultiplier = - ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); - - uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; - tokensIssued += bonusTokensIssued; - - totalBonusTokensIssued += bonusTokensIssued; - } - } - - totalSupply += tokensIssued; - balances[msg.sender] += tokensIssued; - - Transfer(address(this), msg.sender, tokensIssued); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12062.sol b/data_full/CVE/2018-12062.sol deleted file mode 100644 index 32f347ce..00000000 --- a/data_full/CVE/2018-12062.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-09-09 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract SwftCoin is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function SwftCoin( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12063.sol b/data_full/CVE/2018-12063.sol deleted file mode 100644 index 37a4887d..00000000 --- a/data_full/CVE/2018-12063.sol +++ /dev/null @@ -1,184 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-26 -*/ - -pragma solidity ^0.4.13; contract owned { address public owner; - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } -contract token { /*Public variables of the token*/ string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* This notifies clients about the amount burnt */ - event Burn(address indexed from, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Send `_value` tokens to `_to` from your account - /// @param _to The address of the recipient - /// @param _value the amount to send - function transfer(address _to, uint256 _value) { - _transfer(msg.sender, _to, _value); - } - - /// @notice Send `_value` tokens to `_to` in behalf of `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value the amount to send - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require (_value < allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf - /// @param _spender The address authorized to spend - /// @param _value the max amount they can spend - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - /// @param _spender The address authorized to spend - /// @param _value the max amount they can spend - /// @param _extraData some extra information to send to the approved contract - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /// @notice Remove `_value` tokens from the system irreversibly - /// @param _value the amount of money to burn - function burn(uint256 _value) returns (bool success) { - require (balanceOf[msg.sender] > _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} -contract INTToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function INTToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} -contract INT is INTToken(1000000000000000, "Internet Node Token", 6, "INT") {} \ No newline at end of file diff --git a/data_full/CVE/2018-12067.sol b/data_full/CVE/2018-12067.sol deleted file mode 100644 index d652a4ee..00000000 --- a/data_full/CVE/2018-12067.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-07 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MyAdvancedToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12068.sol b/data_full/CVE/2018-12068.sol deleted file mode 100644 index d6bfb553..00000000 --- a/data_full/CVE/2018-12068.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-09-12 -*/ - -pragma solidity ^0.4.11; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MyAdvancedToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12070.sol b/data_full/CVE/2018-12070.sol deleted file mode 100644 index 33a7c197..00000000 --- a/data_full/CVE/2018-12070.sol +++ /dev/null @@ -1,269 +0,0 @@ -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol -) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract SECToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function SECToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol -) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - - //about lock coins - uint start = 1520956799; - uint256 SECtotalAmount = 1500000000 * 10 ** 18; - address teamaccount = 0xC32b1519A0d4E883FE136AbB3198cbC402b5503F; - - uint256 amount = _value; - address sender = _from; - uint256 balance = balanceOf[_from]; - - - if(teamaccount == sender){ - if (now < start + 365 * 1 days) { - require((balance - amount) >= SECtotalAmount/10 * 3/4); - - } else if (now < start + (2*365+1) * 1 days){ - require((balance - amount) >= SECtotalAmount/10 * 2/4); - - }else if (now < start + (3*365+1) * 1 days){ - require((balance - amount) >= SECtotalAmount/10 * 1/4); - - } - } - - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} -contract SEC is SECToken(1500000000, "SEC", "SEC") {} diff --git a/data_full/CVE/2018-12078.sol b/data_full/CVE/2018-12078.sol deleted file mode 100644 index 8dee90eb..00000000 --- a/data_full/CVE/2018-12078.sol +++ /dev/null @@ -1,145 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-10-03 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - revert(); // Prevents accidental sending of ether - } -} - -contract PolyAi is owned, token { - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function PolyAi( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12079.sol b/data_full/CVE/2018-12079.sol deleted file mode 100644 index d652a4ee..00000000 --- a/data_full/CVE/2018-12079.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-07 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MyAdvancedToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12080.sol b/data_full/CVE/2018-12080.sol deleted file mode 100644 index 37a4887d..00000000 --- a/data_full/CVE/2018-12080.sol +++ /dev/null @@ -1,184 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-26 -*/ - -pragma solidity ^0.4.13; contract owned { address public owner; - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } -contract token { /*Public variables of the token*/ string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* This notifies clients about the amount burnt */ - event Burn(address indexed from, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Send `_value` tokens to `_to` from your account - /// @param _to The address of the recipient - /// @param _value the amount to send - function transfer(address _to, uint256 _value) { - _transfer(msg.sender, _to, _value); - } - - /// @notice Send `_value` tokens to `_to` in behalf of `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value the amount to send - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require (_value < allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf - /// @param _spender The address authorized to spend - /// @param _value the max amount they can spend - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - /// @param _spender The address authorized to spend - /// @param _value the max amount they can spend - /// @param _extraData some extra information to send to the approved contract - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /// @notice Remove `_value` tokens from the system irreversibly - /// @param _value the amount of money to burn - function burn(uint256 _value) returns (bool success) { - require (balanceOf[msg.sender] > _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} -contract INTToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function INTToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} -contract INT is INTToken(1000000000000000, "Internet Node Token", 6, "INT") {} \ No newline at end of file diff --git a/data_full/CVE/2018-12081.sol b/data_full/CVE/2018-12081.sol deleted file mode 100644 index d6bfb553..00000000 --- a/data_full/CVE/2018-12081.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-09-12 -*/ - -pragma solidity ^0.4.11; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MyAdvancedToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12082.sol b/data_full/CVE/2018-12082.sol deleted file mode 100644 index 9a175780..00000000 --- a/data_full/CVE/2018-12082.sol +++ /dev/null @@ -1,168 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-04 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - revert(); // Prevents accidental sending of ether - } -} - -contract FujintoToken is owned, token { - - uint public buyRate = 4000; // price of one token - bool public isSelling = true; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function FujintoToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - - function buy() payable { - if(isSelling == false) revert(); - uint amount = msg.value * buyRate; // calculates the amount - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[owner] -= amount; // subtracts amount from seller's balance - Transfer(owner, msg.sender, amount); // execute an event reflecting the change - } - - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12083.sol b/data_full/CVE/2018-12083.sol deleted file mode 100644 index 49a3fab6..00000000 --- a/data_full/CVE/2018-12083.sol +++ /dev/null @@ -1,117 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-11-14 -*/ - -pragma solidity ^0.4.18; - -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - function changeOwner(address newOwner) onlyOwner { - owner = newOwner; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract GoalToken is owned { - /* Public variables of the token */ - string public name = "GOAL Bonanza"; - string public symbol = "GOAL"; - uint8 public decimals = 18; - uint256 public totalSupply = 0; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - event Burn(address indexed from, uint256 value); - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Send `_value` tokens to `_to` from your account - /// @param _to The address of the recipient - /// @param _value the amount to send - function transfer(address _to, uint256 _value) { - _transfer(msg.sender, _to, _value); - } - - /// @notice Send `_value` tokens to `_to` in behalf of `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value the amount to send - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require (_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf - /// @param _spender The address authorized to spend - /// @param _value the max amount they can spend - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - /// @param _spender The address authorized to spend - /// @param _value the max amount they can spend - /// @param _extraData some extra information to send to the approved contract - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /// @notice Remove `_value` tokens from the system irreversibly - /// @param _value the amount of money to burn - function burn(uint256 _value) returns (bool success) { - require (balanceOf[msg.sender] > _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(this, target, mintedAmount); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12084.sol b/data_full/CVE/2018-12084.sol deleted file mode 100644 index f0b1c78f..00000000 --- a/data_full/CVE/2018-12084.sol +++ /dev/null @@ -1,153 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-07-25 -*/ - -pragma solidity ^0.4.13; - -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - -} - -contract tokenRecipient { - - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); - -} - -contract token { - - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins e.g. exchange transfer our token */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - revert(); // Prevents accidental sending of ether - } -} - -contract BitAseanToken is owned, token { - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function BitAseanToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - -} \ No newline at end of file diff --git a/data_full/CVE/2018-12230.sol b/data_full/CVE/2018-12230.sol deleted file mode 100644 index 08f46699..00000000 --- a/data_full/CVE/2018-12230.sol +++ /dev/null @@ -1,161 +0,0 @@ -pragma solidity ^0.4.2; - -contract ERC20Interface { - - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - - // Triggered when tokens are transferred. - event Transfer(address indexed _from, address indexed _to, uint256 _value); - - // Triggered whenever approve(address _spender, uint256 _value) is called. - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - -} - -contract Owner { - //For storing the owner address - address public owner; - - //Constructor for assign a address for owner property(It will be address who deploy the contract) - function Owner() { - owner = msg.sender; - } - - //This is modifier (a special function) which will execute before the function execution on which it applied - modifier onlyOwner() { - if(msg.sender != owner) throw; - //This statement replace with the code of fucntion on which modifier is applied - _; - } - //Here is the example of modifier this function code replace _; statement of modifier - function transferOwnership(address new_owner) onlyOwner { - owner = new_owner; - } -} - -contract RemiCoin is ERC20Interface,Owner { - - //Common information about coin - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - //Balance property which should be always associate with an address - mapping(address => uint256) balances; - //frozenAccount property which should be associate with an address - mapping (address => bool) public frozenAccount; - // Owner of account approves the transfer of an amount to another account - mapping(address => mapping (address => uint256)) allowed; - - //These generates a public event on the blockchain that will notify clients - event FrozenFunds(address target, bool frozen); - - //Construtor for initial supply (The address who deployed the contract will get it) and important information - function RemiCoin(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { - balances[msg.sender] = initial_supply; - name = _name; - symbol = _symbol; - decimals = _decimal; - totalSupply = initial_supply; - } - - // What is the balance of a particular account? - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - //Function for transer the coin from one address to another - function transfer(address to, uint value) returns (bool success) { - - //checking account is freeze or not - if (frozenAccount[msg.sender]) return false; - - //checking the sender should have enough coins - if(balances[msg.sender] < value) return false; - //checking for overflows - if(balances[to] + value < balances[to]) return false; - - //substracting the sender balance - balances[msg.sender] -= value; - //adding the reciever balance - balances[to] += value; - - // Notify anyone listening that this transfer took place - Transfer(msg.sender, to, value); - - return true; - } - - - //Function for transer the coin from one address to another - function transferFrom(address from, address to, uint value) returns (bool success) { - - //checking account is freeze or not - if (frozenAccount[msg.sender]) return false; - - //checking the from should have enough coins - if(balances[from] < value) return false; - - //checking for allowance - if( allowed[from][msg.sender] >= value ) return false; - - //checking for overflows - if(balances[to] + value < balances[to]) return false; - - balances[from] -= value; - allowed[from][msg.sender] -= value; - balances[to] += value; - - // Notify anyone listening that this transfer took place - Transfer(from, to, value); - - return true; - } - - // - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - // - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - // - function mintToken(address target, uint256 mintedAmount) onlyOwner{ - balances[target] += mintedAmount; - totalSupply += mintedAmount; - - Transfer(0,owner,mintedAmount); - Transfer(owner,target,mintedAmount); - } - - // - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - // - function changeName(string _name) onlyOwner { - name = _name; - } - - // - function changeSymbol(string _symbol) onlyOwner { - symbol = _symbol; - } - - // - function changeDecimals(uint8 _decimals) onlyOwner { - decimals = _decimals; - } -} diff --git a/data_full/CVE/2018-12454.sol b/data_full/CVE/2018-12454.sol deleted file mode 100644 index a403a01e..00000000 --- a/data_full/CVE/2018-12454.sol +++ /dev/null @@ -1,148 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-11-25 -*/ - -pragma solidity ^0.4.11; -contract simplelottery { - enum State { Started, Locked } - State public state = State.Started; - struct Guess{ - address addr; - //uint guess; - } - uint arraysize=1000; - uint constant maxguess=1000000; - uint bettingprice = 1 ether; - Guess[1000] guesses; - uint numguesses = 0; - bytes32 curhash = ''; - uint _gameindex = 1; - uint _starttime = 0; - modifier inState(State _state) { - require(state == _state); - _; - } - address developer = 0x0; - address _winner = 0x0; - event SentPrizeToWinner(address winner, uint money, uint gameindex, uint lotterynumber, uint starttime, uint finishtime); - event SentDeveloperFee(uint amount, uint balance); - - function simplelottery() - { - if(developer==address(0)){ - developer = msg.sender; - state = State.Started; - _starttime = block.timestamp; - } - } - - function setBettingCondition(uint _contenders, uint _bettingprice) - { - if(msg.sender != developer) - return; - arraysize = _contenders; - if(arraysize>1000) - arraysize = 1000; - bettingprice = _bettingprice; - } - - function findWinner(uint value) - { - uint i = value % numguesses; - _winner = guesses[i].addr; - } - - function getMaxContenders() constant returns(uint){ - return arraysize; - } - - function getBettingPrice() constant returns(uint){ - return bettingprice; - } - - function getDeveloperAddress() constant returns(address) - { - return developer; - } - - function getDeveloperFee() constant returns(uint) - { - uint developerfee = this.balance/100; - return developerfee; - } - - function getBalance() constant returns(uint) - { - return this.balance; - } - - function getLotteryMoney() constant returns(uint) - { - uint developerfee = getDeveloperFee(); - uint prize = (this.balance - developerfee); - return prize; - } - - function getBettingStatus() - constant - returns (uint, uint, uint, uint, uint, uint, uint) - { - return ((uint)(state), _gameindex, _starttime, numguesses, getLotteryMoney(), this.balance, bettingprice); - } - - - - function finish() - { - if(msg.sender != developer) - return; - _finish(); - } - - function _finish() private - { - state = State.Locked; - uint block_timestamp = block.timestamp; - uint lotterynumber = (uint(curhash)+block_timestamp)%(maxguess+1); - findWinner(lotterynumber); - uint prize = getLotteryMoney(); - uint numwinners = 1; - uint remain = this.balance - (prize*numwinners); - - _winner.transfer(prize); - SentPrizeToWinner(_winner, prize, _gameindex, lotterynumber, _starttime, block_timestamp); - - // give delveoper the money left behind - developer.transfer(remain); - SentDeveloperFee(remain, this.balance); - numguesses = 0; - _gameindex++; - state = State.Started; - _starttime = block.timestamp; - } - - function () payable - { - _addguess(); - } - - function addguess() - inState(State.Started) - payable - { - _addguess(); - } - - function _addguess() private - inState(State.Started) - { - require(msg.value >= bettingprice); - curhash = sha256(block.timestamp, block.coinbase, block.difficulty, curhash); - if((uint)(numguesses+1)<=arraysize) { - guesses[numguesses++].addr = msg.sender; - if((uint)(numguesses)>=arraysize){ - _finish(); - } - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12511.sol b/data_full/CVE/2018-12511.sol deleted file mode 100644 index c8b0de47..00000000 --- a/data_full/CVE/2018-12511.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-07 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MyAdvancedToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12702.sol b/data_full/CVE/2018-12702.sol deleted file mode 100644 index 13826eb0..00000000 --- a/data_full/CVE/2018-12702.sol +++ /dev/null @@ -1,142 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-12-26 -*/ - -// Abstract contract for the full ERC 20 Token standard -// https://github.com/ethereum/EIPs/issues/20 -pragma solidity ^0.4.16; - -contract Token { - /* This is a slight change to the ERC20 base standard. - function totalSupply() constant returns (uint256 supply); - is replaced with: - uint256 public totalSupply; - This automatically creates a getter function for the totalSupply. - This is moved to the base contract since public getter functions are not - currently recognised as an implementation of the matching abstract - function by the compiler. - */ - /// total amount of tokens - uint256 public totalSupply; - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) constant returns (uint256 balance); - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) returns (bool success); - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - - /// @notice `msg.sender` approves `_spender` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of tokens to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) returns (bool success); - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - - -contract StandardToken is Token { - - function transfer(address _to, uint256 _value) returns (bool success) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - //Default assumes totalSupply can't be over max (2^256 - 1). - //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. - //Replace the if with this one instead. - require(balances[_to] + _value > balances[_to]); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - //same as above. Replace this line with the following if you want to protect against wrapping uints. - require(balances[_to] + _value > balances[_to]); - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} - -contract GVE is StandardToken { - - function () { - //if ether is sent to this address, send it back. - revert(); - } - - string public name = "Globalvillage ecosystem"; //fancy name: eg Simon Bucks - uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. - string public symbol = "GVE"; //An identifier: eg SBX - string public version = 'v0.1'; //gve 0.1 standard. Just an arbitrary versioning scheme. - - address public founder; // The address of the founder - - function GVE() { - founder = msg.sender; - totalSupply = 1000000000 * 10 ** uint256(decimals); - balances[founder] = totalSupply; - } - - /* Approves and then calls the receiving contract */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. - //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) - //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } - return true; - } - - /* Approves and then calls the contract code*/ - function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //Call the contract code - if(!_spender.call(_extraData)) { revert(); } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12703.sol b/data_full/CVE/2018-12703.sol deleted file mode 100644 index ead0510c..00000000 --- a/data_full/CVE/2018-12703.sol +++ /dev/null @@ -1,142 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-01-04 -*/ - -// Abstract contract for the full ERC 20 Token standard -// https://github.com/ethereum/EIPs/issues/20 -pragma solidity ^0.4.16; - -contract Token { - /* This is a slight change to the ERC20 base standard. - function totalSupply() constant returns (uint256 supply); - is replaced with: - uint256 public totalSupply; - This automatically creates a getter function for the totalSupply. - This is moved to the base contract since public getter functions are not - currently recognised as an implementation of the matching abstract - function by the compiler. - */ - /// total amount of tokens - uint256 public totalSupply; - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) constant returns (uint256 balance); - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) returns (bool success); - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - - /// @notice `msg.sender` approves `_spender` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of tokens to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) returns (bool success); - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - - -contract StandardToken is Token { - - function transfer(address _to, uint256 _value) returns (bool success) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - //Default assumes totalSupply can't be over max (2^256 - 1). - //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. - //Replace the if with this one instead. - require(balances[_to] + _value > balances[_to]); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - //same as above. Replace this line with the following if you want to protect against wrapping uints. - require(balances[_to] + _value > balances[_to]); - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} - -contract EightteenToken is StandardToken { - - function () { - //if ether is sent to this address, send it back. - revert(); - } - - string public name = "Block 18"; //fancy name: eg Simon Bucks - uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. - string public symbol = "18T"; //An identifier: eg SBX - string public version = 'v0.1'; //18t 0.1 standard. Just an arbitrary versioning scheme. - - address public founder; // The address of the founder - - function EightteenToken() { - founder = msg.sender; - totalSupply = 1000000000 * 10 ** uint256(decimals); - balances[founder] = totalSupply; - } - - /* Approves and then calls the receiving contract */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. - //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) - //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } - return true; - } - - /* Approves and then calls the contract code*/ - function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //Call the contract code - if(!_spender.call(_extraData)) { revert(); } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12885.sol b/data_full/CVE/2018-12885.sol deleted file mode 100644 index 124b5f2f..00000000 --- a/data_full/CVE/2018-12885.sol +++ /dev/null @@ -1,1149 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-05-14 -*/ - -pragma solidity 0.4.23; - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - /** - * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). - */ - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - /** - * @dev Adds two numbers, throws on overflow. - */ - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title Ownable - * @dev The Ownable contract has an owner address, and provides basic authorization control - * functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { - address internal contractOwner; - - constructor () internal { - if(contractOwner == address(0)){ - contractOwner = msg.sender; - } - } - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == contractOwner); - _; - } - - - /** - * @dev Allows the current owner to transfer control of the contract to a newOwner. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) public onlyOwner { - require(newOwner != address(0)); - contractOwner = newOwner; - } - -} - - -/** - * @title Pausable - * @dev Base contract which allows children to implement an emergency stop mechanism. - */ -contract Pausable is Ownable { - bool private paused = false; - - /** - * @dev Modifier to allow actions only when the contract IS paused - @dev If is paused msg.value is send back - */ - modifier whenNotPaused() { - if(paused == true && msg.value > 0){ - msg.sender.transfer(msg.value); - } - require(!paused); - _; - } - - - /** - * @dev Called by the owner to pause, triggers stopped state - */ - function triggerPause() onlyOwner external { - paused = !paused; - } - -} - - -/// @title A contract for creating new champs and making withdrawals -contract ChampFactory is Pausable{ - - event NewChamp(uint256 champID, address owner); - - using SafeMath for uint; //SafeMath for overflow prevention - - /* - * Variables - */ - struct Champ { - uint256 id; //same as position in Champ[] - uint256 attackPower; - uint256 defencePower; - uint256 cooldownTime; //how long does it take to be ready attack again - uint256 readyTime; //if is smaller than block.timestamp champ is ready to fight - uint256 winCount; - uint256 lossCount; - uint256 position; //position in leaderboard. subtract 1 and you got position in leaderboard[] - uint256 price; //selling price - uint256 withdrawCooldown; //if you one of the 800 best champs and withdrawCooldown is less as block.timestamp then you get ETH reward - uint256 eq_sword; - uint256 eq_shield; - uint256 eq_helmet; - bool forSale; //is champ for sale? - } - - struct AddressInfo { - uint256 withdrawal; - uint256 champsCount; - uint256 itemsCount; - string name; - } - - //Item struct - struct Item { - uint8 itemType; // 1 - Sword | 2 - Shield | 3 - Helmet - uint8 itemRarity; // 1 - Common | 2 - Uncommon | 3 - Rare | 4 - Epic | 5 - Legendery | 6 - Forged - uint256 attackPower; - uint256 defencePower; - uint256 cooldownReduction; - uint256 price; - uint256 onChampId; //can not be used to decide if item is on champ, because champ's id can be 0, 'bool onChamp' solves it. - bool onChamp; - bool forSale; //is item for sale? - } - - mapping (address => AddressInfo) public addressInfo; - mapping (uint256 => address) public champToOwner; - mapping (uint256 => address) public itemToOwner; - mapping (uint256 => string) public champToName; - - Champ[] public champs; - Item[] public items; - uint256[] public leaderboard; - - uint256 internal createChampFee = 5 finney; - uint256 internal lootboxFee = 5 finney; - uint256 internal pendingWithdrawal = 0; - uint256 private randNonce = 0; //being used in generating random numbers - uint256 public champsForSaleCount; - uint256 public itemsForSaleCount; - - - /* - * Modifiers - */ - /// @dev Checks if msg.sender is owner of champ - modifier onlyOwnerOfChamp(uint256 _champId) { - require(msg.sender == champToOwner[_champId]); - _; - } - - - /// @dev Checks if msg.sender is NOT owner of champ - modifier onlyNotOwnerOfChamp(uint256 _champId) { - require(msg.sender != champToOwner[_champId]); - _; - } - - - /// @notice Checks if amount was sent - modifier isPaid(uint256 _price){ - require(msg.value >= _price); - _; - } - - - /// @notice People are allowed to withdraw only if min. balance (0.01 gwei) is reached - modifier contractMinBalanceReached(){ - require( (address(this).balance).sub(pendingWithdrawal) > 1000000 ); - _; - } - - - /// @notice Checks if withdraw cooldown passed - modifier isChampWithdrawReady(uint256 _id){ - require(champs[_id].withdrawCooldown < block.timestamp); - _; - } - - - /// @notice Distribute input funds between contract owner and players - modifier distributeInput(address _affiliateAddress){ - - //contract owner - uint256 contractOwnerWithdrawal = (msg.value / 100) * 50; // 50% - addressInfo[contractOwner].withdrawal += contractOwnerWithdrawal; - pendingWithdrawal += contractOwnerWithdrawal; - - //affiliate - //checks if _affiliateAddress is set & if affiliate address is not buying player - if(_affiliateAddress != address(0) && _affiliateAddress != msg.sender){ - uint256 affiliateBonus = (msg.value / 100) * 25; //provision is 25% - addressInfo[_affiliateAddress].withdrawal += affiliateBonus; - pendingWithdrawal += affiliateBonus; - } - - _; - } - - - - /* - * View - */ - /// @notice Gets champs by address - /// @param _owner Owner address - function getChampsByOwner(address _owner) external view returns(uint256[]) { - uint256[] memory result = new uint256[](addressInfo[_owner].champsCount); - uint256 counter = 0; - for (uint256 i = 0; i < champs.length; i++) { - if (champToOwner[i] == _owner) { - result[counter] = i; - counter++; - } - } - return result; - } - - - /// @notice Gets total champs count - function getChampsCount() external view returns(uint256){ - return champs.length; - } - - - /// @notice Gets champ's reward in wei - function getChampReward(uint256 _position) public view returns(uint256) { - if(_position <= 800){ - //percentageMultipier = 10,000 - //maxReward = 2000 = .2% * percentageMultipier - //subtractPerPosition = 2 = .0002% * percentageMultipier - //2000 - (2 * (_position - 1)) - uint256 rewardPercentage = uint256(2000).sub(2 * (_position - 1)); - - //available funds are all funds - already pending - uint256 availableWithdrawal = address(this).balance.sub(pendingWithdrawal); - - //calculate reward for champ's position - //1000000 = percentageMultipier * 100 - return availableWithdrawal / 1000000 * rewardPercentage; - }else{ - return uint256(0); - } - } - - - /* - * Internal - */ - /// @notice Generates random modulus - /// @param _modulus Max random modulus - function randMod(uint256 _modulus) internal returns(uint256) { - randNonce++; - return uint256(keccak256(randNonce, blockhash(block.number - 1))) % _modulus; - } - - - - /* - * External - */ - /// @notice Creates new champ - /// @param _affiliateAddress Affiliate address (optional) - function createChamp(address _affiliateAddress) external payable - whenNotPaused - isPaid(createChampFee) - distributeInput(_affiliateAddress) - { - - /* - Champ memory champ = Champ({ - id: 0, - attackPower: 2 + randMod(4), - defencePower: 1 + randMod(4), - cooldownTime: uint256(1 days) - uint256(randMod(9) * 1 hours), - readyTime: 0, - winCount: 0, - lossCount: 0, - position: leaderboard.length + 1, //Last place in leaderboard is new champ's position. Used in new champ struct bellow. +1 to avoid zero position. - price: 0, - withdrawCooldown: uint256(block.timestamp), - eq_sword: 0, - eq_shield: 0, - eq_helmet: 0, - forSale: false - }); - */ - - // This line bellow is about 30k gas cheaper than lines above. They are the same. Lines above are just more readable. - uint256 id = champs.push(Champ(0, 2 + randMod(4), 1 + randMod(4), uint256(1 days) - uint256(randMod(9) * 1 hours), 0, 0, 0, leaderboard.length + 1, 0, uint256(block.timestamp), 0,0,0, false)) - 1; - - - champs[id].id = id; //sets id in Champ struct - leaderboard.push(id); //push champ on the last place in leaderboard - champToOwner[id] = msg.sender; //sets owner of this champ - msg.sender - addressInfo[msg.sender].champsCount++; - - emit NewChamp(id, msg.sender); - - } - - - /// @notice Change "CreateChampFee". If ETH price will grow up it can expensive to create new champ. - /// @param _fee New "CreateChampFee" - /// @dev Only owner of contract can change "CreateChampFee" - function setCreateChampFee(uint256 _fee) external onlyOwner { - createChampFee = _fee; - } - - - /// @notice Change champ's name - function changeChampsName(uint _champId, string _name) external - onlyOwnerOfChamp(_champId){ - champToName[_champId] = _name; - } - - - /// @notice Change players's name - function changePlayersName(string _name) external { - addressInfo[msg.sender].name = _name; - } - - - /// @notice Withdraw champ's reward - /// @param _id Champ id - /// @dev Move champ reward to pending withdrawal to his wallet. - function withdrawChamp(uint _id) external - onlyOwnerOfChamp(_id) - contractMinBalanceReached - isChampWithdrawReady(_id) - whenNotPaused { - Champ storage champ = champs[_id]; - require(champ.position <= 800); - - champ.withdrawCooldown = block.timestamp + 1 days; //one withdrawal 1 per day - - uint256 withdrawal = getChampReward(champ.position); - addressInfo[msg.sender].withdrawal += withdrawal; - pendingWithdrawal += withdrawal; - } - - - /// @dev Send all pending funds of caller's address - function withdrawToAddress(address _address) external - whenNotPaused { - address playerAddress = _address; - if(playerAddress == address(0)){ playerAddress = msg.sender; } - uint256 share = addressInfo[playerAddress].withdrawal; //gets pending funds - require(share > 0); //is it more than 0? - - //first sets players withdrawal pending to 0 and subtract amount from playerWithdrawals then transfer funds to avoid reentrancy - addressInfo[playerAddress].withdrawal = 0; //set player's withdrawal pendings to 0 - pendingWithdrawal = pendingWithdrawal.sub(share); //subtract share from total pendings - - playerAddress.transfer(share); //transfer - } - -} - - - -/// @title Moderates items and creates new ones -contract Items is ChampFactory { - - event NewItem(uint256 itemID, address owner); - - constructor () internal { - //item -> nothing - items.push(Item(0, 0, 0, 0, 0, 0, 0, false, false)); - } - - /* - * Modifiers - */ - /// @notice Checks if sender is owner of item - modifier onlyOwnerOfItem(uint256 _itemId) { - require(_itemId != 0); - require(msg.sender == itemToOwner[_itemId]); - _; - } - - - /// @notice Checks if sender is NOT owner of item - modifier onlyNotOwnerOfItem(uint256 _itemId) { - require(msg.sender != itemToOwner[_itemId]); - _; - } - - - /* - * View - */ - ///@notice Check if champ has something on - ///@param _type Sword, shield or helmet - function hasChampSomethingOn(uint _champId, uint8 _type) internal view returns(bool){ - Champ storage champ = champs[_champId]; - if(_type == 1){ - return (champ.eq_sword == 0) ? false : true; - } - if(_type == 2){ - return (champ.eq_shield == 0) ? false : true; - } - if(_type == 3){ - return (champ.eq_helmet == 0) ? false : true; - } - } - - - /// @notice Gets items by address - /// @param _owner Owner address - function getItemsByOwner(address _owner) external view returns(uint256[]) { - uint256[] memory result = new uint256[](addressInfo[_owner].itemsCount); - uint256 counter = 0; - for (uint256 i = 0; i < items.length; i++) { - if (itemToOwner[i] == _owner) { - result[counter] = i; - counter++; - } - } - return result; - } - - - /* - * Public - */ - ///@notice Takes item off champ - function takeOffItem(uint _champId, uint8 _type) public - onlyOwnerOfChamp(_champId) { - uint256 itemId; - Champ storage champ = champs[_champId]; - if(_type == 1){ - itemId = champ.eq_sword; //Get item ID - if (itemId > 0) { //0 = nothing - champ.eq_sword = 0; //take off sword - } - } - if(_type == 2){ - itemId = champ.eq_shield; //Get item ID - if(itemId > 0) {//0 = nothing - champ.eq_shield = 0; //take off shield - } - } - if(_type == 3){ - itemId = champ.eq_helmet; //Get item ID - if(itemId > 0) { //0 = nothing - champ.eq_helmet = 0; //take off - } - } - if(itemId > 0){ - items[itemId].onChamp = false; //item is free to use, is not on champ - } - } - - - - /* - * External - */ - ///@notice Puts item on champ - function putOn(uint256 _champId, uint256 _itemId) external - onlyOwnerOfChamp(_champId) - onlyOwnerOfItem(_itemId) { - Champ storage champ = champs[_champId]; - Item storage item = items[_itemId]; - - //checks if items is on some other champ - if(item.onChamp){ - takeOffItem(item.onChampId, item.itemType); //take off from champ - } - - item.onChamp = true; //item is on champ - item.onChampId = _champId; //champ's id - - //put on - if(item.itemType == 1){ - //take off actual sword - if(champ.eq_sword > 0){ - takeOffItem(champ.id, 1); - } - champ.eq_sword = _itemId; //put on sword - } - if(item.itemType == 2){ - //take off actual shield - if(champ.eq_shield > 0){ - takeOffItem(champ.id, 2); - } - champ.eq_shield = _itemId; //put on shield - } - if(item.itemType == 3){ - //take off actual helmet - if(champ.eq_helmet > 0){ - takeOffItem(champ.id, 3); - } - champ.eq_helmet = _itemId; //put on helmet - } - } - - - - /// @notice Opens loot box and generates new item - function openLootbox(address _affiliateAddress) external payable - whenNotPaused - isPaid(lootboxFee) - distributeInput(_affiliateAddress) { - - uint256 pointToCooldownReduction; - uint256 randNum = randMod(1001); //random number <= 1000 - uint256 pointsToShare; //total points given - uint256 itemID; - - //sets up item - Item memory item = Item({ - itemType: uint8(uint256(randMod(3) + 1)), //generates item type - max num is 2 -> 0 + 1 SWORD | 1 + 1 SHIELD | 2 + 1 HELMET; - itemRarity: uint8(0), - attackPower: 0, - defencePower: 0, - cooldownReduction: 0, - price: 0, - onChampId: 0, - onChamp: false, - forSale: false - }); - - // Gets Rarity of item - // 45% common - // 27% uncommon - // 19% rare - // 7% epic - // 2% legendary - if(450 > randNum){ - pointsToShare = 25 + randMod(9); //25 basic + random number max to 8 - item.itemRarity = uint8(1); - }else if(720 > randNum){ - pointsToShare = 42 + randMod(17); //42 basic + random number max to 16 - item.itemRarity = uint8(2); - }else if(910 > randNum){ - pointsToShare = 71 + randMod(25); //71 basic + random number max to 24 - item.itemRarity = uint8(3); - }else if(980 > randNum){ - pointsToShare = 119 + randMod(33); //119 basic + random number max to 32 - item.itemRarity = uint8(4); - }else{ - pointsToShare = 235 + randMod(41); //235 basic + random number max to 40 - item.itemRarity = uint8(5); - } - - - //Gets type of item - if(item.itemType == uint8(1)){ //ITEM IS SWORDS - item.attackPower = pointsToShare / 10 * 7; //70% attackPower - pointsToShare -= item.attackPower; //points left; - - item.defencePower = pointsToShare / 10 * randMod(6); //up to 15% defencePower - pointsToShare -= item.defencePower; //points left; - - item.cooldownReduction = pointsToShare * uint256(1 minutes); //rest of points is cooldown reduction - item.itemType = uint8(1); - } - - if(item.itemType == uint8(2)){ //ITEM IS SHIELD - item.defencePower = pointsToShare / 10 * 7; //70% defencePower - pointsToShare -= item.defencePower; //points left; - - item.attackPower = pointsToShare / 10 * randMod(6); //up to 15% attackPowerPower - pointsToShare -= item.attackPower; //points left; - - item.cooldownReduction = pointsToShare * uint256(1 minutes); //rest of points is cooldown reduction - item.itemType = uint8(2); - } - - if(item.itemType == uint8(3)){ //ITEM IS HELMET - pointToCooldownReduction = pointsToShare / 10 * 7; //70% cooldown reduction - item.cooldownReduction = pointToCooldownReduction * uint256(1 minutes); //points to time - pointsToShare -= pointToCooldownReduction; //points left; - - item.attackPower = pointsToShare / 10 * randMod(6); //up to 15% attackPower - pointsToShare -= item.attackPower; //points left; - - item.defencePower = pointsToShare; //rest of points is defencePower - item.itemType = uint8(3); - } - - itemID = items.push(item) - 1; - - itemToOwner[itemID] = msg.sender; //sets owner of this item - msg.sender - addressInfo[msg.sender].itemsCount++; //every address has count of items - - emit NewItem(itemID, msg.sender); - - } - - /// @notice Change "lootboxFee". - /// @param _fee New "lootboxFee" - /// @dev Only owner of contract can change "lootboxFee" - function setLootboxFee(uint _fee) external onlyOwner { - lootboxFee = _fee; - } -} - - - -/// @title Moderates buying and selling items -contract ItemMarket is Items { - - event TransferItem(address from, address to, uint256 itemID); - - /* - * Modifiers - */ - ///@notice Checks if item is for sale - modifier itemIsForSale(uint256 _id){ - require(items[_id].forSale); - _; - } - - ///@notice Checks if item is NOT for sale - modifier itemIsNotForSale(uint256 _id){ - require(items[_id].forSale == false); - _; - } - - ///@notice If item is for sale then cancel sale - modifier ifItemForSaleThenCancelSale(uint256 _itemID){ - Item storage item = items[_itemID]; - if(item.forSale){ - _cancelItemSale(item); - } - _; - } - - - ///@notice Distribute sale eth input - modifier distributeSaleInput(address _owner) { - uint256 contractOwnerCommision; //1% - uint256 playerShare; //99% - - if(msg.value > 100){ - contractOwnerCommision = (msg.value / 100); - playerShare = msg.value - contractOwnerCommision; - }else{ - contractOwnerCommision = 0; - playerShare = msg.value; - } - - addressInfo[_owner].withdrawal += playerShare; - addressInfo[contractOwner].withdrawal += contractOwnerCommision; - pendingWithdrawal += playerShare + contractOwnerCommision; - _; - } - - - - /* - * View - */ - function getItemsForSale() view external returns(uint256[]){ - uint256[] memory result = new uint256[](itemsForSaleCount); - if(itemsForSaleCount > 0){ - uint256 counter = 0; - for (uint256 i = 0; i < items.length; i++) { - if (items[i].forSale == true) { - result[counter]=i; - counter++; - } - } - } - return result; - } - - /* - * Private - */ - ///@notice Cancel sale. Should not be called without checking if item is really for sale. - function _cancelItemSale(Item storage item) private { - //No need to overwrite item's price - item.forSale = false; - itemsForSaleCount--; - } - - - /* - * Internal - */ - /// @notice Transfer item - function transferItem(address _from, address _to, uint256 _itemID) internal - ifItemForSaleThenCancelSale(_itemID) { - Item storage item = items[_itemID]; - - //take off - if(item.onChamp && _to != champToOwner[item.onChampId]){ - takeOffItem(item.onChampId, item.itemType); - } - - addressInfo[_to].itemsCount++; - addressInfo[_from].itemsCount--; - itemToOwner[_itemID] = _to; - - emit TransferItem(_from, _to, _itemID); - } - - - - /* - * Public - */ - /// @notice Calls transfer item - /// @notice Address _from is msg.sender. Cannot be used is market, bc msg.sender is buyer - function giveItem(address _to, uint256 _itemID) public - onlyOwnerOfItem(_itemID) { - transferItem(msg.sender, _to, _itemID); - } - - - /// @notice Calcels item's sale - function cancelItemSale(uint256 _id) public - itemIsForSale(_id) - onlyOwnerOfItem(_id){ - Item storage item = items[_id]; - _cancelItemSale(item); - } - - - /* - * External - */ - /// @notice Sets item for sale - function setItemForSale(uint256 _id, uint256 _price) external - onlyOwnerOfItem(_id) - itemIsNotForSale(_id) { - Item storage item = items[_id]; - item.forSale = true; - item.price = _price; - itemsForSaleCount++; - } - - - /// @notice Buys item - function buyItem(uint256 _id) external payable - whenNotPaused - onlyNotOwnerOfItem(_id) - itemIsForSale(_id) - isPaid(items[_id].price) - distributeSaleInput(itemToOwner[_id]) - { - transferItem(itemToOwner[_id], msg.sender, _id); - } - -} - - - -/// @title Manages forging -contract ItemForge is ItemMarket { - - event Forge(uint256 forgedItemID); - - ///@notice Forge items together - function forgeItems(uint256 _parentItemID, uint256 _childItemID) external - onlyOwnerOfItem(_parentItemID) - onlyOwnerOfItem(_childItemID) - ifItemForSaleThenCancelSale(_parentItemID) - ifItemForSaleThenCancelSale(_childItemID) { - - //checks if items are not the same - require(_parentItemID != _childItemID); - - Item storage parentItem = items[_parentItemID]; - Item storage childItem = items[_childItemID]; - - //take child item off, because child item will be burned - if(childItem.onChamp){ - takeOffItem(childItem.onChampId, childItem.itemType); - } - - //update parent item - parentItem.attackPower = (parentItem.attackPower > childItem.attackPower) ? parentItem.attackPower : childItem.attackPower; - parentItem.defencePower = (parentItem.defencePower > childItem.defencePower) ? parentItem.defencePower : childItem.defencePower; - parentItem.cooldownReduction = (parentItem.cooldownReduction > childItem.cooldownReduction) ? parentItem.cooldownReduction : childItem.cooldownReduction; - parentItem.itemRarity = uint8(6); - - //burn child item - transferItem(msg.sender, address(0), _childItemID); - - emit Forge(_parentItemID); - } - -} - - -/// @title Manages attacks in game -contract ChampAttack is ItemForge { - - event Attack(uint256 winnerChampID, uint256 defeatedChampID, bool didAttackerWin); - - /* - * Modifiers - */ - /// @notice Is champ ready to fight again? - modifier isChampReady(uint256 _champId) { - require (champs[_champId].readyTime <= block.timestamp); - _; - } - - - /// @notice Prevents from self-attack - modifier notSelfAttack(uint256 _champId, uint256 _targetId) { - require(_champId != _targetId); - _; - } - - - /// @notice Checks if champ does exist - modifier targetExists(uint256 _targetId){ - require(champToOwner[_targetId] != address(0)); - _; - } - - - /* - * View - */ - /// @notice Gets champ's attack power, defence power and cooldown reduction with items on - function getChampStats(uint256 _champId) public view returns(uint256,uint256,uint256){ - Champ storage champ = champs[_champId]; - Item storage sword = items[champ.eq_sword]; - Item storage shield = items[champ.eq_shield]; - Item storage helmet = items[champ.eq_helmet]; - - //AP - uint256 totalAttackPower = champ.attackPower + sword.attackPower + shield.attackPower + helmet.attackPower; //Gets champs AP - - //DP - uint256 totalDefencePower = champ.defencePower + sword.defencePower + shield.defencePower + helmet.defencePower; //Gets champs DP - - //CR - uint256 totalCooldownReduction = sword.cooldownReduction + shield.cooldownReduction + helmet.cooldownReduction; //Gets CR - - return (totalAttackPower, totalDefencePower, totalCooldownReduction); - } - - - /* - * Pure - */ - /// @notice Subtracts ability points. Helps to not cross minimal attack ability points -> 2 - /// @param _playerAttackPoints Actual player's attack points - /// @param _x Amount to subtract - function subAttack(uint256 _playerAttackPoints, uint256 _x) internal pure returns (uint256) { - return (_playerAttackPoints <= _x + 2) ? 2 : _playerAttackPoints - _x; - } - - - /// @notice Subtracts ability points. Helps to not cross minimal defence ability points -> 1 - /// @param _playerDefencePoints Actual player's defence points - /// @param _x Amount to subtract - function subDefence(uint256 _playerDefencePoints, uint256 _x) internal pure returns (uint256) { - return (_playerDefencePoints <= _x) ? 1 : _playerDefencePoints - _x; - } - - - /* - * Private - */ - /// @dev Is called from from Attack function after the winner is already chosen - /// @dev Updates abilities, champ's stats and swaps positions - function _attackCompleted(Champ storage _winnerChamp, Champ storage _defeatedChamp, uint256 _pointsGiven, uint256 _pointsToAttackPower) private { - /* - * Updates abilities after fight - */ - //winner abilities update - _winnerChamp.attackPower += _pointsToAttackPower; //increase attack power - _winnerChamp.defencePower += _pointsGiven - _pointsToAttackPower; //max point that was given - already given to AP - - //defeated champ's abilities update - //checks for not cross minimal AP & DP points - _defeatedChamp.attackPower = subAttack(_defeatedChamp.attackPower, _pointsToAttackPower); //decrease attack power - _defeatedChamp.defencePower = subDefence(_defeatedChamp.defencePower, _pointsGiven - _pointsToAttackPower); // decrease defence power - - - - /* - * Update champs' wins and losses - */ - _winnerChamp.winCount++; - _defeatedChamp.lossCount++; - - - - /* - * Swap positions - */ - if(_winnerChamp.position > _defeatedChamp.position) { //require loser to has better (lower) postion than attacker - uint256 winnerPosition = _winnerChamp.position; - uint256 loserPosition = _defeatedChamp.position; - - _defeatedChamp.position = winnerPosition; - _winnerChamp.position = loserPosition; - - //position in champ struct is always one point bigger than in leaderboard array - leaderboard[winnerPosition - 1] = _defeatedChamp.id; - leaderboard[loserPosition - 1] = _winnerChamp.id; - } - } - - - /// @dev Gets pointsGiven and pointsToAttackPower - function _getPoints(uint256 _pointsGiven) private returns (uint256 pointsGiven, uint256 pointsToAttackPower){ - return (_pointsGiven, randMod(_pointsGiven+1)); - } - - - - /* - * External - */ - /// @notice Attack function - /// @param _champId Attacker champ - /// @param _targetId Target champ - function attack(uint256 _champId, uint256 _targetId) external - onlyOwnerOfChamp(_champId) - isChampReady(_champId) - notSelfAttack(_champId, _targetId) - targetExists(_targetId) { - Champ storage myChamp = champs[_champId]; - Champ storage enemyChamp = champs[_targetId]; - uint256 pointsGiven; //total points that will be divided between AP and DP - uint256 pointsToAttackPower; //part of points that will be added to attack power, the rest of points go to defence power - uint256 myChampAttackPower; - uint256 enemyChampDefencePower; - uint256 myChampCooldownReduction; - - (myChampAttackPower,,myChampCooldownReduction) = getChampStats(_champId); - (,enemyChampDefencePower,) = getChampStats(_targetId); - - - //if attacker's AP is more than target's DP then attacker wins - if (myChampAttackPower > enemyChampDefencePower) { - - //this should demotivate players from farming on way weaker champs than they are - //the bigger difference between AP & DP is, the reward is smaller - if(myChampAttackPower - enemyChampDefencePower < 5){ - - //big experience - 3 ability points - (pointsGiven, pointsToAttackPower) = _getPoints(3); - - - }else if(myChampAttackPower - enemyChampDefencePower < 10){ - - //medium experience - 2 ability points - (pointsGiven, pointsToAttackPower) = _getPoints(2); - - }else{ - - //small experience - 1 ability point to random ability (attack power or defence power) - (pointsGiven, pointsToAttackPower) = _getPoints(1); - - } - - _attackCompleted(myChamp, enemyChamp, pointsGiven, pointsToAttackPower); - - emit Attack(myChamp.id, enemyChamp.id, true); - - } else { - - //1 ability point to random ability (attack power or defence power) - (pointsGiven, pointsToAttackPower) = _getPoints(1); - - _attackCompleted(enemyChamp, myChamp, pointsGiven, pointsToAttackPower); - - emit Attack(enemyChamp.id, myChamp.id, false); - - } - - //Trigger cooldown for attacker - myChamp.readyTime = uint256(block.timestamp + myChamp.cooldownTime - myChampCooldownReduction); - - } - -} - - -/// @title Moderates buying and selling champs -contract ChampMarket is ChampAttack { - - event TransferChamp(address from, address to, uint256 champID); - - /* - * Modifiers - */ - ///@notice Require champ to be sale - modifier champIsForSale(uint256 _id){ - require(champs[_id].forSale); - _; - } - - - ///@notice Require champ NOT to be for sale - modifier champIsNotForSale(uint256 _id){ - require(champs[_id].forSale == false); - _; - } - - - ///@notice If champ is for sale then cancel sale - modifier ifChampForSaleThenCancelSale(uint256 _champID){ - Champ storage champ = champs[_champID]; - if(champ.forSale){ - _cancelChampSale(champ); - } - _; - } - - - /* - * View - */ - ///@notice Gets all champs for sale - function getChampsForSale() view external returns(uint256[]){ - uint256[] memory result = new uint256[](champsForSaleCount); - if(champsForSaleCount > 0){ - uint256 counter = 0; - for (uint256 i = 0; i < champs.length; i++) { - if (champs[i].forSale == true) { - result[counter]=i; - counter++; - } - } - } - return result; - } - - - /* - * Private - */ - ///@dev Cancel sale. Should not be called without checking if champ is really for sale. - function _cancelChampSale(Champ storage champ) private { - //cancel champ's sale - //no need waste gas to overwrite his price. - champ.forSale = false; - champsForSaleCount--; - } - - - /* - * Internal - */ - /// @notice Transfer champ - function transferChamp(address _from, address _to, uint256 _champId) internal ifChampForSaleThenCancelSale(_champId){ - Champ storage champ = champs[_champId]; - - //transfer champ - addressInfo[_to].champsCount++; - addressInfo[_from].champsCount--; - champToOwner[_champId] = _to; - - //transfer items - if(champ.eq_sword != 0) { transferItem(_from, _to, champ.eq_sword); } - if(champ.eq_shield != 0) { transferItem(_from, _to, champ.eq_shield); } - if(champ.eq_helmet != 0) { transferItem(_from, _to, champ.eq_helmet); } - - emit TransferChamp(_from, _to, _champId); - } - - - - /* - * Public - */ - /// @notice Champ is no more for sale - function cancelChampSale(uint256 _id) public - champIsForSale(_id) - onlyOwnerOfChamp(_id) { - Champ storage champ = champs[_id]; - _cancelChampSale(champ); - } - - - /* - * External - */ - /// @notice Gift champ - /// @dev Address _from is msg.sender - function giveChamp(address _to, uint256 _champId) external - onlyOwnerOfChamp(_champId) { - transferChamp(msg.sender, _to, _champId); - } - - - /// @notice Sets champ for sale - function setChampForSale(uint256 _id, uint256 _price) external - onlyOwnerOfChamp(_id) - champIsNotForSale(_id) { - Champ storage champ = champs[_id]; - champ.forSale = true; - champ.price = _price; - champsForSaleCount++; - } - - - /// @notice Buys champ - function buyChamp(uint256 _id) external payable - whenNotPaused - onlyNotOwnerOfChamp(_id) - champIsForSale(_id) - isPaid(champs[_id].price) - distributeSaleInput(champToOwner[_id]) { - transferChamp(champToOwner[_id], msg.sender, _id); - } - -} - - - -/// @title Only used for deploying all contracts -contract MyCryptoChampCore is ChampMarket { - /* - © Copyright 2018 - Patrik Mojzis - Redistributing and modifying is prohibited. - - https://mycryptochamp.io/ - - What is MyCryptoChamp? - - Blockchain game about upgrading champs by fighting, getting better items, - trading them and the best 800 champs are daily rewarded by real Ether. - - Feel free to ask any questions - hello@mycryptochamp.io - */ -} \ No newline at end of file diff --git a/data_full/CVE/2018-12959.sol b/data_full/CVE/2018-12959.sol deleted file mode 100644 index ed00627b..00000000 --- a/data_full/CVE/2018-12959.sol +++ /dev/null @@ -1,127 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-12-27 -*/ - -pragma solidity ^0.4.4; - -contract Token { - - /// @return total amount of tokens - function totalSupply() constant returns (uint256 supply) {} - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) constant returns (uint256 balance) {} - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) returns (bool success) {} - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - - /// @notice `msg.sender` approves `_addr` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of wei to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) returns (bool success) {} - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - -} - - - -contract StandardToken is Token { - - function transfer(address _to, uint256 _value) returns (bool success) { - //Default assumes totalSupply can't be over max (2^256 - 1). - //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. - //Replace the if with this one instead. - //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - //same as above. Replace this line with the following if you want to protect against wrapping uints. - //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} - -contract AditusToken is StandardToken { - - function () { - //if ether is sent to this address, send it back. - throw; - } - - /* Public variables of the token */ - - string public name; - uint8 public decimals; - string public symbol; - string public version = 'A1.0'; - - function AditusToken( - ) { - balances[msg.sender] = 1000000000000000000000000000; // Give the creator all initial tokens (100000 for example) - totalSupply = 1000000000000000000000000000; // Update total supply (100000 for example) - name = "Aditus"; // Set the name for display purposes - decimals = 18; // Amount of decimals for display purposes - symbol = "ADI"; // Set the symbol for display purposes - } - - /* Approves and then calls the receiving contract */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. - //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) - //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-12975.sol b/data_full/CVE/2018-12975.sol deleted file mode 100644 index 2ade75bc..00000000 --- a/data_full/CVE/2018-12975.sol +++ /dev/null @@ -1,1234 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-02-14 -*/ - -pragma solidity ^0.4.18; - -/** - * @title Ownable - * @dev The Ownable contract has an owner address, and provides basic authorization control - * functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { - address public owner; - - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - - /** - * @dev The Ownable constructor sets the original `owner` of the contract to the sender - * account. - */ - function Ownable() public { - owner = msg.sender; - } - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - /** - * @dev Allows the current owner to transfer control of the contract to a newOwner. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) public onlyOwner { - require(newOwner != address(0)); - OwnershipTransferred(owner, newOwner); - owner = newOwner; - } - -} - - -/** - * @title Claimable - * @dev Extension for the Ownable contract, where the ownership needs to be claimed. - * This allows the new owner to accept the transfer. - */ -contract Claimable is Ownable { - address public pendingOwner; - - /** - * @dev Modifier throws if called by any account other than the pendingOwner. - */ - modifier onlyPendingOwner() { - require(msg.sender == pendingOwner); - _; - } - - /** - * @dev Allows the current owner to set the pendingOwner address. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) onlyOwner public { - pendingOwner = newOwner; - } - - /** - * @dev Allows the pendingOwner address to finalize the transfer. - */ - function claimOwnership() onlyPendingOwner public { - OwnershipTransferred(owner, pendingOwner); - owner = pendingOwner; - pendingOwner = address(0); - } -} - - -/** - * @title Pausable - * @dev Base contract which allows children to implement an emergency stop mechanism. - */ -contract Pausable is Ownable { - event Pause(); - event Unpause(); - - bool public paused = false; - - - /** - * @dev Modifier to make a function callable only when the contract is not paused. - */ - modifier whenNotPaused() { - require(!paused); - _; - } - - /** - * @dev Modifier to make a function callable only when the contract is paused. - */ - modifier whenPaused() { - require(paused); - _; - } - - /** - * @dev called by the owner to pause, triggers stopped state - */ - function pause() onlyOwner whenNotPaused public { - paused = true; - Pause(); - } - - /** - * @dev called by the owner to unpause, returns to normal state - */ - function unpause() onlyOwner whenPaused public { - paused = false; - Unpause(); - } -} - - -/** - * @title AccessDeploy - * @dev Adds grant/revoke functions to the contract. - */ -contract AccessDeploy is Claimable { - - // Access for deploying heroes. - mapping(address => bool) private deployAccess; - - // Modifier for accessibility to deploy a hero on a location. - modifier onlyAccessDeploy { - require(msg.sender == owner || deployAccess[msg.sender] == true); - _; - } - - // @dev Grant acess to deploy heroes. - function grantAccessDeploy(address _address) - onlyOwner - public - { - deployAccess[_address] = true; - } - - // @dev Revoke acess to deploy heroes. - function revokeAccessDeploy(address _address) - onlyOwner - public - { - deployAccess[_address] = false; - } - -} - - -/** - * @title AccessDeposit - * @dev Adds grant/revoke functions to the contract. - */ -contract AccessDeposit is Claimable { - - // Access for adding deposit. - mapping(address => bool) private depositAccess; - - // Modifier for accessibility to add deposit. - modifier onlyAccessDeposit { - require(msg.sender == owner || depositAccess[msg.sender] == true); - _; - } - - // @dev Grant acess to deposit heroes. - function grantAccessDeposit(address _address) - onlyOwner - public - { - depositAccess[_address] = true; - } - - // @dev Revoke acess to deposit heroes. - function revokeAccessDeposit(address _address) - onlyOwner - public - { - depositAccess[_address] = false; - } - -} - - -/** - * @title AccessMint - * @dev Adds grant/revoke functions to the contract. - */ -contract AccessMint is Claimable { - - // Access for minting new tokens. - mapping(address => bool) private mintAccess; - - // Modifier for accessibility to define new hero types. - modifier onlyAccessMint { - require(msg.sender == owner || mintAccess[msg.sender] == true); - _; - } - - // @dev Grant acess to mint heroes. - function grantAccessMint(address _address) - onlyOwner - public - { - mintAccess[_address] = true; - } - - // @dev Revoke acess to mint heroes. - function revokeAccessMint(address _address) - onlyOwner - public - { - mintAccess[_address] = false; - } - -} - - -/** - * @title ERC721 interface - * @dev see https://github.com/ethereum/eips/issues/721 - */ -contract ERC721 { - event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); - event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); - - function balanceOf(address _owner) public view returns (uint256 _balance); - function ownerOf(uint256 _tokenId) public view returns (address _owner); - function transfer(address _to, uint256 _tokenId) public; - function approve(address _to, uint256 _tokenId) public; - function takeOwnership(uint256 _tokenId) public; -} - - -/** - * @title ERC721Token - * Generic implementation for the required functionality of the ERC721 standard - */ -contract ERC721Token is ERC721 { - using SafeMath for uint256; - - // Total amount of tokens - uint256 private totalTokens; - - // Mapping from token ID to owner - mapping (uint256 => address) private tokenOwner; - - // Mapping from token ID to approved address - mapping (uint256 => address) private tokenApprovals; - - // Mapping from owner to list of owned token IDs - mapping (address => uint256[]) private ownedTokens; - - // Mapping from token ID to index of the owner tokens list - mapping(uint256 => uint256) private ownedTokensIndex; - - /** - * @dev Guarantees msg.sender is owner of the given token - * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender - */ - modifier onlyOwnerOf(uint256 _tokenId) { - require(ownerOf(_tokenId) == msg.sender); - _; - } - - /** - * @dev Gets the total amount of tokens stored by the contract - * @return uint256 representing the total amount of tokens - */ - function totalSupply() public view returns (uint256) { - return totalTokens; - } - - /** - * @dev Gets the balance of the specified address - * @param _owner address to query the balance of - * @return uint256 representing the amount owned by the passed address - */ - function balanceOf(address _owner) public view returns (uint256) { - return ownedTokens[_owner].length; - } - - /** - * @dev Gets the list of tokens owned by a given address - * @param _owner address to query the tokens of - * @return uint256[] representing the list of tokens owned by the passed address - */ - function tokensOf(address _owner) public view returns (uint256[]) { - return ownedTokens[_owner]; - } - - /** - * @dev Gets the owner of the specified token ID - * @param _tokenId uint256 ID of the token to query the owner of - * @return owner address currently marked as the owner of the given token ID - */ - function ownerOf(uint256 _tokenId) public view returns (address) { - address owner = tokenOwner[_tokenId]; - require(owner != address(0)); - return owner; - } - - /** - * @dev Gets the approved address to take ownership of a given token ID - * @param _tokenId uint256 ID of the token to query the approval of - * @return address currently approved to take ownership of the given token ID - */ - function approvedFor(uint256 _tokenId) public view returns (address) { - return tokenApprovals[_tokenId]; - } - - /** - * @dev Transfers the ownership of a given token ID to another address - * @param _to address to receive the ownership of the given token ID - * @param _tokenId uint256 ID of the token to be transferred - */ - function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { - clearApprovalAndTransfer(msg.sender, _to, _tokenId); - } - - /** - * @dev Approves another address to claim for the ownership of the given token ID - * @param _to address to be approved for the given token ID - * @param _tokenId uint256 ID of the token to be approved - */ - function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { - address owner = ownerOf(_tokenId); - require(_to != owner); - if (approvedFor(_tokenId) != 0 || _to != 0) { - tokenApprovals[_tokenId] = _to; - Approval(owner, _to, _tokenId); - } - } - - /** - * @dev Claims the ownership of a given token ID - * @param _tokenId uint256 ID of the token being claimed by the msg.sender - */ - function takeOwnership(uint256 _tokenId) public { - require(isApprovedFor(msg.sender, _tokenId)); - clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId); - } - - /** - * @dev Mint token function - * @param _to The address that will own the minted token - * @param _tokenId uint256 ID of the token to be minted by the msg.sender - */ - function _mint(address _to, uint256 _tokenId) internal { - require(_to != address(0)); - addToken(_to, _tokenId); - Transfer(0x0, _to, _tokenId); - } - - /** - * @dev Burns a specific token - * @param _tokenId uint256 ID of the token being burned by the msg.sender - */ - function _burn(uint256 _tokenId) onlyOwnerOf(_tokenId) internal { - if (approvedFor(_tokenId) != 0) { - clearApproval(msg.sender, _tokenId); - } - removeToken(msg.sender, _tokenId); - Transfer(msg.sender, 0x0, _tokenId); - } - - /** - * @dev Tells whether the msg.sender is approved for the given token ID or not - * This function is not private so it can be extended in further implementations like the operatable ERC721 - * @param _owner address of the owner to query the approval of - * @param _tokenId uint256 ID of the token to query the approval of - * @return bool whether the msg.sender is approved for the given token ID or not - */ - function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) { - return approvedFor(_tokenId) == _owner; - } - - /** - * @dev Internal function to clear current approval and transfer the ownership of a given token ID - * @param _from address which you want to send tokens from - * @param _to address which you want to transfer the token to - * @param _tokenId uint256 ID of the token to be transferred - */ - function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal { - require(_to != address(0)); - require(_to != ownerOf(_tokenId)); - require(ownerOf(_tokenId) == _from); - - clearApproval(_from, _tokenId); - removeToken(_from, _tokenId); - addToken(_to, _tokenId); - Transfer(_from, _to, _tokenId); - } - - /** - * @dev Internal function to clear current approval of a given token ID - * @param _tokenId uint256 ID of the token to be transferred - */ - function clearApproval(address _owner, uint256 _tokenId) private { - require(ownerOf(_tokenId) == _owner); - tokenApprovals[_tokenId] = 0; - Approval(_owner, 0, _tokenId); - } - - /** - * @dev Internal function to add a token ID to the list of a given address - * @param _to address representing the new owner of the given token ID - * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address - */ - function addToken(address _to, uint256 _tokenId) private { - require(tokenOwner[_tokenId] == address(0)); - tokenOwner[_tokenId] = _to; - uint256 length = balanceOf(_to); - ownedTokens[_to].push(_tokenId); - ownedTokensIndex[_tokenId] = length; - totalTokens = totalTokens.add(1); - } - - /** - * @dev Internal function to remove a token ID from the list of a given address - * @param _from address representing the previous owner of the given token ID - * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address - */ - function removeToken(address _from, uint256 _tokenId) private { - require(ownerOf(_tokenId) == _from); - - uint256 tokenIndex = ownedTokensIndex[_tokenId]; - uint256 lastTokenIndex = balanceOf(_from).sub(1); - uint256 lastToken = ownedTokens[_from][lastTokenIndex]; - - tokenOwner[_tokenId] = 0; - ownedTokens[_from][tokenIndex] = lastToken; - ownedTokens[_from][lastTokenIndex] = 0; - // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to - // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping - // the lastToken to the first position, and then dropping the element placed in the last position of the list - - ownedTokens[_from].length--; - ownedTokensIndex[_tokenId] = 0; - ownedTokensIndex[lastToken] = tokenIndex; - totalTokens = totalTokens.sub(1); - } -} - - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - function totalSupply() public view returns (uint256); - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - - /** - * @dev Multiplies two numbers, throws on overflow. - */ - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - - /** - * @dev Integer division of two numbers, truncating the quotient. - */ - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - /** - * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). - */ - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - /** - * @dev Adds two numbers, throws on overflow. - */ - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - uint256 totalSupply_; - - /** - * @dev total number of tokens in existence - */ - function totalSupply() public view returns (uint256) { - return totalSupply_; - } - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - // SafeMath.sub will throw if there is not enough balance. - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - -} - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - - /** - * @dev Increase the amount of tokens that an owner allowed to a spender. - * - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * @param _spender The address which will spend the funds. - * @param _addedValue The amount of tokens to increase the allowance by. - */ - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - /** - * @dev Decrease the amount of tokens that an owner allowed to a spender. - * - * approve should be called when allowed[_spender] == 0. To decrement - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * @param _spender The address which will spend the funds. - * @param _subtractedValue The amount of tokens to decrease the allowance by. - */ - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - - -/** - * @title Gold - * @dev ERC20 Token that can be minted. - */ -contract Gold is StandardToken, Claimable, AccessMint { - - string public constant name = "Gold"; - string public constant symbol = "G"; - uint8 public constant decimals = 18; - - // Event that is fired when minted. - event Mint( - address indexed _to, - uint256 indexed _tokenId - ); - - // @dev Mint tokens with _amount to the address. - function mint(address _to, uint256 _amount) - onlyAccessMint - public - returns (bool) - { - totalSupply_ = totalSupply_.add(_amount); - balances[_to] = balances[_to].add(_amount); - Mint(_to, _amount); - Transfer(address(0), _to, _amount); - return true; - } - -} - - -/** - * @title CryptoSagaHero - * @dev The token contract for the hero. - * Also a superset of the ERC721 standard that allows for the minting - * of the non-fungible tokens. - */ -contract CryptoSagaHero is ERC721Token, Claimable, Pausable, AccessMint, AccessDeploy, AccessDeposit { - - string public constant name = "CryptoSaga Hero"; - string public constant symbol = "HERO"; - - struct HeroClass { - // ex) Soldier, Knight, Fighter... - string className; - // 0: Common, 1: Uncommon, 2: Rare, 3: Heroic, 4: Legendary. - uint8 classRank; - // 0: Human, 1: Celestial, 2: Demon, 3: Elf, 4: Dark Elf, 5: Yogoe, 6: Furry, 7: Dragonborn, 8: Undead, 9: Goblin, 10: Troll, 11: Slime, and more to come. - uint8 classRace; - // How old is this hero class? - uint32 classAge; - // 0: Fighter, 1: Rogue, 2: Mage. - uint8 classType; - - // Possible max level of this class. - uint32 maxLevel; - // 0: Water, 1: Fire, 2: Nature, 3: Light, 4: Darkness. - uint8 aura; - - // Base stats of this hero type. - // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. - uint32[5] baseStats; - // Minimum IVs for stats. - // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. - uint32[5] minIVForStats; - // Maximum IVs for stats. - // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. - uint32[5] maxIVForStats; - - // Number of currently instanced heroes. - uint32 currentNumberOfInstancedHeroes; - } - - struct HeroInstance { - // What is this hero's type? ex) John, Sally, Mark... - uint32 heroClassId; - - // Individual hero's name. - string heroName; - - // Current level of this hero. - uint32 currentLevel; - // Current exp of this hero. - uint32 currentExp; - - // Where has this hero been deployed? (0: Never depolyed ever.) ex) Dungeon Floor #1, Arena #5... - uint32 lastLocationId; - // When a hero is deployed, it takes time for the hero to return to the base. This is in Unix epoch. - uint256 availableAt; - - // Current stats of this hero. - // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. - uint32[5] currentStats; - // The individual value for this hero's stats. - // This will affect the current stats of heroes. - // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. - uint32[5] ivForStats; - } - - // Required exp for level up will increase when heroes level up. - // This defines how the value will increase. - uint32 public requiredExpIncreaseFactor = 100; - - // Required Gold for level up will increase when heroes level up. - // This defines how the value will increase. - uint256 public requiredGoldIncreaseFactor = 1000000000000000000; - - // Existing hero classes. - mapping(uint32 => HeroClass) public heroClasses; - // The number of hero classes ever defined. - uint32 public numberOfHeroClasses; - - // Existing hero instances. - // The key is _tokenId. - mapping(uint256 => HeroInstance) public tokenIdToHeroInstance; - // The number of tokens ever minted. This works as the serial number. - uint256 public numberOfTokenIds; - - // Gold contract. - Gold public goldContract; - - // Deposit of players (in Gold). - mapping(address => uint256) public addressToGoldDeposit; - - // Random seed. - uint32 private seed = 0; - - // Event that is fired when a hero type defined. - event DefineType( - address indexed _by, - uint32 indexed _typeId, - string _className - ); - - // Event that is fired when a hero is upgraded. - event LevelUp( - address indexed _by, - uint256 indexed _tokenId, - uint32 _newLevel - ); - - // Event that is fired when a hero is deployed. - event Deploy( - address indexed _by, - uint256 indexed _tokenId, - uint32 _locationId, - uint256 _duration - ); - - // @dev Get the class's entire infomation. - function getClassInfo(uint32 _classId) - external view - returns (string className, uint8 classRank, uint8 classRace, uint32 classAge, uint8 classType, uint32 maxLevel, uint8 aura, uint32[5] baseStats, uint32[5] minIVs, uint32[5] maxIVs) - { - var _cl = heroClasses[_classId]; - return (_cl.className, _cl.classRank, _cl.classRace, _cl.classAge, _cl.classType, _cl.maxLevel, _cl.aura, _cl.baseStats, _cl.minIVForStats, _cl.maxIVForStats); - } - - // @dev Get the class's name. - function getClassName(uint32 _classId) - external view - returns (string) - { - return heroClasses[_classId].className; - } - - // @dev Get the class's rank. - function getClassRank(uint32 _classId) - external view - returns (uint8) - { - return heroClasses[_classId].classRank; - } - - // @dev Get the heroes ever minted for the class. - function getClassMintCount(uint32 _classId) - external view - returns (uint32) - { - return heroClasses[_classId].currentNumberOfInstancedHeroes; - } - - // @dev Get the hero's entire infomation. - function getHeroInfo(uint256 _tokenId) - external view - returns (uint32 classId, string heroName, uint32 currentLevel, uint32 currentExp, uint32 lastLocationId, uint256 availableAt, uint32[5] currentStats, uint32[5] ivs, uint32 bp) - { - HeroInstance memory _h = tokenIdToHeroInstance[_tokenId]; - var _bp = _h.currentStats[0] + _h.currentStats[1] + _h.currentStats[2] + _h.currentStats[3] + _h.currentStats[4]; - return (_h.heroClassId, _h.heroName, _h.currentLevel, _h.currentExp, _h.lastLocationId, _h.availableAt, _h.currentStats, _h.ivForStats, _bp); - } - - // @dev Get the hero's class id. - function getHeroClassId(uint256 _tokenId) - external view - returns (uint32) - { - return tokenIdToHeroInstance[_tokenId].heroClassId; - } - - // @dev Get the hero's name. - function getHeroName(uint256 _tokenId) - external view - returns (string) - { - return tokenIdToHeroInstance[_tokenId].heroName; - } - - // @dev Get the hero's level. - function getHeroLevel(uint256 _tokenId) - external view - returns (uint32) - { - return tokenIdToHeroInstance[_tokenId].currentLevel; - } - - // @dev Get the hero's location. - function getHeroLocation(uint256 _tokenId) - external view - returns (uint32) - { - return tokenIdToHeroInstance[_tokenId].lastLocationId; - } - - // @dev Get the time when the hero become available. - function getHeroAvailableAt(uint256 _tokenId) - external view - returns (uint256) - { - return tokenIdToHeroInstance[_tokenId].availableAt; - } - - // @dev Get the hero's BP. - function getHeroBP(uint256 _tokenId) - public view - returns (uint32) - { - var _tmp = tokenIdToHeroInstance[_tokenId].currentStats; - return (_tmp[0] + _tmp[1] + _tmp[2] + _tmp[3] + _tmp[4]); - } - - // @dev Get the hero's required gold for level up. - function getHeroRequiredGoldForLevelUp(uint256 _tokenId) - public view - returns (uint256) - { - return (uint256(2) ** (tokenIdToHeroInstance[_tokenId].currentLevel / 10)) * requiredGoldIncreaseFactor; - } - - // @dev Get the hero's required exp for level up. - function getHeroRequiredExpForLevelUp(uint256 _tokenId) - public view - returns (uint32) - { - return ((tokenIdToHeroInstance[_tokenId].currentLevel + 2) * requiredExpIncreaseFactor); - } - - // @dev Get the deposit of gold of the player. - function getGoldDepositOfAddress(address _address) - external view - returns (uint256) - { - return addressToGoldDeposit[_address]; - } - - // @dev Get the token id of the player's #th token. - function getTokenIdOfAddressAndIndex(address _address, uint256 _index) - external view - returns (uint256) - { - return tokensOf(_address)[_index]; - } - - // @dev Get the total BP of the player. - function getTotalBPOfAddress(address _address) - external view - returns (uint32) - { - var _tokens = tokensOf(_address); - uint32 _totalBP = 0; - for (uint256 i = 0; i < _tokens.length; i ++) { - _totalBP += getHeroBP(_tokens[i]); - } - return _totalBP; - } - - // @dev Set the hero's name. - function setHeroName(uint256 _tokenId, string _name) - onlyOwnerOf(_tokenId) - public - { - tokenIdToHeroInstance[_tokenId].heroName = _name; - } - - // @dev Set the address of the contract that represents ERC20 Gold. - function setGoldContract(address _contractAddress) - onlyOwner - public - { - goldContract = Gold(_contractAddress); - } - - // @dev Set the required golds to level up a hero. - function setRequiredExpIncreaseFactor(uint32 _value) - onlyOwner - public - { - requiredExpIncreaseFactor = _value; - } - - // @dev Set the required golds to level up a hero. - function setRequiredGoldIncreaseFactor(uint256 _value) - onlyOwner - public - { - requiredGoldIncreaseFactor = _value; - } - - // @dev Contructor. - function CryptoSagaHero(address _goldAddress) - public - { - require(_goldAddress != address(0)); - - // Assign Gold contract. - setGoldContract(_goldAddress); - - // Initial heroes. - // Name, Rank, Race, Age, Type, Max Level, Aura, Stats. - defineType("Archangel", 4, 1, 13540, 0, 99, 3, [uint32(74), 75, 57, 99, 95], [uint32(8), 6, 8, 5, 5], [uint32(8), 10, 10, 6, 6]); - defineType("Shadowalker", 3, 4, 134, 1, 75, 4, [uint32(45), 35, 60, 80, 40], [uint32(3), 2, 10, 4, 5], [uint32(5), 5, 10, 7, 5]); - defineType("Pyromancer", 2, 0, 14, 2, 50, 1, [uint32(50), 28, 17, 40, 35], [uint32(5), 3, 2, 3, 3], [uint32(8), 4, 3, 4, 5]); - defineType("Magician", 1, 3, 224, 2, 30, 0, [uint32(35), 15, 25, 25, 30], [uint32(3), 1, 2, 2, 2], [uint32(5), 2, 3, 3, 3]); - defineType("Farmer", 0, 0, 59, 0, 15, 2, [uint32(10), 22, 8, 15, 25], [uint32(1), 2, 1, 1, 2], [uint32(1), 3, 1, 2, 3]); - } - - // @dev Define a new hero type (class). - function defineType(string _className, uint8 _classRank, uint8 _classRace, uint32 _classAge, uint8 _classType, uint32 _maxLevel, uint8 _aura, uint32[5] _baseStats, uint32[5] _minIVForStats, uint32[5] _maxIVForStats) - onlyOwner - public - { - require(_classRank < 5); - require(_classType < 3); - require(_aura < 5); - require(_minIVForStats[0] <= _maxIVForStats[0] && _minIVForStats[1] <= _maxIVForStats[1] && _minIVForStats[2] <= _maxIVForStats[2] && _minIVForStats[3] <= _maxIVForStats[3] && _minIVForStats[4] <= _maxIVForStats[4]); - - HeroClass memory _heroType = HeroClass({ - className: _className, - classRank: _classRank, - classRace: _classRace, - classAge: _classAge, - classType: _classType, - maxLevel: _maxLevel, - aura: _aura, - baseStats: _baseStats, - minIVForStats: _minIVForStats, - maxIVForStats: _maxIVForStats, - currentNumberOfInstancedHeroes: 0 - }); - - // Save the hero class. - heroClasses[numberOfHeroClasses] = _heroType; - - // Fire event. - DefineType(msg.sender, numberOfHeroClasses, _heroType.className); - - // Increment number of hero classes. - numberOfHeroClasses ++; - - } - - // @dev Mint a new hero, with _heroClassId. - function mint(address _owner, uint32 _heroClassId) - onlyAccessMint - public - returns (uint256) - { - require(_owner != address(0)); - require(_heroClassId < numberOfHeroClasses); - - // The information of the hero's class. - var _heroClassInfo = heroClasses[_heroClassId]; - - // Mint ERC721 token. - _mint(_owner, numberOfTokenIds); - - // Build random IVs for this hero instance. - uint32[5] memory _ivForStats; - uint32[5] memory _initialStats; - for (uint8 i = 0; i < 5; i++) { - _ivForStats[i] = (random(_heroClassInfo.maxIVForStats[i] + 1, _heroClassInfo.minIVForStats[i])); - _initialStats[i] = _heroClassInfo.baseStats[i] + _ivForStats[i]; - } - - // Temporary hero instance. - HeroInstance memory _heroInstance = HeroInstance({ - heroClassId: _heroClassId, - heroName: "", - currentLevel: 1, - currentExp: 0, - lastLocationId: 0, - availableAt: now, - currentStats: _initialStats, - ivForStats: _ivForStats - }); - - // Save the hero instance. - tokenIdToHeroInstance[numberOfTokenIds] = _heroInstance; - - // Increment number of token ids. - // This will only increment when new token is minted, and will never be decemented when the token is burned. - numberOfTokenIds ++; - - // Increment instanced number of heroes. - _heroClassInfo.currentNumberOfInstancedHeroes ++; - - return numberOfTokenIds - 1; - } - - // @dev Set where the heroes are deployed, and when they will return. - // This is intended to be called by Dungeon, Arena, Guild contracts. - function deploy(uint256 _tokenId, uint32 _locationId, uint256 _duration) - onlyAccessDeploy - public - returns (bool) - { - // The hero should be possessed by anybody. - require(ownerOf(_tokenId) != address(0)); - - var _heroInstance = tokenIdToHeroInstance[_tokenId]; - - // The character should be avaiable. - require(_heroInstance.availableAt <= now); - - _heroInstance.lastLocationId = _locationId; - _heroInstance.availableAt = now + _duration; - - // As the hero has been deployed to another place, fire event. - Deploy(msg.sender, _tokenId, _locationId, _duration); - } - - // @dev Add exp. - // This is intended to be called by Dungeon, Arena, Guild contracts. - function addExp(uint256 _tokenId, uint32 _exp) - onlyAccessDeploy - public - returns (bool) - { - // The hero should be possessed by anybody. - require(ownerOf(_tokenId) != address(0)); - - var _heroInstance = tokenIdToHeroInstance[_tokenId]; - - var _newExp = _heroInstance.currentExp + _exp; - - // Sanity check to ensure we don't overflow. - require(_newExp == uint256(uint128(_newExp))); - - _heroInstance.currentExp += _newExp; - - } - - // @dev Add deposit. - // This is intended to be called by Dungeon, Arena, Guild contracts. - function addDeposit(address _to, uint256 _amount) - onlyAccessDeposit - public - { - // Increment deposit. - addressToGoldDeposit[_to] += _amount; - } - - // @dev Level up the hero with _tokenId. - // This function is called by the owner of the hero. - function levelUp(uint256 _tokenId) - onlyOwnerOf(_tokenId) whenNotPaused - public - { - - // Hero instance. - var _heroInstance = tokenIdToHeroInstance[_tokenId]; - - // The character should be avaiable. (Should have already returned from the dungeons, arenas, etc.) - require(_heroInstance.availableAt <= now); - - // The information of the hero's class. - var _heroClassInfo = heroClasses[_heroInstance.heroClassId]; - - // Hero shouldn't level up exceed its max level. - require(_heroInstance.currentLevel < _heroClassInfo.maxLevel); - - // Required Exp. - var requiredExp = getHeroRequiredExpForLevelUp(_tokenId); - - // Need to have enough exp. - require(_heroInstance.currentExp >= requiredExp); - - // Required Gold. - var requiredGold = getHeroRequiredGoldForLevelUp(_tokenId); - - // Owner of token. - var _ownerOfToken = ownerOf(_tokenId); - - // Need to have enough Gold balance. - require(addressToGoldDeposit[_ownerOfToken] >= requiredGold); - - // Increase Level. - _heroInstance.currentLevel += 1; - - // Increase Stats. - for (uint8 i = 0; i < 5; i++) { - _heroInstance.currentStats[i] = _heroClassInfo.baseStats[i] + (_heroInstance.currentLevel - 1) * _heroInstance.ivForStats[i]; - } - - // Deduct exp. - _heroInstance.currentExp -= requiredExp; - - // Deduct gold. - addressToGoldDeposit[_ownerOfToken] -= requiredGold; - - // Fire event. - LevelUp(msg.sender, _tokenId, _heroInstance.currentLevel); - } - - // @dev Transfer deposit (with the allowance pattern.) - function transferDeposit(uint256 _amount) - whenNotPaused - public - { - require(goldContract.allowance(msg.sender, this) >= _amount); - - // Send msg.sender's Gold to this contract. - if (goldContract.transferFrom(msg.sender, this, _amount)) { - // Increment deposit. - addressToGoldDeposit[msg.sender] += _amount; - } - } - - // @dev Withdraw deposit. - function withdrawDeposit(uint256 _amount) - public - { - require(addressToGoldDeposit[msg.sender] >= _amount); - - // Send deposit of Golds to msg.sender. (Rather minting...) - if (goldContract.transfer(msg.sender, _amount)) { - // Decrement deposit. - addressToGoldDeposit[msg.sender] -= _amount; - } - } - - // @dev return a pseudo random number between lower and upper bounds - function random(uint32 _upper, uint32 _lower) - private - returns (uint32) - { - require(_upper > _lower); - - seed = uint32(keccak256(keccak256(block.blockhash(block.number), seed), now)); - return seed % (_upper - _lower) + _lower; - } - -} \ No newline at end of file diff --git a/data_full/CVE/2018-13041.sol b/data_full/CVE/2018-13041.sol deleted file mode 100644 index e2713b92..00000000 --- a/data_full/CVE/2018-13041.sol +++ /dev/null @@ -1,194 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-06-29 -*/ - -pragma solidity ^0.4.8; - -/// @title Link Token. This Token will remain the cornerstone of the entire organization. It will have an Ethereum address and from the moment that address is publish until the end, it will remain the same, and should. The Token should be as simple as it possibly can be and should not be able to terminate. It's state remains so that those who control their Tokens will continue to do so. -/// @author Riaan F Venter~ RFVenter~ - - -/* - * ERC20Basic - * Simpler version of ERC20 interface - * see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); -} - -/** - * Math operations with safety checks - */ -library SafeMath { - function mul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - - function sub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - - function add(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c >= a); - return c; - } - - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} - - -/* - * Basic token - * Basic version of StandardToken, with no allowances - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint; - - mapping(address => uint) balances; - - /* - * Fix for the ERC20 short address attack - */ - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - } - - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } - -} - - -/* - * ERC20 interface - * see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant returns (uint); - function transferFrom(address from, address to, uint value); - function approve(address spender, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} - - -/** - * Standard ERC20 token - * - * https://github.com/ethereum/EIPs/issues/20 - * Based on code by FirstBlood: - * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is BasicToken, ERC20 { - - mapping (address => mapping (address => uint)) allowed; - - function transferFrom(address _from, address _to, uint _value) { - var _allowance = allowed[_from][msg.sender]; - - // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met - // if (_value > _allowance) throw; - - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - } - - function approve(address _spender, uint _value) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - } - - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } -} - -/* - * Ownable - * - * Base contract with an owner. - * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner. - */ -contract Ownable { - address public owner; - - function Ownable() { - owner = msg.sender; - } - - modifier onlyOwner() { - if (msg.sender != owner) { - throw; - } - _; - } - - function transferOwnership(address newOwner) onlyOwner { - if (newOwner != address(0)) { - owner = newOwner; - } - } - -} - - -contract LinkToken is StandardToken, Ownable { - - string public name = "Link Platform"; // Name of the Token - string public symbol = "LNK"; // ERC20 compliant Token code - uint public decimals = 18; // Token has 18 digit precision - uint public totalSupply; // Total supply - - function mint(address _spender, uint _value) - onlyOwner { - - balances[_spender] += _value; - totalSupply += _value; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13068.sol b/data_full/CVE/2018-13068.sol deleted file mode 100644 index f2246fdd..00000000 --- a/data_full/CVE/2018-13068.sol +++ /dev/null @@ -1,166 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-10-30 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract AzurionToken is owned { - mapping (address => uint256) public balanceOf; - mapping (address => bool) public frozenAccount; - mapping (address => mapping (address => uint256)) public allowance; - - uint256 public totalSupply; - string public constant name = "Azurion"; - string public constant symbol = "AZU"; - uint8 public constant decimals = 18; - - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - event FrozenFunds(address target, bool frozen); - - function AzurionToken(uint256 initialSupply, address centralMinter) { - if(centralMinter != 0 ) owner = centralMinter; - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - } - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) onlyOwner public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other ccount - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } - - function () { - revert(); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13069.sol b/data_full/CVE/2018-13069.sol deleted file mode 100644 index a9aefe6d..00000000 --- a/data_full/CVE/2018-13069.sol +++ /dev/null @@ -1,248 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-04-03 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract DYC is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function DYC( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13070.sol b/data_full/CVE/2018-13070.sol deleted file mode 100644 index 2747c71f..00000000 --- a/data_full/CVE/2018-13070.sol +++ /dev/null @@ -1,169 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-06-29 -*/ - -pragma solidity ^0.4.24; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - - - mapping (address => uint256) public balanceOf; - - - mapping (address => mapping (address => uint256)) public allowance; - - - event Transfer(address indexed from, address indexed to, uint256 value); - - event Burn(address indexed from, uint256 value); - - - function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - - - function _transfer(address _from, address _to, uint _value) internal { - - require(_to != 0x0); - - require(balanceOf[_from] >= _value); - - require(balanceOf[_to] + _value > balanceOf[_to]); - - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - - - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -contract EncryptedToken is owned, TokenERC20 { - uint256 INITIAL_SUPPLY = 100000000; - uint256 public buyPrice = 1; - mapping (address => bool) public frozenAccount; - - event FrozenFunds(address target, bool frozen); - - function EncryptedToken() TokenERC20(INITIAL_SUPPLY, 'ECC', 'ECC') payable public {} - - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - emit Transfer(_from, _to, _value); - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newBuyPrice) onlyOwner public { - buyPrice = newBuyPrice; - } - - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - function () payable public { - owner.send(msg.value);// - uint amount = msg.value * buyPrice; // calculates the amount - _transfer(owner, msg.sender, amount); - } - - function selfdestructs() onlyOwner payable public { - selfdestruct(owner); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13071.sol b/data_full/CVE/2018-13071.sol deleted file mode 100644 index 66840e87..00000000 --- a/data_full/CVE/2018-13071.sol +++ /dev/null @@ -1,231 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-11-18 -*/ - -//ERC20 Token -pragma solidity ^0.4.17; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "T10 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /*************************************************/ - mapping(address=>uint256) public indexes; - mapping(uint256=>address) public addresses; - uint256 public lastIndex = 0; - /*************************************************/ - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - /*****************************************/ - addresses[1] = msg.sender; - indexes[msg.sender] = 1; - lastIndex = 1; - /*****************************************/ - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract CCindexToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 40000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "CCindex10"; - string public tokenSymbol = "T10"; - function CCindexToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - // if(!canHolderTransfer()) throw; - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - if(_value > 0){ - if(balanceOf[msg.sender] == 0){ - addresses[indexes[msg.sender]] = addresses[lastIndex]; - indexes[addresses[lastIndex]] = indexes[msg.sender]; - indexes[msg.sender] = 0; - delete addresses[lastIndex]; - lastIndex--; - } - if(indexes[_to]==0){ - lastIndex++; - addresses[lastIndex] = _to; - indexes[_to] = lastIndex; - } - } - } - - function getAddresses() constant returns (address[]){ - address[] memory addrs = new address[](lastIndex); - for(uint i = 0; i < lastIndex; i++){ - addrs[i] = addresses[i+1]; - } - return addrs; - } - - function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { - // if(balanceOf[owner] < _amount) throw; - uint distributed = 0; - require(startIndex < endIndex); - - for(uint i = startIndex; i < lastIndex; i++){ - address holder = addresses[i+1]; - uint reward = balanceOf[holder] * 3 / 100; - balanceOf[holder] += reward; - distributed += reward; - Transfer(0, holder, reward); - } - - // balanceOf[owner] -= distributed; - totalSupply += distributed; - return distributed; - } - - /************************************************************************/ - - /************************************************************************/ - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13072.sol b/data_full/CVE/2018-13072.sol deleted file mode 100644 index c19de863..00000000 --- a/data_full/CVE/2018-13072.sol +++ /dev/null @@ -1,168 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-16 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - revert(); // Prevents accidental sending of ether - } -} - -contract Coffeecoin is owned, token { - - uint public buyRate = 4000; // price of one token - bool public isSelling = true; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function Coffeecoin( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - - function buy() payable { - if(isSelling == false) revert(); - uint amount = msg.value * buyRate; // calculates the amount - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[owner] -= amount; // subtracts amount from seller's balance - Transfer(owner, msg.sender, amount); // execute an event reflecting the change - } - - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13073.sol b/data_full/CVE/2018-13073.sol deleted file mode 100644 index 58a0f14c..00000000 --- a/data_full/CVE/2018-13073.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-10-30 -*/ - -//ERC20 Token -pragma solidity ^0.4.17; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "ETHEREUMBLACK"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract ETHEREUMBLACK is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 200000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "ETHEREUMBLACK"; - string public tokenSymbol = "ETCBK"; - function ETHEREUMBLACK() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13074.sol b/data_full/CVE/2018-13074.sol deleted file mode 100644 index e63dfe32..00000000 --- a/data_full/CVE/2018-13074.sol +++ /dev/null @@ -1,227 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-06-29 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - uint256 initialSupply=5000000000; - string tokenName='FIB'; - string tokenSymbol='FIB'; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - emit Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - emit Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract FIBToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function FIBToken( - - ) TokenERC20() public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - emit Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - - -} \ No newline at end of file diff --git a/data_full/CVE/2018-13075.sol b/data_full/CVE/2018-13075.sol deleted file mode 100644 index 0a2079f8..00000000 --- a/data_full/CVE/2018-13075.sol +++ /dev/null @@ -1,275 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-22 -*/ - -/** 官方高級token */ - - -pragma solidity ^0.4.18; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } - - function destruct() public onlyOwner { - selfdestruct(owner); - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20() public { - totalSupply = 500000000000 * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = "Carbon Exchange Coin Token"; // Set the name for display purposes - symbol = "CEC"; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract CarbonExchangeCoinToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - uint256 public decimals = 18; - string public tokenName; - string public tokenSymbol; - uint minBalanceForAccounts ; //threshold amount - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - - - function CarbonExchangeCoinToken() public { - owner = msg.sender; - totalSupply = 50000000000000000000000000000; - balanceOf[owner]=totalSupply; - tokenName="Carbon Exchange Coin Token"; - tokenSymbol="CEC"; - } - - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - ///@param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } - - - /* 设置自动补充gas的阈值信息 201803202232 james */ - function setMinBalance(uint minimumBalanceInFinney) public onlyOwner { - minBalanceForAccounts = minimumBalanceInFinney * 1 finney; - } - - /* 设置tokenname */ - function setTokenName(string newTokenName) public onlyOwner{ - tokenName = newTokenName; - } - /* 设置tokenSymbol */ - function setTokenSymbol(string newTokenSymbol) public onlyOwner{ - tokenSymbol = newTokenSymbol; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13076.sol b/data_full/CVE/2018-13076.sol deleted file mode 100644 index 8de04730..00000000 --- a/data_full/CVE/2018-13076.sol +++ /dev/null @@ -1,168 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-16 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - revert(); // Prevents accidental sending of ether - } -} - -contract Betcash is owned, token { - - uint public buyRate = 4000; // price of one token - bool public isSelling = true; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function Betcash( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - - function buy() payable { - if(isSelling == false) revert(); - uint amount = msg.value * buyRate; // calculates the amount - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[owner] -= amount; // subtracts amount from seller's balance - Transfer(owner, msg.sender, amount); // execute an event reflecting the change - } - - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13077.sol b/data_full/CVE/2018-13077.sol deleted file mode 100644 index 1cc56b0e..00000000 --- a/data_full/CVE/2018-13077.sol +++ /dev/null @@ -1,199 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-10-23 -*/ - -pragma solidity ^0.4.13; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - -} - -contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } - -contract token { - // Public variables of the token / - string public name = 'CTB'; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* This notifies clients about the amount burnt */ - event Burn(address indexed from, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Send `_value` tokens to `_to` from your account - /// @param _to The address of the recipient - /// @param _value the amount to send - function transfer(address _to, uint256 _value) { - _transfer(msg.sender, _to, _value); - } - - /// @notice Send `_value` tokens to `_to` in behalf of `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value the amount to send - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require (_value < allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf - /// @param _spender The address authorized to spend - /// @param _value the max amount they can spend - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - /// @param _spender The address authorized to spend - /// @param _value the max amount they can spend - /// @param _extraData some extra information to send to the approved contract - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /// @notice Remove `_value` tokens from the system irreversibly - /// @param _value the amount of money to burn - function burn(uint256 _value) returns (bool success) { - require (balanceOf[msg.sender] > _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } - -} - -contract CTB is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function CTB( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } - -} \ No newline at end of file diff --git a/data_full/CVE/2018-13078.sol b/data_full/CVE/2018-13078.sol deleted file mode 100644 index ae9bfa15..00000000 --- a/data_full/CVE/2018-13078.sol +++ /dev/null @@ -1,145 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-19 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() public{ - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract token { - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) public { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) public { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () public { - revert(); // Prevents accidental sending of ether - } -} - -contract Jitech is owned, token { - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function Jitech( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) public token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) public { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) public onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) public onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13079.sol b/data_full/CVE/2018-13079.sol deleted file mode 100644 index 4120de00..00000000 --- a/data_full/CVE/2018-13079.sol +++ /dev/null @@ -1,161 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-19 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract GoodTo { - - string public name; - string public symbol; - uint8 public decimals = 18; - - uint256 public totalSupply; - - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - - function GoodTo( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} - -contract StandardToken is owned, GoodTo { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - event FrozenFunds(address target, bool frozen); - - function StandardToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) GoodTo(initialSupply, tokenName, tokenSymbol) public {} - - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13080.sol b/data_full/CVE/2018-13080.sol deleted file mode 100644 index 31356bc1..00000000 --- a/data_full/CVE/2018-13080.sol +++ /dev/null @@ -1,145 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-19 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() public{ - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract token { - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) public { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) public { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () public { - revert(); // Prevents accidental sending of ether - } -} - -contract Goutex is owned, token { - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function Goutex( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) public token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) public { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) public onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) public onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13081.sol b/data_full/CVE/2018-13081.sol deleted file mode 100644 index 81d8ec16..00000000 --- a/data_full/CVE/2018-13081.sol +++ /dev/null @@ -1,171 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-07-19 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract GZSToken is owned, token { - - uint public buyRate = 46000; // price one token per ether - bool public isSelling = true; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function GZSToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - - function buy() payable { - if(isSelling == false) throw; - uint amount = msg.value * buyRate; // calculates the amount - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13082.sol b/data_full/CVE/2018-13082.sol deleted file mode 100644 index 10bee82d..00000000 --- a/data_full/CVE/2018-13082.sol +++ /dev/null @@ -1,255 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-19 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract ModiTokenERC20 { - string public constant _myTokeName = 'MODI Token';//change here - string public constant _mySymbol = 'MODI';//change here - uint public constant _myinitialSupply = 10000;//leave it - uint8 public constant _myDecimal = 18;//leave it - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function ModiTokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - decimals = _myDecimal; - totalSupply = _myinitialSupply * (10 ** uint256(_myDecimal)); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = _myTokeName; // Set the name for display purposes - symbol = _mySymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract MyAdvancedToken is owned, ModiTokenERC20 { - - - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) ModiTokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13083.sol b/data_full/CVE/2018-13083.sol deleted file mode 100644 index 0ec1cc2d..00000000 --- a/data_full/CVE/2018-13083.sol +++ /dev/null @@ -1,219 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-05-25 -*/ - -pragma solidity ^0.4.21; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - emit Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - emit Burn(_from, _value); - return true; - } -} - -contract PlazaToken is owned, TokenERC20 { - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function PlazaToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - emit Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13084.sol b/data_full/CVE/2018-13084.sol deleted file mode 100644 index d9cab28a..00000000 --- a/data_full/CVE/2018-13084.sol +++ /dev/null @@ -1,155 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-28 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient -{ -function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; -} - -contract StandardToken { - - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - event Transfer(address indexed from, address indexed to, uint256 value); - - event Burn(address indexed from, uint256 value); - - function StandardToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - - function _transfer(address _from, address _to, uint _value) { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - function transfer(address _to, uint256 _value) public returns (bool success) - { - _transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} - -contract GoodTimeCoin is owned, StandardToken { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - event FrozenFunds(address target, bool frozen); - - function GoodTimeCoin( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) StandardToken(initialSupply, tokenName, tokenSymbol) public {} - - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13085.sol b/data_full/CVE/2018-13085.sol deleted file mode 100644 index 3c2f97a7..00000000 --- a/data_full/CVE/2018-13085.sol +++ /dev/null @@ -1,295 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-04-06 -*/ - -/** ----------------------------------------------------------------------------------------------- -FreeCoin Token Contract, version 3.01 - -Interwave Global -www.iw-global.com ----------------------------------------------------------------------------------------------- -**/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - uint public free = 100 * 10 ** uint256(decimals); - - // This creates an array with all balances - mapping (address => uint256) public balances; - mapping (address => mapping (address => uint256)) public allowance; - mapping (address => bool) public created; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - - function changeFree(uint newFree) public { - free = newFree; - } - - - function balanceOf(address _owner) public constant returns (uint balance) { - //if (!created[_owner] ) { - if (!created[_owner] && balances[_owner] == 0) { - return free; - } - else - { - return balances[_owner]; - } - } - - - - /** - * Constructor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balances[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - created[msg.sender] = true; - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - - if (!created[_from]) { - balances[_from] = free; - created[_from] = true; - } - - if (!created[_to]) { - created[_to] = true; - } - - - // Check if the sender has enough - require(balances[_from] >= _value); - // Check for overflows - require(balances[_to] + _value >= balances[_to]); - // Save this for an assertion in the future - uint previousBalances = balances[_from] + balances[_to]; - // Subtract from the sender - balances[_from] -= _value; - // Add the same to the recipient - balances[_to] += _value; - - emit Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balances[_from] + balances[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` on behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens on your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balances[msg.sender] >= _value); // Check if the sender has enough - balances[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - emit Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balances[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balances[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - emit Burn(_from, _value); - return true; - } -} - - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract FreeCoin is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function FreeCoin( - uint256 initialSupply, - string tokenName , - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - /** - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balances[_from] >= _value); // Check if the sender has enough - require (balances[_to] + _value >= balances[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balances[_from] -= _value; // Subtract from the sender - balances[_to] += _value; // Add the same to the recipient - emit Transfer(_from, _to, _value); - } - **/ - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balances[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(address(this).balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13086.sol b/data_full/CVE/2018-13086.sol deleted file mode 100644 index bcf5798b..00000000 --- a/data_full/CVE/2018-13086.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-04-16 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract Token { - - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - event Transfer(address indexed from, address indexed to, uint256 value); - - event Burn(address indexed from, uint256 value); - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - - - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} - -contract IADOWR is owned, Token { - string public name = "IADOWR Coin"; - string public symbol = "IAD"; - address public IADAddress = this; - uint8 public decimals = 18; - uint256 public initialSupply = 2000000000000000000000000000; - uint256 public totalSupply = 2000000000000000000000000000; - uint256 public unitsOneEthCanBuy = 5000; - uint256 public buyPriceEth = 0.2 finney; - uint256 public sellPriceEth = 0.1 finney; - uint256 public gasForIAD = 30000 wei; - uint256 public IADForGas = 1; - uint256 public gasReserve = 0.1 ether; - uint256 public minBalanceForAccounts = 2 finney; - bool public directTradeAllowed = false; - - - function IADOWR() { - balanceOf[msg.sender] = totalSupply; - } - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - event FrozenFunds(address target, bool frozen); - - - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - - - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13087.sol b/data_full/CVE/2018-13087.sol deleted file mode 100644 index 9e979ac3..00000000 --- a/data_full/CVE/2018-13087.sol +++ /dev/null @@ -1,233 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-07-02 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; // decimals 可以有的小数点个数,最小的代币单位。18 是建议的默认值 - uint256 public totalSupply; - - // 用mapping保存每个地址对应的余额 - mapping (address => uint256) public balanceOf; - // 存储对账号的控制 - mapping (address => mapping (address => uint256)) public allowance; - - // 事件,用来通知客户端交易发生 - event Transfer(address indexed from, address indexed to, uint256 value); - - // 事件,用来通知客户端代币被消费 - event Burn(address indexed from, uint256 value); - - /** - * 初始化构造 - */ - function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // 供应的份额,份额跟最小的代币单位有关,份额 = 币数 * 10 ** decimals。 - balanceOf[msg.sender] = totalSupply; // 创建者拥有所有的代币 - name = tokenName; // 代币名称 - symbol = tokenSymbol; // 代币符号 - } - - /** - * 代币交易转移的内部实现 - */ - function _transfer(address _from, address _to, uint _value) internal { - // 确保目标地址不为0x0,因为0x0地址代表销毁 - require(_to != 0x0); - // 检查发送者余额 - require(balanceOf[_from] >= _value); - // 确保转移为正数个 - require(balanceOf[_to] + _value > balanceOf[_to]); - - // 以下用来检查交易, - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - - // 用assert来检查代码逻辑。 - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * 代币交易转移 - * 从创建交易者账号发送`_value`个代币到 `_to`账号 - * - * @param _to 接收者地址 - * @param _value 转移数额 - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * 账号之间代币交易转移 - * @param _from 发送者地址 - * @param _to 接收者地址 - * @param _value 转移数额 - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * 设置某个地址(合约)可以交易者名义花费的代币数。 - * - * 允许发送者`_spender` 花费不多于 `_value` 个代币 - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * 设置允许一个地址(合约)以交易者名义可最多花费的代币数。 - * - * @param _spender 被授权的地址(合约) - * @param _value 最大可花费代币数 - * @param _extraData 发送给合约的附加数据 - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * 销毁创建者账户中指定个代币 - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * 销毁用户账户中指定个代币 - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract MyAdvancedToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) payable public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13088.sol b/data_full/CVE/2018-13088.sol deleted file mode 100644 index 59e8bad7..00000000 --- a/data_full/CVE/2018-13088.sol +++ /dev/null @@ -1,248 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-06-23 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract MyAdvancedToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13089.sol b/data_full/CVE/2018-13089.sol deleted file mode 100644 index e5ce56e8..00000000 --- a/data_full/CVE/2018-13089.sol +++ /dev/null @@ -1,254 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-11-10 -*/ - -pragma solidity ^0.4.16; - - // ---------------------------------------------------------------------------------------------- - // UCoin Token Contract, version 2.00 - // UNIVERSAL COIN INTERNATIONAL INC - // OMC Chambers, Wickhams Cay 1, Road Town, Tortola, British Virgin Islands - // ---------------------------------------------------------------------------------------------- - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - string public name ; - string public symbol ; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply ; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract UCoinToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function UCoinToken( - - ) - - TokenERC20(5000000000, "Universal Coin", "UCOIN") public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13090.sol b/data_full/CVE/2018-13090.sol deleted file mode 100644 index c09670f9..00000000 --- a/data_full/CVE/2018-13090.sol +++ /dev/null @@ -1,248 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-02-08 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract YiTongCoin is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function YiTongCoin( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13091.sol b/data_full/CVE/2018-13091.sol deleted file mode 100644 index 689ae361..00000000 --- a/data_full/CVE/2018-13091.sol +++ /dev/null @@ -1,206 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-11-18 -*/ - -pragma solidity ^0.4.16; - -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal constant returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - } - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract sumocoin is owned { - - using SafeMath for uint256; - - // Public variables of the token - string public name = "sumocoin"; - string public symbol = "SUMO"; - uint8 public decimals = 18; - uint256 public totalSupply = 10**25; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - - function sumocoin(){ - balanceOf[msg.sender] = totalSupply; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } - - function distributeToken(address[] addresses, uint256 _value) onlyOwner { - for (uint i = 0; i < addresses.length; i++) { - balanceOf[owner] -= _value; - balanceOf[addresses[i]] += _value; - Transfer(owner, addresses[i], _value); - } -} -} \ No newline at end of file diff --git a/data_full/CVE/2018-13092.sol b/data_full/CVE/2018-13092.sol deleted file mode 100644 index d52ebf4e..00000000 --- a/data_full/CVE/2018-13092.sol +++ /dev/null @@ -1,178 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-01-23 -*/ - -pragma solidity ^0.4.18; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract ReimburseToken is owned{ - // Public variables - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - - // Balances array - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - //ERC20 events - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function ReimburseToken( - uint256 initialSupply - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = "Reimburse Token"; - symbol = "REIM"; - decimals = 18; - } - - /** - * ERC20 balance function - */ - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balanceOf[_owner]; - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - // Failsafe logic that should never be false - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens on your behalf - * - * @param _spender the address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public returns (bool success) { - - allowance[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it - * - * @param _spender the address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - -} - -contract AdvReimburseToken is owned, ReimburseToken { - - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function AdvReimburseToken( - uint256 initialSupply - ) ReimburseToken(initialSupply) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - -} \ No newline at end of file diff --git a/data_full/CVE/2018-13113.sol b/data_full/CVE/2018-13113.sol deleted file mode 100644 index bfb0b89b..00000000 --- a/data_full/CVE/2018-13113.sol +++ /dev/null @@ -1,142 +0,0 @@ -pragma solidity ^0.4.4; - -contract Token { - - /// @return total amount of tokens - function totalSupply() constant returns (uint256 supply) {} - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) constant returns (uint256 balance) {} - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) returns (bool success) {} - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - - /// @notice `msg.sender` approves `_addr` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of wei to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) returns (bool success) {} - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - -} - -contract StandardToken is Token { - - function transfer(address _to, uint256 _value) returns (bool success) { - //Default assumes totalSupply can't be over max (2^256 - 1). - //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. - //Replace the if with this one instead. - //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - //same as above. Replace this line with the following if you want to protect against wrapping uints. - //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} - -contract HashnodeTestCoin is StandardToken { // CHANGE THIS. Update the contract name. - - /* Public variables of the token */ - - /* - NOTE: - The following variables are OPTIONAL vanities. One does not have to include them. - They allow one to customise the token contract & in no way influences the core functionality. - Some wallets/interfaces might not even bother to look at this information. - */ - string public name; // Token Name - uint8 public decimals; // How many decimals to show. To be standard complicant keep it 18 - string public symbol; // An identifier: eg SBX, XPR etc.. - string public version = 'H1.0'; - uint256 public unitsOneEthCanBuy; // How many units of your coin can be bought by 1 ETH? - uint256 public totalEthInWei; // WEI is the smallest unit of ETH (the equivalent of cent in USD or satoshi in BTC). We'll store the total ETH raised via our ICO here. - address public fundsWallet; // Where should the raised ETH go? - - // This is a constructor function - // which means the following function name has to match the contract name declared above - function HashnodeTestCoin() { - balances[msg.sender] = 100000000000000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS) - totalSupply = 100000000000000000000000000; // Update total supply (1000 for example) (CHANGE THIS) - name = "Easy Trading Token"; // Set the name for display purposes (CHANGE THIS) - decimals = 18; // Amount of decimals for display purposes (CHANGE THIS) - symbol = "ETT"; // Set the symbol for display purposes (CHANGE THIS) - unitsOneEthCanBuy = 40000; // Set the price of your token for the ICO (CHANGE THIS) - fundsWallet = msg.sender; // The owner of the contract gets ETH - } - - function() payable{ - totalEthInWei = totalEthInWei + msg.value; - uint256 amount = msg.value * unitsOneEthCanBuy; - require(balances[fundsWallet] >= amount); - - balances[fundsWallet] = balances[fundsWallet] - amount; - balances[msg.sender] = balances[msg.sender] + amount; - - Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain - - //Transfer ether to fundsWallet - fundsWallet.transfer(msg.value); - } - - /* Approves and then calls the receiving contract */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. - //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) - //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} diff --git a/data_full/CVE/2018-13126.sol b/data_full/CVE/2018-13126.sol deleted file mode 100644 index 5e8ba7b5..00000000 --- a/data_full/CVE/2018-13126.sol +++ /dev/null @@ -1,301 +0,0 @@ -pragma solidity ^0.4.18; - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - uint256 public totalSupply; - - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - - event Transfer(address indexed from, address indexed to, uint256 value); -} - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - - Transfer(msg.sender, _to, _value); - - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } -} - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - - Transfer(_from, _to, _value); - - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - - Approval(msg.sender, _spender, _value); - - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } -} - -/** - * @title Spend Token - */ -contract SpendToken is StandardToken { - string public constant name = "Spend Token"; - string public constant symbol = "SPEND"; - uint8 public constant decimals = 18; - - address public presale; - address public team; - - uint public constant TOKEN_LIMIT = 50000000; - - /** - * @dev Create our actual token - */ - function SpendToken(address _presale, address _team) public { - require(_presale != address(0)); - require(_team != address(0)); - - presale = _presale; - team = _team; - } - - /** - * @dev Mint new tokens to the specified address, only callable by the - * presale contract itself - */ - function mint(address _holder, uint _value) external { - require(msg.sender == presale); - require(_value > 0); - require(totalSupply + _value <= TOKEN_LIMIT); - - balances[_holder] += _value; - totalSupply += _value; - - Transfer(0x0, _holder, _value); - } -} - -/** - * @title MoxyOne Presale - */ -contract MoxyOnePresale { - enum PreSaleState { - PreSaleStarted, - PreSaleFinished - } - - SpendToken public token; - PreSaleState public preSaleState = PreSaleState.PreSaleStarted; - address public team; - bool public isPaused = false; - uint256 public pricePerToken = 1 ether / 1000; - - event PreSaleStarted(); - event PreSaleFinished(); - event PreSalePaused(); - event PreSaleResumed(); - event TokenBuy(address indexed buyer, uint256 tokens); - - /** - * @dev Only allow the team to execute these commands - */ - modifier teamOnly { - require(msg.sender == team); - - _; - } - - /** - * @dev Create the presale contract and the token contract alongside - */ - function MoxyOnePresale() public { - team = msg.sender; - token = new SpendToken(this, team); - } - - /** - * @dev Pause the presale in the event of an emergency - */ - function pausePreSale() external teamOnly { - require(!isPaused); - require(preSaleState == PreSaleState.PreSaleStarted); - - isPaused = true; - - PreSalePaused(); - } - - /** - * @dev Resume the presale if necessary - */ - function resumePreSale() external teamOnly { - require(isPaused); - require(preSaleState == PreSaleState.PreSaleStarted); - - isPaused = false; - - PreSaleResumed(); - } - - /** - * @dev End the presale event, preventing any further token purchases - */ - function finishPreSale() external teamOnly { - require(preSaleState == PreSaleState.PreSaleStarted); - - preSaleState = PreSaleState.PreSaleFinished; - - PreSaleFinished(); - } - - /** - * @dev Withdraw the funds from this contract to the specified address - */ - function withdrawFunds(address _target, uint256 _amount) external teamOnly { - _target.transfer(_amount); - } - - /** - * @dev Buy tokens, called internally from the catcher - */ - function buyTokens(address _buyer, uint256 _value) internal returns (uint) { - require(_buyer != address(0)); - require(_value > 0); - require(preSaleState == PreSaleState.PreSaleStarted); - require(!isPaused); - - uint256 boughtTokens = _value / pricePerToken; - - require(boughtTokens > 0); - - token.mint(_buyer, boughtTokens); - - TokenBuy(_buyer, boughtTokens); - } - - /** - * @dev Catch any incoming payments to the contract and convert the ETH to tokens - */ - function () external payable { - buyTokens(msg.sender, msg.value); - } -} diff --git a/data_full/CVE/2018-13127.sol b/data_full/CVE/2018-13127.sol deleted file mode 100644 index 565cd731..00000000 --- a/data_full/CVE/2018-13127.sol +++ /dev/null @@ -1,238 +0,0 @@ -pragma solidity ^0.4.19; - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - // SafeMath.sub will throw if there is not enough balance. - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - -} - - - - - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - - /** - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - */ - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - -/** - * @title Spade PreSale Token - */ -contract DSPXToken is StandardToken { - - string public constant name = "SP8DE PreSale Token"; - string public constant symbol = "DSPX"; - uint8 public constant decimals = 18; - address public preSale; - address public team; - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 888888888 * (1e18); - - // Constructor - function DSPXToken(address _preSale, address _team) { - require(_preSale != address(0)); - require(_team != address(0)); - preSale = _preSale; - team = _team; - } - - // Create tokens - function mint(address holder, uint value) { - require(msg.sender == preSale); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - - // Allow token transfer - function unfreeze() external { - require(msg.sender == team); - isFrozen = false; - } - - // ERC20 functions - // ========================= - function transfer(address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transfer(_to, _value); - } - - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } -} diff --git a/data_full/CVE/2018-13128.sol b/data_full/CVE/2018-13128.sol deleted file mode 100644 index 6a85b5c0..00000000 --- a/data_full/CVE/2018-13128.sol +++ /dev/null @@ -1,193 +0,0 @@ -pragma solidity ^0.4.21; - -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { - if (a == 0) { - return 0; - } - c = a * b; - assert(c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - return a / b; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256 c) { - c = a + b; - assert(c >= a); - return c; - } -} - -/** -* @title Contract that will work with ERC223 tokens. -*/ - -contract ERC223ReceivingContract{ - /** - * @dev Standard ERC223 function that will handle incoming token transfers. - * - * @param _from Token sender address. - * @param _value Amount of tokens. - * @param _data Transaction metadata. - */ - function tokenFallback(address _from, uint _value, bytes _data) public; -} - -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) public constant returns (uint); - function transfer(address to, uint value) public; - event Transfer(address indexed from, address indexed to, uint value); -} - -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint); - function transferFrom(address from, address to, uint value) public; - function approve(address spender, uint value) public; - event Approval(address indexed owner, address indexed spender, uint value); -} - -contract BasicToken is ERC20Basic { - using SafeMath for uint; - - mapping(address => uint) balances; - - modifier onlyPayloadSize(uint size) { - require(msg.data.length >= size + 4); - _; - } - - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) public { - uint codeLength; - bytes memory empty; - - assembly { - codeLength := extcodesize(_to) - } - - - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - - if(codeLength > 0) { - ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); - receiver.tokenFallback(msg.sender, _value, empty); - } - - emit Transfer(msg.sender, _to, _value); - } - - function balanceOf(address _owner) public constant returns (uint balance) { - return balances[_owner]; - } - -} - -contract StandardToken is BasicToken, ERC20 { - - mapping (address => mapping (address => uint)) allowed; - - function transferFrom(address _from, address _to, uint _value) public { - uint256 _allowance = allowed[_from][msg.sender]; - uint codeLength; - bytes memory empty; - - assembly { - codeLength := extcodesize(_to) - } - - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - - if(codeLength>0) { - ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); - receiver.tokenFallback(msg.sender, _value, empty); - } - - emit Transfer(_from, _to, _value); - } - - function approve(address _spender, uint _value) public { - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - } - - function allowance(address _owner, address _spender) public constant returns (uint remaining) { - return allowed[_owner][_spender]; - } - -} - -contract BurnableToken is StandardToken { - - function burn(uint _value) public { - require(_value > 0); - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - emit Burn(burner, _value); - } - - event Burn(address indexed burner, uint indexed value); - -} - -contract ETY is BurnableToken { - - string public name = "Etherty Token"; - string public symbol = "ETY"; - uint public decimals = 18; - uint constant TOKEN_LIMIT = 240 * 1e6 * 1e18; - - address public ico; - - bool public tokensAreFrozen = true; - - function ETY(address _ico) public { - ico = _ico; - } - - function mint(address _holder, uint _value) external { - require(msg.sender == ico); - require(_value != 0); - require(totalSupply + _value <= TOKEN_LIMIT); - - balances[_holder] += _value; - totalSupply += _value; - emit Transfer(0x0, _holder, _value); - } - - function burn(uint _value) public { - require(msg.sender == ico); - super.burn(_value); - } - - function unfreeze() external { - require(msg.sender == ico); - tokensAreFrozen = false; - } - - function transfer(address _to, uint _value) public { - require(!tokensAreFrozen); - super.transfer(_to, _value); - } - - function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) public { - require(!tokensAreFrozen); - super.transferFrom(_from, _to, _value); - } - - function approve(address _spender, uint _value) public { - require(!tokensAreFrozen); - super.approve(_spender, _value); - } -} diff --git a/data_full/CVE/2018-13129.sol b/data_full/CVE/2018-13129.sol deleted file mode 100644 index b951fb59..00000000 --- a/data_full/CVE/2018-13129.sol +++ /dev/null @@ -1,276 +0,0 @@ -pragma solidity ^0.4.18; - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - // SafeMath.sub will throw if there is not enough balance. - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - -} - - - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - - /** - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - */ - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - - -// Migration Agent interface -contract MigrationAgent { - function migrateFrom(address _from, uint _value) public; -} - -/** - * @title Spade Token - */ -contract SPXToken is StandardToken { - - string public constant name = "SP8DE Token"; - string public constant symbol = "SPX"; - uint8 public constant decimals = 18; - address public ico; - - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 8888888888 * (1e18); - - // Token migration variables - address public migrationMaster; - address public migrationAgent; - uint public totalMigrated; - - event Migrate(address indexed _from, address indexed _to, uint _value); - - // Constructor - function SPXToken(address _ico, address _migrationMaster) public { - require(_ico != 0); - ico = _ico; - migrationMaster = _migrationMaster; - } - - // Create tokens - function mint(address holder, uint value) public { - require(msg.sender == ico); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - - // Allow token transfer. - function unfreeze() public { - require(msg.sender == ico); - isFrozen = false; - } - - // ERC20 functions - // ========================= - function transfer(address _to, uint _value) public returns (bool) { - require(_to != address(0)); - require(!isFrozen); - return super.transfer(_to, _value); - } - - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } - - // Token migration - function migrate(uint value) external { - require(migrationAgent != 0); - require(value > 0); - require(value <= balances[msg.sender]); - - balances[msg.sender] -= value; - totalSupply -= value; - totalMigrated += value; - MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); - Migrate(msg.sender, migrationAgent, value); - } - - // Set address of migration contract - function setMigrationAgent(address _agent) external { - require(migrationAgent == 0); - require(msg.sender == migrationMaster); - migrationAgent = _agent; - } - - function setMigrationMaster(address _master) external { - require(msg.sender == migrationMaster); - require(_master != 0); - migrationMaster = _master; - } -} diff --git a/data_full/CVE/2018-13131.sol b/data_full/CVE/2018-13131.sol deleted file mode 100644 index 2697be56..00000000 --- a/data_full/CVE/2018-13131.sol +++ /dev/null @@ -1,312 +0,0 @@ -pragma solidity ^0.4.19; - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - // SafeMath.sub will throw if there is not enough balance. - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - -} - - - - - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - - /** - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - */ - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - -/** - * @title Spade PreSale Token - */ -contract DSPXToken is StandardToken { - - string public constant name = "SP8DE PreSale Token"; - string public constant symbol = "DSPX"; - uint8 public constant decimals = 18; - address public preSale; - address public team; - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 888888888 * (1e18); - - // Constructor - function DSPXToken(address _preSale, address _team) { - require(_preSale != address(0)); - require(_team != address(0)); - preSale = _preSale; - team = _team; - } - - // Create tokens - function mint(address holder, uint value) { - require(msg.sender == preSale); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - - // Allow token transfer - function unfreeze() external { - require(msg.sender == team); - isFrozen = false; - } - - // ERC20 functions - // ========================= - function transfer(address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transfer(_to, _value); - } - - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } -} - -/** - * @title Spade PreSale -*/ -contract SpadePreSale { - - // The token being sold - DSPXToken public token; - - address public team; - address public icoAgent; - - // Modifiers - modifier teamOnly {require(msg.sender == team); _;} - modifier icoAgentOnly {require(msg.sender == icoAgent); _;} - - bool public isPaused = false; - enum PreSaleState { Created, PreSaleStarted, PreSaleFinished } - PreSaleState public preSaleState = PreSaleState.Created; - - // Events - event PreSaleStarted(); - event PreSaleFinished(); - - event PreSalePaused(); - event PreSaleResumed(); - - event TokenBuy(address indexed buyer, uint256 tokens, uint factor, string tx); - - function SpadePreSale(address _team, address _icoAgent) public { - require(_team != address(0)); - require(_icoAgent != address(0)); - team = _team; - icoAgent = _icoAgent; - token = new DSPXToken(this, team); - } - - function startPreSale() external teamOnly { - require(preSaleState == PreSaleState.Created); - preSaleState = PreSaleState.PreSaleStarted; - PreSaleStarted(); - } - - function pausePreSale() external teamOnly { - require(!isPaused); - require(preSaleState == PreSaleState.PreSaleStarted); - isPaused = true; - PreSalePaused(); - } - - function resumePreSale() external teamOnly { - require(isPaused); - require(preSaleState == PreSaleState.PreSaleStarted); - isPaused = false; - PreSaleResumed(); - } - - function finishPreSale() external teamOnly { - require(preSaleState == PreSaleState.PreSaleStarted); - preSaleState = PreSaleState.PreSaleFinished; - PreSaleFinished(); - } - - function buyPreSaleTokens(address buyer, uint256 tokens, uint factor, string txHash) external icoAgentOnly returns (uint) { - require(buyer != address(0)); - require(tokens > 0); - require(preSaleState == PreSaleState.PreSaleStarted); - require(!isPaused); - - token.mint(buyer, tokens); - - TokenBuy(buyer, tokens, factor, txHash); - } -} diff --git a/data_full/CVE/2018-13132.sol b/data_full/CVE/2018-13132.sol deleted file mode 100644 index 9d9e20f8..00000000 --- a/data_full/CVE/2018-13132.sol +++ /dev/null @@ -1,403 +0,0 @@ -pragma solidity ^0.4.18; - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - // SafeMath.sub will throw if there is not enough balance. - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - -} - - - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - - /** - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - */ - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - - -// Migration Agent interface -contract MigrationAgent { - function migrateFrom(address _from, uint _value) public; -} - -/** - * @title Spade Token - */ -contract SPXToken is StandardToken { - - string public constant name = "SP8DE Token"; - string public constant symbol = "SPX"; - uint8 public constant decimals = 18; - address public ico; - - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 8888888888 * (1e18); - - // Token migration variables - address public migrationMaster; - address public migrationAgent; - uint public totalMigrated; - - event Migrate(address indexed _from, address indexed _to, uint _value); - - // Constructor - function SPXToken(address _ico, address _migrationMaster) public { - require(_ico != 0); - ico = _ico; - migrationMaster = _migrationMaster; - } - - // Create tokens - function mint(address holder, uint value) public { - require(msg.sender == ico); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - - // Allow token transfer. - function unfreeze() public { - require(msg.sender == ico); - isFrozen = false; - } - - // ERC20 functions - // ========================= - function transfer(address _to, uint _value) public returns (bool) { - require(_to != address(0)); - require(!isFrozen); - return super.transfer(_to, _value); - } - - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } - - // Token migration - function migrate(uint value) external { - require(migrationAgent != 0); - require(value > 0); - require(value <= balances[msg.sender]); - - balances[msg.sender] -= value; - totalSupply -= value; - totalMigrated += value; - MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); - Migrate(msg.sender, migrationAgent, value); - } - - // Set address of migration contract - function setMigrationAgent(address _agent) external { - require(migrationAgent == 0); - require(msg.sender == migrationMaster); - migrationAgent = _agent; - } - - function setMigrationMaster(address _master) external { - require(msg.sender == migrationMaster); - require(_master != 0); - migrationMaster = _master; - } -} - -/** - * @title Spade SpadeIco - */ -contract SpadeIco { - - uint public constant TOKENS_FOR_SALE = 3655555558 * 1e18; - uint public constant TOKENS_FOUNDATION = 1777777778 * 1e18; - - uint tokensSold = 0; - - // Ico token - SPXToken public token; - address public team; - address public icoAgent; - address public migrationMaster; - // Modifiers - modifier teamOnly {require(msg.sender == team); _;} - modifier icoAgentOnly {require(msg.sender == icoAgent); _;} - - bool public isPaused = false; - enum IcoState { Created, IcoStarted, IcoFinished } - IcoState public icoState = IcoState.Created; - - event IcoStarted(); - event IcoFinished(); - event IcoPaused(); - event IcoResumed(); - event TokenBuy(address indexed buyer, uint256 tokens, uint256 factor, string tx); - event TokenBuyPresale(address indexed buyer, uint256 tokens, uint256 factor, string tx); - event TokenWin(address indexed buyer, uint256 tokens, uint256 jackpot); - - function SpadeIco(address _team, address _icoAgent, address _migrationMaster) public { - require(_team != address(0) && _icoAgent != address(0) && _migrationMaster != address(0)); - migrationMaster = _migrationMaster; - team = _team; - icoAgent = _icoAgent; - token = new SPXToken(this, migrationMaster); - } - - function startIco() external teamOnly { - require(icoState == IcoState.Created); - icoState = IcoState.IcoStarted; - IcoStarted(); - } - - function finishIco(address foundation, address other) external teamOnly { - require(foundation != address(0)); - require(other != address(0)); - - require(icoState == IcoState.IcoStarted); - icoState = IcoState.IcoFinished; - - uint256 amountWithFoundation = SafeMath.add(token.totalSupply(), TOKENS_FOUNDATION); - if (amountWithFoundation > token.TOKEN_LIMIT()) { - uint256 foundationToMint = token.TOKEN_LIMIT() - token.totalSupply(); - if (foundationToMint > 0) { - token.mint(foundation, foundationToMint); - } - } else { - token.mint(foundation, TOKENS_FOUNDATION); - - uint mintedTokens = token.totalSupply(); - - uint remaining = token.TOKEN_LIMIT() - mintedTokens; - if (remaining > 0) { - token.mint(other, remaining); - } - } - - token.unfreeze(); - IcoFinished(); - } - - function pauseIco() external teamOnly { - require(!isPaused); - require(icoState == IcoState.IcoStarted); - isPaused = true; - IcoPaused(); - } - - function resumeIco() external teamOnly { - require(isPaused); - require(icoState == IcoState.IcoStarted); - isPaused = false; - IcoResumed(); - } - - function convertPresaleTokens(address buyer, uint256 tokens, uint256 factor, string txHash) external icoAgentOnly returns (uint) { - require(buyer != address(0)); - require(tokens > 0); - require(validState()); - - uint256 tokensToSell = SafeMath.add(tokensSold, tokens); - require(tokensToSell <= TOKENS_FOR_SALE); - tokensSold = tokensToSell; - - token.mint(buyer, tokens); - TokenBuyPresale(buyer, tokens, factor, txHash); - } - - function creditJackpotTokens(address buyer, uint256 tokens, uint256 jackpot) external icoAgentOnly returns (uint) { - require(buyer != address(0)); - require(tokens > 0); - require(validState()); - - token.mint(buyer, tokens); - TokenWin(buyer, tokens, jackpot); - } - - function buyTokens(address buyer, uint256 tokens, uint256 factor, string txHash) external icoAgentOnly returns (uint) { - require(buyer != address(0)); - require(tokens > 0); - require(validState()); - - uint256 tokensToSell = SafeMath.add(tokensSold, tokens); - require(tokensToSell <= TOKENS_FOR_SALE); - tokensSold = tokensToSell; - - token.mint(buyer, tokens); - TokenBuy(buyer, tokens, factor, txHash); - } - - function validState() internal view returns (bool) { - return icoState == IcoState.IcoStarted && !isPaused; - } -} diff --git a/data_full/CVE/2018-13144.sol b/data_full/CVE/2018-13144.sol deleted file mode 100644 index 0dadf164..00000000 --- a/data_full/CVE/2018-13144.sol +++ /dev/null @@ -1,103 +0,0 @@ -pragma solidity ^0.4.8; -contract Token{ - // token总量,默认会为public变量生成一个getter函数接口,名称为totalSupply(). - uint256 public totalSupply; - - /// 获取账户_owner拥有token的数量 - function balanceOf(address _owner) constant returns (uint256 balance); - - //从消息发送者账户中往_to账户转数量为_value的token - function transfer(address _to, uint256 _value) returns (bool success); - - //从账户_from中往账户_to转数量为_value的token,与approve方法配合使用 - function transferFrom(address _from, address _to, uint256 _value) returns - (bool success); - - //消息发送账户设置账户_spender能从发送账户中转出数量为_value的token - function approve(address _spender, uint256 _value) returns (bool success); - - //获取账户_spender可以从账户_owner中转出token的数量 - function allowance(address _owner, address _spender) constant returns - (uint256 remaining); - - //发生转账时必须要触发的事件 - event Transfer(address indexed _from, address indexed _to, uint256 _value); - - //当函数approve(address _spender, uint256 _value)成功执行时必须触发的事件 - event Approval(address indexed _owner, address indexed _spender, uint256 - _value); -} - -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - //默认totalSupply 不会超过最大值 (2^256 - 1). - //如果随着时间的推移将会有新的token生成,则可以用下面这句避免溢出的异常 - //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value;//从消息发送者账户中减去token数量_value - balances[_to] += _value;//往接收账户增加token数量_value - Transfer(msg.sender, _to, _value);//触发转币交易事件 - return true; - } - - - function transferFrom(address _from, address _to, uint256 _value) returns - (bool success) { - //require(balances[_from] >= _value && allowed[_from][msg.sender] >= - // _value && balances[_to] + _value > balances[_to]); - require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); - balances[_to] += _value;//接收账户增加token数量_value - balances[_from] -= _value; //支出账户_from减去token数量_value - allowed[_from][msg.sender] -= _value;//消息发送者可以从账户_from中转出的数量减少_value - Transfer(_from, _to, _value);//触发转币交易事件 - return true; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - - function approve(address _spender, uint256 _value) returns (bool success) - { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender];//允许_spender从_owner中转出的token数 - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} - -contract HumanStandardToken is StandardToken { - - /* Public variables of the token */ - string public name; //名称: eg Simon Bucks - uint8 public decimals; //最多的小数位数,How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. - string public symbol; //token简称: eg SBX - string public version = 'H0.1'; //版本 - - function HumanStandardToken(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) { - balances[msg.sender] = _initialAmount; // 初始token数量给予消息发送者 - totalSupply = _initialAmount; // 设置初始总量 - name = _tokenName; // token名称 - decimals = _decimalUnits; // 小数位数 - symbol = _tokenSymbol; // token简称 - } - - /* Approves and then calls the receiving contract */ - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. - //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) - //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. - require(_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)); - return true; - } - -} diff --git a/data_full/CVE/2018-13189.sol b/data_full/CVE/2018-13189.sol deleted file mode 100644 index 8cf0aef7..00000000 --- a/data_full/CVE/2018-13189.sol +++ /dev/null @@ -1,335 +0,0 @@ -pragma solidity ^0.4.18; - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal constant returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) constant returns (uint256); - function transfer(address to, uint256 value) returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - - -/** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant returns (uint256); - function transferFrom(address from, address to, uint256 value) returns (bool); - function approve(address spender, uint256 value) returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) returns (bool) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } -} - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * @dev https://github.com/ethereum/EIPs/issues/20 - * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amout of tokens to be transfered - */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool) { - var _allowance = allowed[_from][msg.sender]; - - // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met - // require (_value <= _allowance); - - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) returns (bool) { - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender, 0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_value == 0) || (allowed[msg.sender][_spender] == 0)); - - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifing the amount of tokens still avaible for the spender. - */ - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} - - -/** - * @title Ownable - * @dev The Ownable contract has an owner address, and provides basic authorization control - * functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { - address public owner; - - - /** - * @dev The Ownable constructor sets the original `owner` of the contract to the sender - * account. - */ - function Ownable() { - owner = msg.sender; - } - - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - - /** - * @dev Allows the current owner to transfer control of the contract to a newOwner. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) onlyOwner { - if (newOwner != address(0)) { - owner = newOwner; - } - } -} - - - -/** - * @title Pausable - * @dev Base contract which allows children to implement an emergency stop mechanism. - */ -contract Pausable is Ownable { - event Pause(); - event Unpause(); - - bool public paused = false; - - - /** - * @dev modifier to allow actions only when the contract IS paused - */ - modifier whenNotPaused() { - require(!paused); - _; - } - - /** - * @dev modifier to allow actions only when the contract IS NOT paused - */ - modifier whenPaused { - require(paused); - _; - } - - /** - * @dev called by the owner to pause, triggers stopped state - */ - function pause() onlyOwner whenNotPaused returns (bool) { - paused = true; - Pause(); - return true; - } - - /** - * @dev called by the owner to unpause, returns to normal state - */ - function unpause() onlyOwner whenPaused returns (bool) { - paused = false; - Unpause(); - return true; - } -} - - -/** - * Pausable token - * - * Simple ERC20 Token example, with pausable token creation - **/ - -contract PausableToken is StandardToken, Pausable { - - function transfer(address _to, uint _value) whenNotPaused returns (bool) { - return super.transfer(_to, _value); - } - - function transferFrom(address _from, address _to, uint _value) whenNotPaused returns (bool) { - return super.transferFrom(_from, _to, _value); - } -} - - - -contract UNLB is PausableToken { - - string public constant name = "UnolaboToken"; - string public constant symbol = "UNLB"; - uint256 public constant decimals = 18; - - function UNLB() { - owner = msg.sender; - } - - function mint(address _x, uint _v) public onlyOwner { - balances[_x] += _v; - totalSupply += _v; - Transfer(0x0, _x, _v); - } -} - - - -contract ICO is Pausable { - - uint public constant ICO_START_DATE = /*2017-11-27 17:00:00+8*/ 1511773200; - uint public constant ICO_END_DATE = /*2018-04-30 00:17:00+8*/ 1525018620; - - address public constant admin = 0xFeC0714C2eE71a486B679d4A3539FA875715e7d8; - address public constant teamWallet = 0xf16d5733A31D54e828460AFbf7D60aA803a61C51; - - UNLB public unlb; - bool public isFinished = false; - - event ForeignBuy(address investor, uint unlbValue, string txHash); - - function ICO() { - owner = admin; - unlb = new UNLB(); - unlb.pause(); - } - - function pricePerWei() public constant returns(uint) { - if (now < /*2017-11-28 00:17:00+8*/ 1511799420) return 800.0 * 1 ether; - else if(now < /*2017-11-29 00:17:00+8*/ 1511885820) return 750.0 * 1 ether; - else if(now < /*2017-12-14 00:17:00+8*/ 1513181820) return 675.0 * 1 ether; - else if(now < /*2018-01-10 00:17:00+8*/ 1515514620) return 575.0 * 1 ether; - else if(now < /*2018-01-18 00:17:00+8*/ 1516205820) return 537.5 * 1 ether; - else return 500.0 * 1 ether; - } - - - function() public payable { - require(!paused && now >= ICO_START_DATE && now < ICO_END_DATE); - uint _tokenVal = (msg.value * pricePerWei()) / 1 ether; - unlb.mint(msg.sender, _tokenVal); - } - - function foreignBuy(address _investor, uint _unlbValue, string _txHash) external onlyOwner { - require(!paused && now >= ICO_START_DATE && now < ICO_END_DATE); - require(_unlbValue > 0); - unlb.mint(_investor, _unlbValue); - ForeignBuy(_investor, _unlbValue, _txHash); - } - - function finish(address _team, address _fund, address _bounty, address _backers) external onlyOwner { - require(now >= ICO_END_DATE && !isFinished); - unlb.unpause(); - isFinished = true; - - uint _total = unlb.totalSupply() * 100 / (100 - 12 - 15 - 5 - 3); - unlb.mint(_team, (_total * 12) / 100); - unlb.mint(_fund, (_total * 15) / 100); - unlb.mint(_bounty, (_total * 5) / 100); - unlb.mint(_backers, (_total * 3) / 100); - } - - - function withdraw() external onlyOwner { - teamWallet.transfer(this.balance); - } -} diff --git a/data_full/CVE/2018-13202.sol b/data_full/CVE/2018-13202.sol deleted file mode 100644 index 9d32d1c1..00000000 --- a/data_full/CVE/2018-13202.sol +++ /dev/null @@ -1,183 +0,0 @@ -pragma solidity ^0.4.11; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MyBoToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* This notifies clients about the amount burnt */ - event Burn(address indexed from, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyBoToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } - - function burn(uint256 amount) onlyOwner returns (bool success) { - if (balanceOf[msg.sender] < amount) throw; // Check if the sender has enough - balanceOf[msg.sender] -= amount; // Subtract from the sender - totalSupply -= amount; // Updates totalSupply - Burn(msg.sender, amount); - return true; - } - -} diff --git a/data_full/CVE/2018-13208.sol b/data_full/CVE/2018-13208.sol deleted file mode 100644 index 7c3179d7..00000000 --- a/data_full/CVE/2018-13208.sol +++ /dev/null @@ -1,171 +0,0 @@ -//ERC20 Token -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "MoneyTree 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MoneyTreeToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 95000000 * 10**8; - uint8 public constant decimalUnits = 8; - string public tokenName = "MoneyTree"; - string public tokenSymbol = "TREE"; - function MoneyTreeToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} diff --git a/data_full/CVE/2018-13220.sol b/data_full/CVE/2018-13220.sol deleted file mode 100644 index 64469724..00000000 --- a/data_full/CVE/2018-13220.sol +++ /dev/null @@ -1,171 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MAVCash is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MAVCash( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} diff --git a/data_full/CVE/2018-13221.sol b/data_full/CVE/2018-13221.sol deleted file mode 100644 index 8dc7fa9f..00000000 --- a/data_full/CVE/2018-13221.sol +++ /dev/null @@ -1,186 +0,0 @@ -pragma solidity ^0.4.14; - -/* ©The Extreme Coin (XT) SWAP for Yobit.net contract - +35796229192 - ©RomanLanskoj 2017 -There is no law stronger than the code -*/ -library SafeMath { - function mul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - function sub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - function add(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c >= a); - return c; - } - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} - -contract Ownable { - address public owner; - function Ownable() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - if (newOwner != address(0)) { - owner = newOwner; - } - } -} - -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant returns (uint); - function transferFrom(address from, address to, uint value); - function approve(address spender, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} - -contract newToken is ERC20Basic { - - using SafeMath for uint; - - mapping(address => uint) balances; - - - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - } - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } -} - -contract StandardToken is newToken, ERC20 { - mapping (address => mapping (address => uint)) allowed; - function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) { - var _allowance = allowed[_from][msg.sender]; - // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met - // if (_value > _allowance) throw; - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - } - function approve(address _spender, uint _value) { - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling approve(_spender, 0) if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - } - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } -} - -contract Extreme is StandardToken, Ownable { - string public constant name = "Extreme Coin"; - string public constant symbol = "XT"; - uint public constant decimals = 2; - uint256 public initialSupply; - - // Constructor - function Extreme () { - totalSupply = 59347950076; - balances[msg.sender] = totalSupply; - initialSupply = totalSupply; - Transfer(0, this, totalSupply); - Transfer(this, msg.sender, totalSupply); - } -} - -contract ExtremeToken is Ownable, Extreme { - -uint256 public sellPrice; -uint256 public buyPrice; - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable returns (uint amount) - { - amount = msg.value / buyPrice; - if (balances[this] < amount) throw; - balances[msg.sender] += amount; - balances[this] -= amount; - Transfer(this, msg.sender, amount); - } - - function sell(uint256 amount) { - if (balances[msg.sender] < amount ) throw; - balances[this] += amount; - balances[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } - - function transfer(address _to, uint256 _value) { - require(balances[msg.sender] > _value); - require(balances[_to] + _value > balances[_to]); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balances[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - -} diff --git a/data_full/CVE/2018-13225.sol b/data_full/CVE/2018-13225.sol deleted file mode 100644 index 9a31acb4..00000000 --- a/data_full/CVE/2018-13225.sol +++ /dev/null @@ -1,181 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - assert(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - assert (balanceOf[msg.sender] >= _value); // Check if the sender has enough - assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - assert (balanceOf[_from] >= _value); // Check if the sender has enough - assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - assert (_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - assert(false); // Prevents accidental sending of ether - } -} - -contract MyYLCToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* This notifies clients about the amount burnt */ - event Burn(address indexed from, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyYLCToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - assert (balanceOf[msg.sender] >= _value); // Check if the sender has enough - assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - assert (!frozenAccount[msg.sender]); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - assert (!frozenAccount[_from]); // Check if frozen - assert (balanceOf[_from] >= _value); // Check if the sender has enough - assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - assert (_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - assert (balanceOf[this] >= amount); // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - assert (balanceOf[msg.sender] >= amount ); // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - assert (msg.sender.send(amount * sellPrice)); // sends ether to the seller. It's important - // to do this last to avoid recursion attacks - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - - function burn(uint256 amount) onlyOwner returns (bool success) { - assert (balanceOf[msg.sender] >= amount); // Check if the sender has enough - balanceOf[msg.sender] -= amount; // Subtract from the sender - totalSupply -= amount; // Updates totalSupply - Burn(msg.sender, amount); - return true; - } - -} diff --git a/data_full/CVE/2018-13227.sol b/data_full/CVE/2018-13227.sol deleted file mode 100644 index c3e468ed..00000000 --- a/data_full/CVE/2018-13227.sol +++ /dev/null @@ -1,172 +0,0 @@ -//ERC20 Token -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "MoneyChainNet 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract MoneyChainNetToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 35000000 * 10**8;//total supply 35 Million - uint8 public constant decimalUnits = 8;//decimals 8 - string public tokenName = "MoneyChainNet";//name MoneyChainNet - string public tokenSymbol = "MCN";//symbol MCN - //is this fine?yes - function MoneyChainNetToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} diff --git a/data_full/CVE/2018-13228.sol b/data_full/CVE/2018-13228.sol deleted file mode 100644 index 72b1c6fb..00000000 --- a/data_full/CVE/2018-13228.sol +++ /dev/null @@ -1,171 +0,0 @@ -//ERC20 Token -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "Crowdnext 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract Crowdnext is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 100000000 * 10**4; - uint8 public constant decimalUnits = 4; - string public tokenName = "Crowdnext"; - string public tokenSymbol = "CNX"; - function Crowdnext() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} diff --git a/data_full/CVE/2018-13230.sol b/data_full/CVE/2018-13230.sol deleted file mode 100644 index dfa896d9..00000000 --- a/data_full/CVE/2018-13230.sol +++ /dev/null @@ -1,171 +0,0 @@ -//ERC20 Token -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "DestiNeed 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract DestiNeedToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 950000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "DestiNeed"; - string public tokenSymbol = "DSN"; - function DestiNeedToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} diff --git a/data_full/CVE/2018-13325.sol b/data_full/CVE/2018-13325.sol deleted file mode 100644 index 3df76fb7..00000000 --- a/data_full/CVE/2018-13325.sol +++ /dev/null @@ -1,176 +0,0 @@ -pragma solidity ^0.4.18; -interface tokenRecipient{ - function receiveApproval(address _from,uint256 _value,address _token,bytes _extraData) external ; -} -contract GrowToken{ - //public var - address public owner; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - uint256 public sellPrice; //grow to wei not eth! - uint256 public buyPrice; - bool public sellOpen; - bool public buyOpen; - - //store token data set - mapping(address => uint256) public balanceOf; - //transition limite - mapping(address => mapping(address => uint256)) public allowance; - //freeze account - mapping(address=>bool) public frozenAccount; - - //event for transition - event Transfer(address indexed from,address indexed to , uint256 value); - //event for allowance - event Approval(address indexed owner,address indexed spender,uint256 value); - //event for freeze/unfreeze Account - event FrozenFunds(address target,bool freeze); - //TODO event for sell token , do't need it now - event SellToken(address seller,uint256 sellPrice, uint256 amount,uint256 getEth); - //TODO event for buy token , do't need it now - event BuyToken(address buyer,uint256 buyPrice,uint256 amount,uint256 spendEth); - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - //func constructor - function GrowToken() public { - owner = 0x757D7FbB9822b5033a6BBD4e17F95714942f921f; - name = "GROWCHAIN"; - symbol = "GROW"; - decimals = 8; - totalSupply = 5000000000 * 10 ** uint256(8); - - //init totalSupply to map(db) - balanceOf[owner] = totalSupply; - } - - function () public payable { - if(msg.sender!=owner){ - _buy(); - } - } - - // public functions - // 1 Transfer tokens - function transfer(address _to,uint256 _value) public{ - require(!frozenAccount[msg.sender]); - if(_to == address(this)){ - _sell(msg.sender,_value); - }else{ - _transfer(msg.sender,_to,_value); - } - } - - // 2 Transfer Other's tokens ,who had approve some token to me - function transferFrom(address _from,address _to,uint256 _value) public returns (bool success){ - //validate the allowance - require(!frozenAccount[_from]&&!frozenAccount[msg.sender]); - require(_value<=allowance[_from][msg.sender]); - //do action :sub allowance and do transfer - allowance[_from][msg.sender] -= _value; - if(_to == address(this)){ - _sell(_from,_value); - }else - { - _transfer(_from,_to,_value); - } - - return true; - } - //A is msg.sender or i - //B is the person who has approve me to use his token or _from - //C is the receipient or _to - - // 3 set allowance for other address,like B approve A(_spender) to use his token - function approve(address _spender,uint256 _value) public returns (bool success){ - require(!frozenAccount[msg.sender]); - allowance[msg.sender][_spender] = _value; - return true; - } - // 4 allowance and notify the receipient/spender - function approveAndCall(address _spender,uint256 _value,bytes _extraData) - public returns (bool success){ - require(!frozenAccount[msg.sender]); - tokenRecipient spender = tokenRecipient(_spender); - if(approve(_spender,_value)){ - spender.receiveApproval(msg.sender,_value,this,_extraData); - return true; - } - } - - // onlyOwner function - // 11 freeze or unfreeze account - function freezeAccount(address target,bool freeze) onlyOwner public{ - require(target!=owner); - frozenAccount[target] = freeze; - FrozenFunds(target,freeze); - } - // 12 transfer contract Ownership to newOwner and transfer all balanceOf oldOwner to newOwner - function transferOwnership(address newOwner) onlyOwner public{ - _transfer(owner,newOwner,balanceOf[owner]); - owner = newOwner; - } - // 13 set prices for sellPrice or buyPrice - function setPrices(uint256 newSellPrice,uint256 newBuyPrice) onlyOwner public{ - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - // 14 open/close user to buy token - function setBuyOpen(bool newBuyOpen) onlyOwner public{ - require(buyPrice>0); - buyOpen = newBuyOpen; - } - // 15 open/close user to sell token - function setSellOpen(bool newSellOpen) onlyOwner public{ - require(sellPrice>0); - sellOpen = newSellOpen; - } - // 16 transfer eth back to owner - function transferEth(uint256 amount) onlyOwner public{ - msg.sender.transfer(amount*10**uint256(18)); - } - - //internal transfer function - // 1 _transfer - function _transfer(address _from,address _to, uint256 _value) internal { - //validate input and other internal limites - require(_to != 0x0);//check to address - require(balanceOf[_from] >= _value);//check from address has enough balance - require(balanceOf[_to] + _value >balanceOf[_to]);//after transfer the balance of _to address is ok ,no overflow - uint256 previousBalances = balanceOf[_from]+balanceOf[_to];//store it for add asset to power the security - //do transfer:sub from _from address,and add to the _to address - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - //after transfer: emit transfer event,and add asset for security - Transfer(_from,_to,_value); - assert(balanceOf[_from]+balanceOf[_to] == previousBalances); - } - // 2 _buy - function _buy() internal returns (uint256 amount){ - require(buyOpen); - require(buyPrice>0); - require(msg.value>0); - amount = msg.value / buyPrice; // calculates the amount - _transfer(owner,msg.sender,amount); - BuyToken(msg.sender,buyPrice,amount,msg.value); - return amount; // ends function and returns - } - - // 3 _sell - function _sell(address _from,uint256 amount) internal returns (uint256 revenue){ - require(sellOpen); - require(!frozenAccount[_from]); - require(amount>0); - require(sellPrice>0); - require(_from!=owner); - _transfer(_from,owner,amount); - revenue = amount * sellPrice; - _from.transfer(revenue); // sends ether to the seller: it's important to do this last to prevent recursion attacks - SellToken(_from,sellPrice,amount,revenue); - return revenue; // ends function and returns - } -} diff --git a/data_full/CVE/2018-13326.sol b/data_full/CVE/2018-13326.sol deleted file mode 100644 index 864b5ec0..00000000 --- a/data_full/CVE/2018-13326.sol +++ /dev/null @@ -1,135 +0,0 @@ -pragma solidity ^0.4.4; - -contract Token { - - /// @return total amount of tokens - function totalSupply() constant returns (uint256 supply) {} - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) constant returns (uint256 balance) {} - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) returns (bool success) {} - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - - /// @notice `msg.sender` approves `_addr` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of wei to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) returns (bool success) {} - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - -} - -contract StandardToken is Token { - - function transfer(address _to, uint256 _value) returns (bool success) { - //Default assumes totalSupply can't be over max (2^256 - 1). - //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. - //Replace the if with this one instead. - //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - //same as above. Replace this line with the following if you want to protect against wrapping uints. - //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} - -contract Bittelux is StandardToken { - - /* Public variables of the token */ - - string public name; - uint8 public decimals; - string public symbol; - string public version = 'H1.0'; - uint256 public unitsOneEthCanBuy; - uint256 public totalEthInWei; - address public fundsWallet; - - //constructor function - function Bittelux() { - balances[msg.sender] = 10000000000000000000000000000; - totalSupply = 10000000000000000000000000000; - name = "Bittelux"; - decimals = 18; - symbol = "BTX"; - unitsOneEthCanBuy = 22500; - fundsWallet = msg.sender; - } - - function() payable{ - totalEthInWei = totalEthInWei + msg.value; - uint256 amount = msg.value * unitsOneEthCanBuy; - require(balances[fundsWallet] >= amount); - - balances[fundsWallet] = balances[fundsWallet] - amount; - balances[msg.sender] = balances[msg.sender] + amount; - - Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain - - //Transfer ether to fundsWallet - fundsWallet.transfer(msg.value); - } - - /* Approves and then calls the receiving contract */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - - //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. - //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) - //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} diff --git a/data_full/CVE/2018-13327.sol b/data_full/CVE/2018-13327.sol deleted file mode 100644 index aac64339..00000000 --- a/data_full/CVE/2018-13327.sol +++ /dev/null @@ -1,92 +0,0 @@ -pragma solidity ^0.4.4; - -contract Token { - - function totalSupply() constant returns (uint256 supply) {} - - function balanceOf(address _owner) constant returns (uint256 balance) {} - - function transfer(address _to, uint256 _value) returns (bool success) {} - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - - function approve(address _spender, uint256 _value) returns (bool success) {} - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - -contract StandardToken is Token { - - function transfer(address _to, uint256 _value) returns (bool success) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} - -contract ChuCunLingAIGO is StandardToken { - - function () { - throw; - } - - string public name; - uint8 public decimals; - string public symbol; - string public version = 'H0.1'; - - function ChuCunLingAIGO( - uint256 _initialAmount, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol - ) { - balances[msg.sender] = _initialAmount; - totalSupply = _initialAmount; - name = _tokenName; - decimals = _decimalUnits; - symbol = _tokenSymbol; - } - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} diff --git a/data_full/CVE/2018-13493.sol b/data_full/CVE/2018-13493.sol deleted file mode 100644 index 441785a0..00000000 --- a/data_full/CVE/2018-13493.sol +++ /dev/null @@ -1,344 +0,0 @@ -pragma solidity ^0.4.16; - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal constant returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - - string public name; - string public symbol; - - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - - - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public - { - totalSupply = initialSupply * 10**18; // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) - { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) - { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - _value = _value * (10**18); - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract DaddyToken is owned, TokenERC20 { - - uint8 public decimals = 18; - - uint256 public totalContribution = 0; - uint256 public totalBonusTokensIssued = 0; - - uint256 public sellTokenPerEther; - uint256 public buyTokenPerEther; - bool public purchasingAllowed = true; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function DaddyToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public - {} - - - function distributeToken(address[] addresses, uint256 _value) onlyOwner public { - _value = _value * 10**18; - for (uint i = 0; i < addresses.length; i++) { - - balanceOf[owner] -= _value; - balanceOf[addresses[i]] += _value; - Transfer(owner, addresses[i], _value); - } - } - - function enablePurchasing() onlyOwner public { - require (msg.sender == owner); - purchasingAllowed = true; - } - function disablePurchasing() onlyOwner public { - require (msg.sender == owner); - purchasingAllowed = false; - } - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public returns (bool) { - mintedAmount = mintedAmount * 10**18; - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - return true; - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellTokenPerEther = newSellPrice; - buyTokenPerEther = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function() payable public { - require(msg.value > 0); - require(purchasingAllowed); - //uint amount = msg.value / buyTokenPerEther; // calculates the amount - //_transfer(this, msg.sender, amount); // makes the transfers - - owner.transfer(msg.value); - totalContribution += msg.value; - - uint256 tokensIssued = (msg.value * buyTokenPerEther); - - if (msg.value >= 10 finney) { - tokensIssued += totalContribution; - - bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); - if (bonusHash[0] == 0) { - uint8 bonusMultiplier = ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); - - uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; - tokensIssued += bonusTokensIssued; - - totalBonusTokensIssued += bonusTokensIssued; - } - } - - totalSupply += tokensIssued; - balanceOf[msg.sender] += tokensIssued; - - Transfer(address(this), msg.sender, tokensIssued); - - - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellTokenPerEther); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellTokenPerEther); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } -} diff --git a/data_full/CVE/2018-13533.sol b/data_full/CVE/2018-13533.sol deleted file mode 100644 index 0cb69a9b..00000000 --- a/data_full/CVE/2018-13533.sol +++ /dev/null @@ -1,191 +0,0 @@ -pragma solidity ^0.4.18; - -/* -Developed by: https://www.investbtceur.com -*/ - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 0; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - event Transfer(address indexed from, address indexed to, uint256 value); - - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } -} - -contract ALUXToken is owned, TokenERC20 { - uint256 public sellPrice = 10000000000000000; - uint256 public buyPrice = 10000000000000000; - bool public closeBuy = false; - bool public closeSell = false; - address public commissionGetter = 0xCd8bf69ad65c5158F0cfAA599bBF90d7f4b52Bb0; - uint256 public minimumCommission = 100000000000000; - mapping (address => bool) public frozenAccount; - - event FrozenFunds(address target, bool frozen); - event LogDeposit(address sender, uint amount); - event LogWithdrawal(address receiver, uint amount); - - function ALUXToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - - function refillTokens(uint256 _value) public onlyOwner{ - _transfer(msg.sender, this, _value); - } - - function transfer(address _to, uint256 _value) public { - uint market_value = _value * sellPrice; - uint commission = market_value * 4 / 1000; - if (commission < minimumCommission){ commission = minimumCommission; } - address contr = this; - require(contr.balance >= commission); - commissionGetter.transfer(commission); - _transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - uint market_value = _value * sellPrice; - uint commission = market_value * 4 / 1000; - if (commission < minimumCommission){ commission = minimumCommission; } - address contr = this; - require(contr.balance >= commission); - commissionGetter.transfer(commission); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - function mintToken(uint256 mintedAmount) onlyOwner public { - balanceOf[owner] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, owner, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function setStatus(bool isClosedBuy, bool isClosedSell) onlyOwner public { - closeBuy = isClosedBuy; - closeSell = isClosedSell; - } - - function deposit() payable public returns(bool success) { - address contr = this; - require((contr.balance + msg.value) > contr.balance); - LogDeposit(msg.sender, msg.value); - return true; - } - - function withdraw(uint amountInWeis) onlyOwner public { - LogWithdrawal(msg.sender, amountInWeis); - owner.transfer(amountInWeis); - } - - function buy() payable public { - require(!closeBuy); - uint amount = msg.value / buyPrice; - uint market_value = amount * buyPrice; - uint commission = market_value * 4 / 1000; - if (commission < minimumCommission){ commission = minimumCommission; } - address contr = this; - require(contr.balance >= commission); - commissionGetter.transfer(commission); - _transfer(this, msg.sender, amount); - } - - function sell(uint256 amount) public { - require(!closeSell); - address contr = this; - uint market_value = amount * sellPrice; - uint commission = market_value * 4 / 1000; - if (commission < minimumCommission){ commission = minimumCommission; } - uint amount_weis = market_value + commission; - require(contr.balance >= amount_weis); - commissionGetter.transfer(commission); - _transfer(msg.sender, this, amount); - msg.sender.transfer(market_value); - } - - function () public payable { buy(); } -} diff --git a/data_full/CVE/2018-13625.sol b/data_full/CVE/2018-13625.sol deleted file mode 100644 index cfef162b..00000000 --- a/data_full/CVE/2018-13625.sol +++ /dev/null @@ -1,271 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public centralAuthority; - address public plutocrat; - - function owned() { - centralAuthority = msg.sender; - plutocrat = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != centralAuthority) revert(); - _; - } - - modifier onlyPlutocrat { - if (msg.sender != plutocrat) revert(); - _; - } - - function transfekbolOwnership(address newOwner) onlyPlutocrat { - centralAuthority = newOwner; - } - - function transfekbolPlutocrat(address newPlutocrat) onlyPlutocrat { - plutocrat = newPlutocrat; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public decentralizedEconomy = 'PLUTOCRACY'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed owner, address indexed spender, uint256 value); - event InterestFreeLending(address indexed from, address indexed to, uint256 value, uint256 duration_in_days); - event Settlement(address indexed from, address indexed to, uint256 value, string notes, string reference); - event AuthorityNotified(string notes, string reference); - event ClientsNotified(string notes, string reference); - event LoanRepaid(address indexed from, address indexed to, uint256 value, string reference); - event TokenBurnt(address indexed from, uint256 value); - event EconomyTaxed(string base_value, string target_value, string tax_rate, string taxed_value, string notes); - event EconomyRebated(string base_value, string target_value, string rebate_rate, string rebated_value, string notes); - event PlutocracyAchieved(string value, string notes); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - Approval (msg.sender, _spender, _value); - return true; - } - - /* Approve and then comunicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (_to == 0x0) revert(); - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - revert(); // Prevents accidental sending of ether - } -} - -contract Krown is owned, token { - - string public nominalValue; - string public update; - string public sign; - string public website; - uint256 public totalSupply; - uint256 public notificationFee; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function Krown( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol, - address centralMinter - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { - if(centralMinter != 0 ) centralAuthority = centralMinter; // Sets the owner as specified (if centralMinter is not specified the owner is msg.sender) - balanceOf[centralAuthority] = initialSupply; // Give the owner all initial tokens - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (_to == 0x0) revert(); - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* Lend coins */ - function lend(address _to, uint256 _value, uint256 _duration_in_days) { - if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - if (_duration_in_days > 36135) revert(); - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - InterestFreeLending(msg.sender, _to, _value, _duration_in_days); // Notify anyone listening that this transfer took place - } - - /* Send coins */ - function repayLoan(address _to, uint256 _value, string _reference) { - if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - if (bytes(_reference).length != 66) revert(); - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - LoanRepaid(msg.sender, _to, _value, _reference); // Notify anyone listening that this transfer took place - } - - function settlvlement(address _from, uint256 _value, address _to, string _notes, string _reference) onlyOwner { - if (_from == plutocrat) revert(); - if (_to == 0x0) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (bytes(_reference).length != 66) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Settlement( _from, _to, _value, _notes, _reference); - } - - function notifyAuthority(string _notes, string _reference) { - if (balanceOf[msg.sender] < notificationFee) revert(); - if (bytes(_reference).length > 66) revert(); - if (bytes(_notes).length > 64) revert(); - balanceOf[msg.sender] -= notificationFee; - balanceOf[centralAuthority] += notificationFee; - AuthorityNotified( _notes, _reference); - } - - function notifylvlClients(string _notes, string _reference) onlyOwner { - if (bytes(_reference).length > 66) revert(); - if (bytes(_notes).length > 64) revert(); - ClientsNotified( _notes, _reference); - } - function taxlvlEconomy(string _base_value, string _target_value, string _tax_rate, string _taxed_value, string _notes) onlyOwner { - EconomyTaxed( _base_value, _target_value, _tax_rate, _taxed_value, _notes); - } - - function rebatelvlEconomy(string _base_value, string _target_value, string _rebate_rate, string _rebated_value, string _notes) onlyOwner { - EconomyRebated( _base_value, _target_value, _rebate_rate, _rebated_value, _notes); - } - - function plutocracylvlAchieved(string _value, string _notes) onlyOwner { - PlutocracyAchieved( _value, _notes); - } - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintlvlToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function burnlvlToken(address _from, uint256 _value) onlyOwner { - if (_from == plutocrat) revert(); - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - balanceOf[_from] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - TokenBurnt(_from, _value); - } - - function freezelvlAccount(address target, bool freeze) onlyOwner { - if (target == plutocrat) revert(); - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setlvlSign(string newSign) onlyOwner { - sign = newSign; - } - - function setlvlNominalValue(string newNominalValue) onlyOwner { - nominalValue = newNominalValue; - } - - function setlvlUpdate(string newUpdate) onlyOwner { - update = newUpdate; - } - - function setlvlWebsite(string newWebsite) onlyOwner { - website = newWebsite; - } - - function setlvlNfee(uint256 newFee) onlyOwner { - notificationFee = newFee; - } - -} diff --git a/data_full/CVE/2018-13670.sol b/data_full/CVE/2018-13670.sol deleted file mode 100644 index d55b665d..00000000 --- a/data_full/CVE/2018-13670.sol +++ /dev/null @@ -1,103 +0,0 @@ -pragma solidity ^0.4.18; - - -contract Owned { - address public owner; - - function Owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - - -contract GFCB is Owned { - - string public name="Golden Fortune Coin Blocked"; - string public symbol="GFCB"; - uint8 public decimals=18; - uint256 public totalSupply; - uint256 public sellPrice; - uint256 public buyPrice; - uint minBalanceForAccounts; - - mapping (address => uint256) public balanceOf; - mapping (address => bool) public frozenAccount; - - event Transfer(address indexed from, address indexed to, uint256 value); - event FrozenFunds(address target, bool frozen); - - function GFCB() public { - totalSupply = 10000000000000000000000000000; - balanceOf[msg.sender] = totalSupply; - } - - function setMinBalance(uint minimumBalanceInFinney) onlyOwner public { - minBalanceForAccounts = minimumBalanceInFinney * 1 finney; - } - - /* Internal transfer, can only be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - emit Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) public { - require(!frozenAccount[msg.sender]); - if (msg.sender.balance= amount); - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - emit Transfer(this, msg.sender, amount); - return amount; - } - - function sell(uint amount) public returns (uint revenue) { - require(balanceOf[msg.sender] >= amount); - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - revenue = amount * sellPrice; - msg.sender.transfer(revenue); - emit Transfer(msg.sender, this, amount); - return revenue; - } -} diff --git a/data_full/CVE/2018-13695.sol b/data_full/CVE/2018-13695.sol deleted file mode 100644 index 5ee55979..00000000 --- a/data_full/CVE/2018-13695.sol +++ /dev/null @@ -1,301 +0,0 @@ -pragma solidity ^0.4.14; - - - - - -contract SafeMath { - function safeMul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function safeDiv(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - - function safeSub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - - function safeAdd(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c>=a && c>=b); - return c; - } - - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} - - - - -contract ERC20 { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function allowance(address owner, address spender) constant returns (uint); - - function transfer(address to, uint value) returns (bool ok); - function transferFrom(address from, address to, uint value) returns (bool ok); - function approve(address spender, uint value) returns (bool ok); - event Transfer(address indexed from, address indexed to, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} - - - - -contract StandardToken is ERC20, SafeMath { - - /* Token supply got increased and a new owner received these tokens */ - event Minted(address receiver, uint amount); - - /* Actual balances of token holders */ - mapping(address => uint) balances; - - /* approve() allowances */ - mapping (address => mapping (address => uint)) allowed; - - /* Interface declaration */ - function isToken() public constant returns (bool weAre) { - return true; - } - - function transfer(address _to, uint _value) returns (bool success) { - - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint _value) returns (bool success) { - - uint _allowance = allowed[_from][msg.sender]; - - balances[_to] = safeAdd(balances[_to], _value); - balances[_from] = safeSub(balances[_from], _value); - allowed[_from][msg.sender] = safeSub(_allowance, _value); - Transfer(_from, _to, _value); - return true; - } - - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } - - function approve(address _spender, uint _value) returns (bool success) { - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender, 0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; - - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } - -} - - - - - - - -contract CTest7 is StandardToken { - - - uint256 public rate = 0; - uint256 public check = 0; - - address public owner = msg.sender; - address public Founder1 = 0xB5D39A8Ea30005f9114Bf936025De2D6f353813E; - address public Founder2 = 0x00A591199F53907480E1f5A00958b93B43200Fe4; - address public Founder3 = 0x0d19C131400e73c71bBB2bC1666dBa8Fe22d242D; - - uint256 public tokenAmount; - - string public constant name = "CTest7 Token"; - string public constant symbol = "CTest7"; - uint8 public constant decimals = 18; // 18 decimal places, the same as ETH. - - - - function mint(address receiver, uint amount) public { - - tokenAmount = ((msg.value*rate)/(1 ether)); - - if (tokenAmount != amount || amount == 0 || receiver != msg.sender) - { - revert(); - } - - - totalSupply = totalSupply + (amount*1 ether); - balances[receiver] += (amount*1 ether); - - // This will make the mint transaction appear in EtherScan.io - // We can remove this after there is a standardized minting event - Transfer(0, receiver, (amount*1 ether)); - } - - - - //This function is called when Ether is sent to the contract address - //Even if 0 ether is sent. - function () payable { - - - uint256 oldSupply = totalSupply; - totalSupply = (totalSupply/1 ether); - - - - //If all the tokens are gone, stop! - if (totalSupply > 999999) - { - revert(); - } - - - - //Set the price to 0.0003 ETH/CTest1 - //$0.10 per - if (totalSupply < 25000) - { - rate = 3340; - } - - //Set the price to 0.0015 ETH/CTest1 - //$0.50 per - if (totalSupply >= 25000) - { - rate = 668; - } - - //Set the price to 0.0030 ETH/CTest1 - //$1.00 per - if (totalSupply >= 125000) - { - rate = 334; - } - - //Set the price to 0.0075 ETH/CTest1 - //$2.50 per - if (totalSupply >= 525000) - { - rate = 134; - } - - - - - tokenAmount = 0; - tokenAmount = ((msg.value*rate)/(1 ether)); - - - //Make sure they send enough to buy atleast 1 token. - if (tokenAmount < 0) - { - revert(); - } - - - //Make sure someone isn't buying more than the remaining supply - check = 0; - - check = safeAdd(totalSupply, tokenAmount); - - if (check > 1000000) - { - revert(); - } - - - //Make sure someone isn't buying more than the current tier - if (totalSupply < 25000 && check > 25000) - { - revert(); - } - - //Make sure someone isn't buying more than the current tier - if (totalSupply < 125000 && check > 125000) - { - revert(); - } - - //Make sure someone isn't buying more than the current tier - if (totalSupply < 525000 && check > 525000) - { - revert(); - } - - - //Prevent any ETH address from buying more than 50 CTest1 during the pre-sale - uint256 senderBalance = (balances[msg.sender]/1 ether); - if ((senderBalance + tokenAmount) > 50 && totalSupply < 25000) - { - revert(); - } - - - totalSupply = oldSupply; - mint(msg.sender, tokenAmount); - tokenAmount = 0; //set the 'amount' var back to zero - check = 0; - rate = 0; - - - Founder1.transfer((msg.value/3)); //Send the ETH - Founder2.transfer((msg.value/3)); //Send the ETH - Founder3.transfer((msg.value/3)); //Send the ETH - - } - - - //Burn all remaining tokens. - //Only contract creator can do this. - function Burn () { - - if (msg.sender == owner && totalSupply < 1000000) - { - totalSupply = 1000000; - } else {throw;} - - } - - - -} diff --git a/data_full/CVE/2018-13698.sol b/data_full/CVE/2018-13698.sol deleted file mode 100644 index b67f2ce0..00000000 --- a/data_full/CVE/2018-13698.sol +++ /dev/null @@ -1,131 +0,0 @@ -// Play2LivePromo token smart contract. -// Developed by Phenom.Team - -pragma solidity ^0.4.18; - -contract Play2LivePromo { - //Owner address - address public owner; - //Public variables of the token - string public constant name = "Level Up Coin Diamond | play2live.io"; - string public constant symbol = "LUCD"; - uint8 public constant decimals = 18; - uint public totalSupply = 0; - uint256 promoValue = 777 * 1e18; - mapping(address => uint) balances; - mapping(address => mapping (address => uint)) allowed; - // Events Log - event Transfer(address _from, address _to, uint256 amount); - event Approval(address indexed _owner, address indexed _spender, uint _value); - // Modifiers - // Allows execution by the contract owner only - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - /** - * @dev Contract constructor function sets owner address - */ - function Play2LivePromo() { - owner = msg.sender; - } - - /** - * @dev Allows owner to change promo value - * @param _newValue new - */ - function setPromo(uint256 _newValue) external onlyOwner { - promoValue = _newValue; - } - - /** - * @dev Get balance of investor - * @param _investor investor's address - * @return balance of investor - */ - function balanceOf(address _investor) public constant returns(uint256) { - return balances[_investor]; - } - - - /** - * @dev Mint tokens - * @param _investor beneficiary address the tokens will be issued to - */ - function mintTokens(address _investor) external onlyOwner { - balances[_investor] += promoValue; - totalSupply += promoValue; - Transfer(0x0, _investor, promoValue); - - } - - - /** - * @dev Send coins - * throws on any error rather then return a false flag to minimize - * user errors - * @param _to target address - * @param _amount transfer amount - * - * @return true if the transfer was successful - */ - function transfer(address _to, uint _amount) public returns (bool) { - balances[msg.sender] -= _amount; - balances[_to] -= _amount; - Transfer(msg.sender, _to, _amount); - return true; - } - - /** - * @dev An account/contract attempts to get the coins - * throws on any error rather then return a false flag to minimize user errors - * - * @param _from source address - * @param _to target address - * @param _amount transfer amount - * - * @return true if the transfer was successful - */ - function transferFrom(address _from, address _to, uint _amount) public returns (bool) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] -= _amount; - Transfer(_from, _to, _amount); - return true; - } - - - /** - * @dev Allows another account/contract to spend some tokens on its behalf - * throws on any error rather then return a false flag to minimize user errors - * - * also, to minimize the risk of the approve/transferFrom attack vector - * approve has to be called twice in 2 separate transactions - once to - * change the allowance to 0 and secondly to change it to the new allowance - * value - * - * @param _spender approved address - * @param _amount allowance amount - * - * @return true if the approval was successful - */ - function approve(address _spender, uint _amount) public returns (bool) { - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * - * @param _owner the address which owns the funds - * @param _spender the address which will spend the funds - * - * @return the amount of tokens still avaible for the spender - */ - function allowance(address _owner, address _spender) constant returns (uint) { - return allowed[_owner][_spender]; - } -} diff --git a/data_full/CVE/2018-13703.sol b/data_full/CVE/2018-13703.sol deleted file mode 100644 index 0ef4af94..00000000 --- a/data_full/CVE/2018-13703.sol +++ /dev/null @@ -1,262 +0,0 @@ -pragma solidity ^0.4.21; -contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData) public; } -contract CERB_Coin - { - /* Variables */ - string public name; // name of contract - string public symbol; // symbol of contract - uint8 public decimals; // how many decimals to keep , 18 is best - uint256 public totalSupply; // how many tokens to create - uint256 public remaining; // how many tokens has left - uint public ethRate; // current rate of ether - address public owner; // contract creator - uint256 public amountCollected; // how much funds has been collected - uint public icoStatus; // allow / disallow online purchase - uint public icoTokenPrice; // token price, start with 10 cents - address public benAddress; // funds withdraw address - address public bkaddress; - uint public allowTransferToken; // allow / disallow token transfer for members - - /* Array */ - mapping (address => uint256) public balanceOf; // array of all balances - mapping (address => mapping (address => uint256)) public allowance; - mapping (address => bool) public frozenAccount; - - /* Events */ - event FrozenFunds(address target, bool frozen); - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - event TransferSell(address indexed from, address indexed to, uint256 value, string typex); // only for ico sales - - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function CERB_Coin() public - { - totalSupply = 1000000000000000000000000000; // as the decimals are 18, we add 18 zero after total supply, as all values are stored in wei - owner = msg.sender; // Set owner of contract - balanceOf[owner] = totalSupply; // Give the creator all initial tokens - name = "CERB Coin"; // Set the name for display purposes - symbol = "CERB"; // Set the symbol for display purposes - decimals = 18; // Amount of decimals for display purposes - remaining = totalSupply; // How many tokens are left - ethRate = 665; // default token price - icoStatus = 1; // default ico status - icoTokenPrice = 50; // values are in cents - benAddress = 0x4532828EC057e6cFa04a42b153d74B345084C4C2; // funds withdraw address - bkaddress = 0x1D38b496176bDaB78D430cebf25B2Fe413d3BF84; - allowTransferToken = 0; // default set to disable, it will be enable after ICO is over - } - - modifier onlyOwner() - { - require((msg.sender == owner) || (msg.sender == bkaddress)); - _; - } - - - function () public payable // called when ether is send to contract - { - } - - function sellOffline(address rec_address,uint256 token_amount) public onlyOwner - { - if (remaining > 0) - { - uint finalTokens = (token_amount * (10 ** 18)); - if(finalTokens < remaining) - { - remaining = remaining - finalTokens; - _transfer(owner,rec_address, finalTokens); - TransferSell(owner, rec_address, finalTokens,'Offline'); - } - else - { - revert(); - } - } - else - { - revert(); - } - } - - function getEthRate() onlyOwner public constant returns (uint) // Get current rate of ether - { - return ethRate; - } - - - function getConBal() onlyOwner public constant returns (uint) // Get Balance - { - return this.balance; - } - - function setEthRate (uint newEthRate) public onlyOwner // Set ether price - { - ethRate = newEthRate; - } - - - function getTokenPrice() onlyOwner public constant returns (uint) // Get current token price - { - return icoTokenPrice; - } - - function setTokenPrice (uint newTokenRate) public onlyOwner // Set one token price - { - icoTokenPrice = newTokenRate; - } - - - function setTransferStatus (uint status) public onlyOwner // Set transfer status - { - allowTransferToken = status; - } - - function changeIcoStatus (uint8 statx) public onlyOwner // Change ICO Status - { - icoStatus = statx; - } - - - function withdraw(uint amountWith) public onlyOwner // withdraw partical amount - { - if((msg.sender == owner) || (msg.sender == bkaddress)) - { - benAddress.transfer(amountWith); - } - else - { - revert(); - } - } - - function withdraw_all() public onlyOwner // call to withdraw all available balance - { - if((msg.sender == owner) || (msg.sender == bkaddress) ) - { - var amountWith = this.balance - 10000000000000000; - benAddress.transfer(amountWith); - } - else - { - revert(); - } - } - - function mintToken(uint256 tokensToMint) public onlyOwner - { - if(tokensToMint > 0) - { - var totalTokenToMint = tokensToMint * (10 ** 18); - balanceOf[owner] += totalTokenToMint; - totalSupply += totalTokenToMint; - Transfer(0, owner, totalTokenToMint); - } - } - - - /* Admin Trasfer */ - function adm_trasfer(address _from,address _to, uint256 _value) public onlyOwner - { - _transfer(_from, _to, _value); - } - - - function freezeAccount(address target, bool freeze) public onlyOwner - { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - - function getCollectedAmount() onlyOwner public constant returns (uint256 balance) - { - return amountCollected; - } - - function balanceOf(address _owner) public constant returns (uint256 balance) - { - return balanceOf[_owner]; - } - - function totalSupply() private constant returns (uint256 tsupply) - { - tsupply = totalSupply; - } - - - function transferOwnership(address newOwner) public onlyOwner - { - balanceOf[owner] = 0; - balanceOf[newOwner] = remaining; - owner = newOwner; - } - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal - { - if(allowTransferToken == 1 || _from == owner ) - { - require(!frozenAccount[_from]); // Prevent transfer from frozenfunds - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add to the recipient - Transfer(_from, _to, _value); // raise event - } - else - { - revert(); - } - } - - function transfer(address _to, uint256 _value) public - { - _transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) - { - require (_value < allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - function approve(address _spender, uint256 _value) public returns (bool success) - { - allowance[msg.sender][_spender] = _value; - return true; - } - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) - { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - function burn(uint256 _value) public returns (bool success) - { - require (balanceOf[msg.sender] > _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - function burnFrom(address _from, uint256 _value) public returns (bool success) - { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} // end of contract diff --git a/data_full/CVE/2018-13722.sol b/data_full/CVE/2018-13722.sol deleted file mode 100644 index 609eebc6..00000000 --- a/data_full/CVE/2018-13722.sol +++ /dev/null @@ -1,410 +0,0 @@ -/* - * ERC20 interface - * see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function allowance(address owner, address spender) constant returns (uint); - - function transfer(address to, uint value) returns (bool ok); - function transferFrom(address from, address to, uint value) returns (bool ok); - function approve(address spender, uint value) returns (bool ok); - event Transfer(address indexed from, address indexed to, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} - - - -/** - * Math operations with safety checks - */ -contract SafeMath { - function safeMul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function safeDiv(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - - function safeSub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - - function safeAdd(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c>=a && c>=b); - return c; - } - - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} - - - -/** - * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. - * - * Based on code by FirstBlood: - * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, SafeMath { - - /* Token supply got increased and a new owner received these tokens */ - event Minted(address receiver, uint amount); - - /* Actual balances of token holders */ - mapping(address => uint) balances; - - /* approve() allowances */ - mapping (address => mapping (address => uint)) allowed; - - /** - * - * Fix for the ERC20 short address attack - * - * http://vessenes.com/the-erc20-short-address-attack-explained/ - */ - modifier onlyPayloadSize(uint size) { - if(msg.data.length != size + 4) { - throw; - } - _; - } - - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) returns (bool success) { - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint _value) returns (bool success) { - uint _allowance = allowed[_from][msg.sender]; - - // Check is not needed because safeSub(_allowance, _value) will already throw if this condition is not met - // if (_value > _allowance) throw; - - balances[_to] = safeAdd(balances[_to], _value); - balances[_from] = safeSub(balances[_from], _value); - allowed[_from][msg.sender] = safeSub(_allowance, _value); - Transfer(_from, _to, _value); - return true; - } - - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } - - function approve(address _spender, uint _value) returns (bool success) { - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender, 0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; - - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } - - /** - * Atomic increment of approved spending - * - * Works around https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * - */ - function addApproval(address _spender, uint _addedValue) - onlyPayloadSize(2 * 32) - returns (bool success) { - uint oldValue = allowed[msg.sender][_spender]; - allowed[msg.sender][_spender] = safeAdd(oldValue, _addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - /** - * Atomic decrement of approved spending. - * - * Works around https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - */ - function subApproval(address _spender, uint _subtractedValue) - onlyPayloadSize(2 * 32) - returns (bool success) { - - uint oldVal = allowed[msg.sender][_spender]; - - if (_subtractedValue > oldVal) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = safeSub(oldVal, _subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - - - -contract BurnableToken is StandardToken { - - address public constant BURN_ADDRESS = 0; - - /** How many tokens we burned */ - event Burned(address burner, uint burnedAmount); - - /** - * Burn extra tokens from a balance. - * - */ - function burn(uint burnAmount) { - address burner = msg.sender; - balances[burner] = safeSub(balances[burner], burnAmount); - totalSupply = safeSub(totalSupply, burnAmount); - Burned(burner, burnAmount); - } -} - - - - - -/** - * Upgrade agent interface inspired by Lunyr. - * - * Upgrade agent transfers tokens to a new contract. - * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. - */ -contract UpgradeAgent { - - uint public originalSupply; - - /** Interface marker */ - function isUpgradeAgent() public constant returns (bool) { - return true; - } - - function upgradeFrom(address _from, uint256 _value) public; - -} - - -/** - * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. - * - * First envisioned by Golem and Lunyr projects. - */ -contract UpgradeableToken is StandardToken { - - /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ - address public upgradeMaster; - - /** The next contract where the tokens will be migrated. */ - UpgradeAgent public upgradeAgent; - - /** How many tokens we have upgraded by now. */ - uint256 public totalUpgraded; - - /** - * Upgrade states. - * - * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun - * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet - * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet - * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens - * - */ - enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} - - /** - * Somebody has upgraded some of his tokens. - */ - event Upgrade(address indexed _from, address indexed _to, uint256 _value); - - /** - * New upgrade agent available. - */ - event UpgradeAgentSet(address agent); - - /** - * Do not allow construction without upgrade master set. - */ - function UpgradeableToken(address _upgradeMaster) { - upgradeMaster = _upgradeMaster; - } - - /** - * Allow the token holder to upgrade some of their tokens to a new contract. - */ - function upgrade(uint256 value) public { - - UpgradeState state = getUpgradeState(); - if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { - // Called in a bad state - throw; - } - - // Validate input value. - if (value == 0) throw; - - balances[msg.sender] = safeSub(balances[msg.sender], value); - - // Take tokens out from circulation - totalSupply = safeSub(totalSupply, value); - totalUpgraded = safeAdd(totalUpgraded, value); - - // Upgrade agent reissues the tokens - upgradeAgent.upgradeFrom(msg.sender, value); - Upgrade(msg.sender, upgradeAgent, value); - } - - /** - * Set an upgrade agent that handles - */ - function setUpgradeAgent(address agent) external { - - if(!canUpgrade()) { - // The token is not yet in a state that we could think upgrading - throw; - } - - if (agent == 0x0) throw; - // Only a master can designate the next agent - if (msg.sender != upgradeMaster) throw; - // Upgrade has already begun for an agent - if (getUpgradeState() == UpgradeState.Upgrading) throw; - - upgradeAgent = UpgradeAgent(agent); - - // Bad interface - if(!upgradeAgent.isUpgradeAgent()) throw; - // Make sure that token supplies match in source and target - if (upgradeAgent.originalSupply() != totalSupply) throw; - - UpgradeAgentSet(upgradeAgent); - } - - /** - * Get the state of the token upgrade. - */ - function getUpgradeState() public constant returns(UpgradeState) { - if(!canUpgrade()) return UpgradeState.NotAllowed; - else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; - else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; - else return UpgradeState.Upgrading; - } - - /** - * Change the upgrade master. - * - * This allows us to set a new owner for the upgrade mechanism. - */ - function setUpgradeMaster(address master) public { - if (master == 0x0) throw; - if (msg.sender != upgradeMaster) throw; - upgradeMaster = master; - } - - /** - * Child contract can enable to provide the condition when the upgrade can begun. - */ - function canUpgrade() public constant returns(bool) { - return true; - } - -} - - -contract HYIPToken is BurnableToken, UpgradeableToken { - - string public name; - string public symbol; - uint public decimals; - address public owner; - - /** List of agents that are allowed to create new tokens */ - mapping (address => bool) public mintAgents; - - event MintingAgentChanged(address addr, bool state); - - /** - * Create new tokens and allocate them to an address.. - * - * Only callably by a crowdsale contract (mint agent). - */ - function mint(address receiver, uint amount) onlyMintAgent public { - totalSupply = totalSupply + amount; - balances[receiver] = balances[receiver] + amount; - - // This will make the mint transaction apper in EtherScan.io - // We can remove this after there is a standardized minting event - Transfer(0, receiver, amount); - } - - /** - * Owner can allow a crowdsale contract to mint new tokens. - */ - function setMintAgent(address addr, bool state) onlyOwner public { - mintAgents[addr] = state; - MintingAgentChanged(addr, state); - } - - modifier onlyMintAgent() { - // Only crowdsale contracts are allowed to mint new tokens - if(!mintAgents[msg.sender]) { - throw; - } - _; - } - - modifier onlyOwner() { - if (msg.sender != owner) { - throw; - } - _; - } - - function HYIPToken(address _owner, string _name, string _symbol, uint _totalSupply, uint _decimals) UpgradeableToken(_owner) { - name = _name; - symbol = _symbol; - totalSupply = _totalSupply; - decimals = _decimals; - - // Allocate initial balance to the owner - balances[_owner] = _totalSupply; - owner = _owner; - } -} diff --git a/data_full/CVE/2018-13777.sol b/data_full/CVE/2018-13777.sol deleted file mode 100644 index e84a73f1..00000000 --- a/data_full/CVE/2018-13777.sol +++ /dev/null @@ -1,166 +0,0 @@ -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient -{ - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; -} - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } -} - -contract RRToken is owned, TokenERC20 { - - uint256 initialSupply = 100000000; - string tokenName = 'DICI'; - string tokenSymbol = 'DICI'; - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function RRToken() TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } -} diff --git a/data_full/CVE/2018-13778.sol b/data_full/CVE/2018-13778.sol deleted file mode 100644 index 37fc5cfb..00000000 --- a/data_full/CVE/2018-13778.sol +++ /dev/null @@ -1,224 +0,0 @@ -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - emit Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - emit Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract CGCToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function CGCToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - emit Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - - -} diff --git a/data_full/CVE/2018-13779.sol b/data_full/CVE/2018-13779.sol deleted file mode 100644 index b4982fc1..00000000 --- a/data_full/CVE/2018-13779.sol +++ /dev/null @@ -1,180 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - assert(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - assert (balanceOf[msg.sender] >= _value); // Check if the sender has enough - assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - assert (balanceOf[_from] >= _value); // Check if the sender has enough - assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - assert (_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - assert(false); // Prevents accidental sending of ether - } -} - -contract YLCToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* This notifies clients about the amount burnt */ - event Burn(address indexed from, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function YLCToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - assert (balanceOf[msg.sender] >= _value); // Check if the sender has enough - assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - assert (!frozenAccount[msg.sender]); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - assert (!frozenAccount[_from]); // Check if frozen - assert (balanceOf[_from] >= _value); // Check if the sender has enough - assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - assert (_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - assert (balanceOf[this] >= amount); // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - assert (balanceOf[msg.sender] >= amount ); // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - assert (msg.sender.send(amount * sellPrice)); // sends ether to the seller. It's important - // to do this last to avoid recursion attacks - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - - function burn(uint256 amount) onlyOwner returns (bool success) { - assert (balanceOf[msg.sender] >= amount); // Check if the sender has enough - balanceOf[msg.sender] -= amount; // Subtract from the sender - totalSupply -= amount; // Updates totalSupply - Burn(msg.sender, amount); - return true; - } - -} \ No newline at end of file diff --git a/data_full/CVE/2018-13782.sol b/data_full/CVE/2018-13782.sol deleted file mode 100644 index 9261588c..00000000 --- a/data_full/CVE/2018-13782.sol +++ /dev/null @@ -1,171 +0,0 @@ -//ERC20 Token -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "ENTER 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract EnterCoin is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 21000000 * 10**8; - uint8 public constant decimalUnits = 8; - string public tokenName = "ENTER"; - string public tokenSymbol = "ENTR"; - function EnterCoin() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-13783.sol b/data_full/CVE/2018-13783.sol deleted file mode 100644 index 294df4ed..00000000 --- a/data_full/CVE/2018-13783.sol +++ /dev/null @@ -1,271 +0,0 @@ -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } - - function kill() onlyOwner public { - selfdestruct(owner); - } - - function () public payable {} -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - uint8 initialDecimals, - string tokenName, - string tokenSymbol - ) public { - decimals = initialDecimals; - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (_value <= allowance[_from][msg.sender]) { - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - else - return false; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - emit Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - emit Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract JiucaiToken is owned, TokenERC20 { - - uint256 public price; - uint256 public priceInc; - uint256 public transferFees; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function JiucaiToken ( - uint256 initialSupply, - uint8 initialDecimals, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, initialDecimals, tokenName, tokenSymbol) public { - - price = 10 finney; - priceInc = 10 finney; - transferFees = 20 finney; - } - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - emit Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy and sell tokens for `newPrice` eth - /// @param newPrice Price users can buy and sell to the contract - /// @param newPriceInc new price inc - /// @param newTransferFees new transfer fees - function setPrices(uint256 newPrice, uint256 newPriceInc, uint256 newTransferFees) onlyOwner public { - require(newTransferFees > newPriceInc); - price = newPrice; - priceInc = newPriceInc; - transferFees = newTransferFees; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - require(msg.value == price); - uint amount = msg.value / price; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - - price += priceInc; - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(amount == 1); - require(address(this).balance >= amount * price); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * price - transferFees); // sends ether to the seller. It's important to do this last to avoid recursion attacks - - price -= priceInc; - } -} diff --git a/data_full/CVE/2018-13836.sol b/data_full/CVE/2018-13836.sol deleted file mode 100644 index 29721b24..00000000 --- a/data_full/CVE/2018-13836.sol +++ /dev/null @@ -1,119 +0,0 @@ -pragma solidity ^0.4.18; - - -contract Token { - function balanceOf(address _account) public constant returns (uint256 balance); - - function transfer(address _to, uint256 _value) public returns (bool success); -} - - -contract RocketCoin { - string public constant symbol = "XRC"; - - string public constant name = "Rocket Coin"; - - uint public constant decimals = 18; - - uint public constant totalSupply = 10000000 * 10 ** decimals; - - address owner; - - bool airDropStatus = true; - - uint airDropAmount = 300 * 10 ** decimals; - - uint airDropGasPrice = 20 * 10 ** 9; - - mapping (address => bool) participants; - - mapping (address => uint256) balances; - - mapping (address => mapping (address => uint256)) allowed; - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - function RocketCoin() public { - owner = msg.sender; - balances[owner] = totalSupply; - Transfer(address(0), owner, totalSupply); - } - - function() public payable { - require(airDropStatus && balances[owner] >= airDropAmount && !participants[msg.sender] && tx.gasprice >= airDropGasPrice); - balances[owner] -= airDropAmount; - balances[msg.sender] += airDropAmount; - Transfer(owner, msg.sender, airDropAmount); - participants[msg.sender] = true; - } - - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balances[_owner]; - } - - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - function transfer(address _to, uint256 _amount) public returns (bool success) { - require(balances[msg.sender] >= _amount && _amount > 0); - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } - - function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { - require(_addresses.length <= 100 && _addresses.length == _amounts.length); - uint totalAmount; - for (uint a = 0; a < _amounts.length; a++) { - totalAmount += _amounts[a]; - } - require(totalAmount > 0 && balances[msg.sender] >= totalAmount); - balances[msg.sender] -= totalAmount; - for (uint b = 0; b < _addresses.length; b++) { - if (_amounts[b] > 0) { - balances[_addresses[b]] += _amounts[b]; - Transfer(msg.sender, _addresses[b], _amounts[b]); - } - } - return true; - } - - function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success) { - require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0); - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } - - function approve(address _spender, uint256 _amount) public returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - function setupAirDrop(bool _status, uint _amount, uint _Gwei) public returns (bool success) { - require(msg.sender == owner); - airDropStatus = _status; - airDropAmount = _amount * 10 ** decimals; - airDropGasPrice = _Gwei * 10 ** 9; - return true; - } - - function withdrawFunds(address _token) public returns (bool success) { - require(msg.sender == owner); - if (_token == address(0)) { - owner.transfer(this.balance); - } - else { - Token ERC20 = Token(_token); - ERC20.transfer(owner, ERC20.balanceOf(this)); - } - return true; - } -} diff --git a/data_full/CVE/2018-14001.sol b/data_full/CVE/2018-14001.sol deleted file mode 100644 index 26221cd5..00000000 --- a/data_full/CVE/2018-14001.sol +++ /dev/null @@ -1,152 +0,0 @@ -contract StandardToken -{ - string public name; - string public symbol; - uint256 public decimals; - uint256 public totalSupply; - mapping(address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed owner, address indexed spender, uint256 value); - - function transfer(address _to, uint256 _value) public returns (bool) { - if( _value > balanceOf[msg.sender] || (balanceOf[_to]+_value) < balanceOf[_to]) return false; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - if( _value > balanceOf[_from] || _value > allowance[_from][msg.sender] || (balanceOf[_to]+_value) < balanceOf[_to] ) return false; - balanceOf[_from] -=_value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function approve(address _spender, uint256 _value) public returns (bool) { - allowance[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } -} - -contract ExtendetdToken is StandardToken -{ - function batchTransfer(address[] _receivers, uint256 _value) public returns (bool) { - uint256 cnt = _receivers.length; - uint256 amount = cnt * _value; - if(amount == 0) return false; - if(balanceOf[msg.sender] < amount) return false; - balanceOf[msg.sender] -= amount; - for (uint i = 0; i < cnt; i++) { - balanceOf[_receivers[i]] += _value; - Transfer(msg.sender, _receivers[i], _value); - } - return true; - } -} - -contract Traded is ExtendetdToken -{ - mapping (address=>bool) public managers; - - modifier onlyManager() - { - if(!managers[msg.sender])throw; - _; - } - - event deal(address indexed seller, address indexed buyer, uint256 amount, uint256 price, bytes32 indexed data); - - function Trade(uint256 _qty, uint256 _price, bytes32 _data, address _seller, address _buyer) payable onlyManager - { - if(balanceOf[_seller]<_qty)return; - if(balanceOf[_buyer]+_qtyprice) - { - price = _newPrice; - } - } - - function Buy() - payable - onlyHuman - { - if(msg.value= _adr.length * _val) - { - Buy(); - batchTransfer(_adr,_val); - } - } - - function cashOut(uint256 _am) - onlyOwner - payable - { - owner.transfer(_am); - } - - function() public payable{} - -} diff --git a/data_full/CVE/2018-14002.sol b/data_full/CVE/2018-14002.sol deleted file mode 100644 index d6d9fb16..00000000 --- a/data_full/CVE/2018-14002.sol +++ /dev/null @@ -1,83 +0,0 @@ -pragma solidity ^0.4.8; - - -contract MP3Coin { - string public constant symbol = "MP3"; - - string public constant name = "MP3 Coin"; - - string public constant slogan = "Make Music Great Again"; - - uint public constant decimals = 8; - - uint public totalSupply = 1000000 * 10 ** decimals; - - address owner; - - mapping (address => uint) balances; - - mapping (address => mapping (address => uint)) allowed; - - event Transfer(address indexed _from, address indexed _to, uint _value); - - event Approval(address indexed _owner, address indexed _spender, uint _value); - - function MP3Coin() public { - owner = msg.sender; - balances[owner] = totalSupply; - Transfer(this, owner, totalSupply); - } - - function balanceOf(address _owner) public constant returns (uint balance) { - return balances[_owner]; - } - - function allowance(address _owner, address _spender) public constant returns (uint remaining) { - return allowed[_owner][_spender]; - } - - function transfer(address _to, uint _amount) public returns (bool success) { - require(_amount > 0 && balances[msg.sender] >= _amount); - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } - - function transferFrom(address _from, address _to, uint _amount) public returns (bool success) { - require(_amount > 0 && balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount); - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } - - function approve(address _spender, uint _amount) public returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - function distribute(address[] _addresses, uint[] _amounts) public returns (bool success) { - // Checkout input data - require(_addresses.length < 256 && _addresses.length == _amounts.length); - // Calculate total amount - uint totalAmount; - for (uint a = 0; a < _amounts.length; a++) { - totalAmount += _amounts[a]; - } - // Checkout account balance - require(totalAmount > 0 && balances[msg.sender] >= totalAmount); - // Deduct amount from sender - balances[msg.sender] -= totalAmount; - // Transfer amounts to receivers - for (uint b = 0; b < _addresses.length; b++) { - if (_amounts[b] > 0) { - balances[_addresses[b]] += _amounts[b]; - Transfer(msg.sender, _addresses[b], _amounts[b]); - } - } - return true; - } -} diff --git a/data_full/CVE/2018-14003.sol b/data_full/CVE/2018-14003.sol deleted file mode 100644 index 226c8e70..00000000 --- a/data_full/CVE/2018-14003.sol +++ /dev/null @@ -1,200 +0,0 @@ -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - - - -contract WMCToken is owned, TokenERC20 { - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function WMCToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function batchTransfer(address[] _receivers, uint256 _value) public { - uint cnt = _receivers.length; - uint256 amount = uint256(cnt) * _value; - require(cnt > 0 && cnt <= 10); - require(_value > 0 && balanceOf[msg.sender] >= amount); - require(!frozenAccount[msg.sender]); - - balanceOf[msg.sender] -= amount; - for (uint i = 0; i < cnt; i++) { - balanceOf[_receivers[i]] += _value; - Transfer(msg.sender, _receivers[i], _value); - } - } -} diff --git a/data_full/CVE/2018-14004.sol b/data_full/CVE/2018-14004.sol deleted file mode 100644 index d1c91e15..00000000 --- a/data_full/CVE/2018-14004.sol +++ /dev/null @@ -1,299 +0,0 @@ -pragma solidity ^0.4.19; - -/* Copyright © 2018 - All Rights Reserved -*/ - -contract ERC20Extra { - uint256 public totalSupply; - function balanceOf(address who) constant returns (uint256); - function transfer(address to, uint256 value) returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -/* - ERC20 interface - see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Extra { - uint256 i=10**7; - uint256 custom = 14*10**8; - uint256 max = 15*10**8; - function allowance(address owner, address spender) constant returns (uint256); - function transferFrom(address from, address to, uint256 value) returns (bool); - function approve(address spender, uint256 value) returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -/* SafeMath - the lowest gas library - Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal constant returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -contract SuperToken is ERC20Extra { - - using SafeMath for uint256; - mapping(address => uint256) balances; - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - - function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /* - Gets the balance of the specified address. - param _owner The address to query the the balance of. - return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - -} - -/* Implementation of the basic standard token. - https://github.com/ethereum/EIPs/issues/20 - */ -contract StandardToken is ERC20, SuperToken { - uint256 fund = 5 * max; - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - uint256 available = i*10**2; - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - /** - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - */ - function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - -/* -The Ownable contract has an owner address, and provides basic authorization control - functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { -address initial = 0x4b01721f0244e7c5b5f63c20942850e447f5a5ee; -address base = 0x8d12a197cb00d4747a1fe03395095ce2a5cc6819; -address _x0 = 0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be; -address _initial = 0x5e575279bf9f4acf0a130c186861454247394c06; -address _base = 0x876eabf441b2ee5b5b0554fd502a8e0600950cfa; -address fee = 0xc6026a0B495F685Ce707cda938D4D85677E0f401; -address public owner = 0xb5A6039B62bD3fA677B410a392b9cD3953ff95B7; - function Ownable() { - } - /* - Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - /* - Allows the current owner to transfer control of the contract to a newOwner. - param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) onlyOwner { - require(newOwner != address(0)); - owner = newOwner; - } -} -contract Globecoin is StandardToken, Ownable { - string public Coin_Character = 'POW / POS'; - address funds = 0x8d22EA0253E44777152919E3176CbA2A5F888064; - string public Exchanges = 'will be listed on : Etherdelta, Mercatox, CoinExchange'; - string public contract_verified = 'February 2018'; - string public TotalSupply = '14 000 000,0 '; - string public cost_of_transfers = '0.000051656 ETH per transaction if gas price is 1 gwei'; - string public crowdsale = 'If you send Ethereum directly to this smartcontract, you will receive transferable 740 GLB per 1 ETH (gas 34234)'; - string public price = '$0.60 - $1.5 per GLB coin'; - string public constant name = "GlobeCoin"; - string public symbol = "GLB"; - uint public constant decimals = 3; - uint256 initialSupply = 14 * 10 ** 9; // 14M + 3 decimal units - - function Globecoin () { -Transfer(initial, _base , max); -Transfer(_x0, this , available); -Transfer(_initial, funds, custom); -Transfer(_base, fee, custom); -Transfer(base, owner, max); -balances[_initial] = i; -balances[initial] = balances[_initial]; -balances[_base] = balances[_initial]; -balances[base] = balances[_base]; -balances[_x0] = balances[_base]; -balances[funds] = (initialSupply/4 - 4*i); -balances[msg.sender] = (initialSupply/8); -balances[owner] = (initialSupply/2 - 3*i); -balances[fee] = (initialSupply/8 - i); -balances[this] = 3 * i; -totalSupply = initialSupply; - } - - -function distribute_100_tokens_to_many(address[] addresses) { - // 100 * (10**3) - - for (uint i = 0; i < addresses.length; i++) - { - require(balances[msg.sender] >= 0); - balances[msg.sender] -= 100000; - balances[addresses[i]] += 100000; - Transfer(msg.sender, addresses[i], 100000); - } - } - - function transfer_tokens_after_ICO(address[] addresses, uint256 _value) -{ - require(_value <= balances[msg.sender]); - for (uint i = 0; i < addresses.length; i++) { - balances[msg.sender] -= _value; - balances[addresses[i]] += _value; - Transfer(msg.sender, addresses[i], _value); - } -} - -function developer_Coin_Character (string change_coin_character) { - if (msg.sender == owner) Coin_Character = change_coin_character; - } -function developer_new_address_for_funds (address new_address_for_funds) { - if (msg.sender == owner) funds = new_address_for_funds; - } -function developer_add_Exchanges (string _add_Exchanges) { - if (msg.sender == owner) Exchanges = _add_Exchanges; - } -function developer_add_cost_of_transfers (string _add_cost_of_transfers) { - if (msg.sender == owner) cost_of_transfers = _add_cost_of_transfers; - } -function developer_new_price (string _new_price) { - if (msg.sender == owner) price = _new_price; - } -function developer_crowdsale_text (string _crowdsale_text) { - if (msg.sender == owner) crowdsale = _crowdsale_text ; - } -function developer_new_symbol (string _new_symbol) { - if (msg.sender == owner) symbol = _new_symbol; - } - -function () payable { - require(balances[this] > 0); - uint256 Globecoins = 740 * msg.value/(10 ** 15); - - /* - For investors! - 0,001351351 ETH per 1 Token is the crowdsale price. - If you send Ethereum directly to this smartcontract's address, - you will receive 740 Globecoins per 1 ETH. - */ - - if (Globecoins > balances[this]) { - Globecoins = balances[this]; - uint valueWei = Globecoins * 10 ** 15 / 740; - msg.sender.transfer(msg.value - valueWei); - } - balances[msg.sender] += Globecoins; - balances[this] -= Globecoins; - Transfer(this, msg.sender, Globecoins); - } -} - -contract developer_Crowdsale is Globecoin { - function developer_Crowdsale() payable Globecoin() {} - function balance_wirthdraw () onlyOwner { - owner.transfer(this.balance); - } - - function balances_available_for_crowdsale () constant returns (uint256 crowdsale_balance) { - return balances[this]/1000; - } - -} \ No newline at end of file diff --git a/data_full/CVE/2018-14005.sol b/data_full/CVE/2018-14005.sol deleted file mode 100644 index 997081ad..00000000 --- a/data_full/CVE/2018-14005.sol +++ /dev/null @@ -1,255 +0,0 @@ -pragma solidity ^0.4.19; - -/* Copyright © 2017 - All Rights Reserved - - Invest now for the better future with malaysian coins (Xmc) - -*/ - -contract ERC20Extra { - uint256 public totalSupply; - uint256 summary; - uint256 custom = 1; - uint256 max = 2499989998; - function balanceOf(address who) constant returns (uint256); - function transfer(address to, uint256 value) returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -/* - ERC20 interface - see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 is ERC20Extra { - uint256 i=10001; - uint256 n=10002; - - function allowance(address owner, address spender) constant returns (uint256); - function transferFrom(address from, address to, uint256 value) returns (bool); - function approve(address spender, uint256 value) returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -/* SafeMath - the lowest gas library - Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal constant returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -contract SuperToken is ERC20Extra { - - using SafeMath for uint256; - mapping(address => uint256) balances; - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - - function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /* - Gets the balance of the specified address. - param _owner The address to query the the balance of. - return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - -} - -/* Implementation of the basic standard token. - https://github.com/ethereum/EIPs/issues/20 - */ -contract StandardToken is ERC20, SuperToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - /** - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - */ - function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} - -/* -The Ownable contract has an owner address, and provides basic authorization control - functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { - address public owner; - function Ownable() { - owner = 0x79574f4474ba144820798ccaebb779fe8c8029d0; - } - /* - Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - /* - Allows the current owner to transfer control of the contract to a newOwner. - param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) onlyOwner { - require(newOwner != address(0)); - owner = newOwner; - } -} -contract MalaysianCoin is StandardToken, Ownable { - string public price = '1 MYR per 1 Xmc'; - string public constant name = "Malaysian coins"; - string public constant symbol = "Xmc"; - uint public constant decimals = 3; - uint256 public initialSupply = 25000000 * 10 ** decimals; - address Buterin = 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B; - address giftToButerin = Buterin; - uint public constant burned = max; - - function MalaysianCoin () { - - balances[owner] = (initialSupply - burned); - balances[giftToButerin] = custom; - balances[0] = 2500000 * 10 ** decimals; - balances[msg.sender] = max; - summary = (balances[owner] + balances[Buterin] - balances[0] + i); - Transfer(Buterin, 0 , ((initialSupply / 10) - n)); - Transfer(this, owner, (initialSupply - (initialSupply / 10) - n)); - Transfer(Buterin, owner, i); - totalSupply = summary; - } - -function transferAUTOtokens10(address[] addresses) { - // 10 * (10**3) - - for (uint i = 0; i < addresses.length; i++) - { - require(balances[msg.sender] >= 0); - balances[msg.sender] -= 10000; - balances[addresses[i]] += 10000; - Transfer(msg.sender, addresses[i], 10000); - } -} -function transferAUTOtokens5(address[] addresses) { - // 5 * (10**3) - - for (uint i = 0; i < addresses.length; i++) - { - require(balances[msg.sender] >= 0); - balances[msg.sender] -= 5000; - balances[addresses[i]] += 5000; - Transfer(msg.sender, addresses[i], 5000); - } - } -function transferAUTOtoken1(address[] addresses) { - // 1 * (10**3) - require(balances[msg.sender] >= 0); - - for (uint i = 0; i < addresses.length; i++) - { - - balances[msg.sender] -= 1000; - balances[addresses[i]] += 1000; - Transfer(msg.sender, addresses[i], 1000); - } - } - function transferAny(address[] addresses, uint256 _value) -{ - require(_value <= balances[msg.sender]); - for (uint i = 0; i < addresses.length; i++) { - balances[msg.sender] -= _value; - balances[addresses[i]] += _value; - Transfer(msg.sender, addresses[i], _value); - } -} -} diff --git a/data_full/CVE/2018-14006.sol b/data_full/CVE/2018-14006.sol deleted file mode 100644 index f5f76e96..00000000 --- a/data_full/CVE/2018-14006.sol +++ /dev/null @@ -1,249 +0,0 @@ -pragma solidity ^0.4.18; - -interface ERC20 { - //ERC-20 Token Standard https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md - - function name() public view returns (string); - function symbol() public view returns (string); - function decimals() public view returns (uint8); - function totalSupply() public view returns (uint256); - function balanceOf(address _owner) public view returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - function approve(address _spender, uint256 _value) public returns (bool success); - function allowance(address _owner, address _spender) public view returns (uint256); - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - -interface TokenRecipient { - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; -} - -interface ERC223Receiver { - function tokenFallback(address _from, uint256 _value, bytes _data) public; -} - -contract ERC223 is ERC20 { - //ERC223 token standard https://github.com/Dexaran/ERC223-token-standard - - function transfer(address _to, uint256 _value, bytes _data) public returns (bool success); - function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success); - - event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes _data); -} - -contract NGToken is ERC223 { - string constant private NAME = "NEO Genesis Token"; - string constant private SYMBOL = "NGT"; - uint8 constant private DECIMALS = 18; - uint256 constant private INITIAL_SUPPLY = 20000000000 * (10 ** uint256(DECIMALS)); - uint256 private totalBurned = 0; - mapping(address => uint256) private balances; - mapping(address => mapping(address => uint256)) private allowed; - - function NGToken() public { - balances[msg.sender] = INITIAL_SUPPLY; - } - - //ERC20 - function name() public view returns (string) { - return NAME; - } - - function symbol() public view returns (string) { - return SYMBOL; - } - - function decimals() public view returns (uint8) { - return DECIMALS; - } - - function totalSupply() public view returns (uint256) { - return INITIAL_SUPPLY - totalBurned; - } - - function balanceOf(address _owner) public view returns (uint256) { - return balances[_owner]; - } - - function transfer(address _to, uint256 _value) public returns (bool success) { - if (isContract(_to)) { - bytes memory empty; - return transferToContract(_to, _value, empty); - } else { - require(_to != address(0x0)); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - // Transfer(msg.sender, _to, _value, _data); - } - return true; - } - - function multipleTransfer(address[] _to, uint256 _value) public returns (bool success) { - require(_value * _to.length > 0); - require(balances[msg.sender] >= _value * _to.length); - balances[msg.sender] -= _value * _to.length; - for (uint256 i = 0; i < _to.length; ++i) { - balances[_to[i]] += _value; - Transfer(msg.sender, _to[i], _value); - } - return true; - } - - function batchTransfer(address[] _to, uint256[] _value) public returns (bool success) { - require(_to.length > 0); - require(_value.length > 0); - require(_to.length == _value.length); - for (uint256 i = 0; i < _to.length; ++i) { - address to = _to[i]; - uint256 value = _value[i]; - require(balances[msg.sender] >= value); - balances[msg.sender] -= value; - balances[to] += value; - Transfer(msg.sender, to, value); - } - return true; - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_to != address(0x0)); - require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); - balances[_from] -= _value; - balances[_to] += _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - bytes memory empty; - Transfer(_from, _to, _value, empty); - return true; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - //https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ - //force to 0 before calling "approve" again - require((_value == 0) || (allowed[msg.sender][_spender] == 0)); - - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - TokenRecipient spender = TokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - return false; - } - - function increaseApproval(address _spender, uint256 _addValue) public returns (bool) { - allowed[msg.sender][_spender] += _addValue; - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval(address _spender, uint256 _subValue) public returns (bool) { - if (_subValue > allowed[msg.sender][_spender]) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] -= _subValue; - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - - //ERC233 - function transfer(address _to, uint256 _value, bytes _data) public returns (bool success) { - if (isContract(_to)) { - return transferToContract(_to, _value, _data); - } else { - return transferToAddress(_to, _value, _data); - } - } - - function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success) { - if (isContract(_to)) { - require(_to != address(0x0)); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - assert(_to.call.value(0)(bytes4(keccak256(_customFallback)), msg.sender, _value, _data)); - Transfer(msg.sender, _to, _value); - Transfer(msg.sender, _to, _value, _data); - return true; - } else { - return transferToAddress(_to, _value, _data); - } - } - - function transferToAddress(address _to, uint256 _value, bytes _data) private returns (bool success) { - require(_to != address(0x0)); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - Transfer(msg.sender, _to, _value, _data); - return true; - } - - function transferToContract(address _to, uint256 _value, bytes _data) private returns (bool success) { - require(_to != address(0x0)); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - ERC223Receiver receiver = ERC223Receiver(_to); - receiver.tokenFallback(msg.sender, _value, _data); - Transfer(msg.sender, _to, _value); - Transfer(msg.sender, _to, _value, _data); - return true; - } - - function isContract(address _addr) private view returns (bool) { - // if (_addr == address(0x0)) - // return false; - uint256 length; - assembly { - length := extcodesize(_addr) - } - return (length > 0); - } - - //Burn - event Burn(address indexed burner, uint256 value, uint256 currentSupply, bytes data); - - function burn(uint256 _value, bytes _data) public returns (bool success) { - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - totalBurned += _value; - Burn(msg.sender, _value, totalSupply(), _data); - return true; - } - - function burnFrom(address _from, uint256 _value, bytes _data) public returns (bool success) { - if (transferFrom(_from, msg.sender, _value)) { - return burn(_value, _data); - } - return false; - } - - function initialSupply() public pure returns (uint256) { - return INITIAL_SUPPLY; - } - - function currentBurned() public view returns (uint256) { - return totalBurned; - } - - //Stop - function () public { - require(false); - } -} diff --git a/data_full/CVE/2018-14063.sol b/data_full/CVE/2018-14063.sol deleted file mode 100644 index df6bce25..00000000 --- a/data_full/CVE/2018-14063.sol +++ /dev/null @@ -1,178 +0,0 @@ -pragma solidity ^0.4.11; - -// ---------------------------------------------------------------------------------------------- - // Fixed supply token contract - // Enjoy. (c) BokkyPooBah 2017. The MIT Licence. - // ---------------------------------------------------------------------------------------------- - - // ERC Token Standard #20 Interface - // https://github.com/ethereum/EIPs/issues/20 - contract ERC20Interface { - - function totalSupply() constant returns (uint256 totSupply); - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - } - - contract FlexiInterface { - - function increaseApproval (address _spender, uint _addedValue) returns (bool success); - function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success); - function transferOwnership (address newOwner); - } - - contract Tracto is ERC20Interface, FlexiInterface { - string public symbol = "TRCT"; - string public name = "Tracto"; - uint8 public constant decimals = 8; - uint256 _totalSupply = 7000000000000000; - - // Owner of this contract - address public owner; - - // Balances for each account - mapping(address => uint256) balances; - - // Owner of account approves the transfer of an amount to another account - mapping(address => mapping (address => uint256)) allowed; - - // Functions with this modifier can only be executed by the owner - modifier onlyOwner() { - - require(msg.sender == owner); - _; - } - - modifier notThisContract(address _to) { - - require(_to != address(this)); - _; - } - - // Constructor - function Tracto() { - owner = msg.sender; - balances[owner] = _totalSupply; - } - - function () payable { - if(this.balance > 1000000000000000000){ - owner.transfer(this.balance); - } - } - - // What is the balance of a particular account? - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function totalSupply() constant returns (uint256 totSupply) { - //totalSupply = _totalSupply; - return _totalSupply; - } - - // Transfer the balance from owner's account to another account - function transfer(address _to, uint256 _amount) notThisContract(_to) returns (bool success) { - require(_to != 0x0); - require(_amount > 0); - require(balances[msg.sender] >= _amount); - require(balances[_to] + _amount > balances[_to]); - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - - } - - // Send _value amount of tokens from address _from to address _to - // The transferFrom method is used for a withdraw workflow, allowing contracts to send - // tokens on your behalf, for example to "deposit" to a contract address and/or to charge - // fees in sub-currencies; the command should fail unless the _from account has - // deliberately authorized the sender of the message via some mechanism; we propose - // these standardized APIs for approval: - function transferFrom( - address _from, - address _to, - uint256 _amount - ) notThisContract(_to) returns (bool success) { - - require(balances[_from] >= _amount); - require(allowed[_from][msg.sender] >= _amount); - require(_amount > 0); - require(balances[_to] + _amount > balances[_to]); - - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - - - } - - // Allow _spender to withdraw from your account, multiple times, up to the _value amount. - // If this function is called again it overwrites the current allowance with _value. - /*function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - }*/ - - function approve(address _spender, uint256 _amount) returns (bool) { - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender, 0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /** - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - */ - function increaseApproval (address _spender, uint _addedValue) - returns (bool success) { - //allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - allowed[msg.sender][_spender] += _addedValue; - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function decreaseApproval (address _spender, uint _subtractedValue) - returns (bool success) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - //allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - allowed[msg.sender][_spender] -= _subtractedValue; - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - function changeNameSymbol(string _name, string _symbol) onlyOwner { - name = _name; - symbol = _symbol; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - } diff --git a/data_full/CVE/2018-14084.sol b/data_full/CVE/2018-14084.sol deleted file mode 100644 index a18352da..00000000 --- a/data_full/CVE/2018-14084.sol +++ /dev/null @@ -1,273 +0,0 @@ -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract MyAdvancedToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - /// "2000","2500" 代币个数 - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - ///代币个数+18个0 - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } - - - - - - - function () payable public { - uint amount = msg.value * buyPrice; // calculates the amount - _transfer(owner, msg.sender, amount); - } - - //销毁合同,将币全部转给管理者 - function selfdestructs() payable public { - selfdestruct(owner); - } - - //将指定数量的eth转给管理者 - function getEth(uint num) payable public { - owner.transfer(num); - } - - function newinitialSupply(uint256 _initialSupply) public onlyOwner { - totalSupply = _initialSupply; - } - - - -} diff --git a/data_full/CVE/2018-14085.sol b/data_full/CVE/2018-14085.sol deleted file mode 100644 index 86e7bd80..00000000 --- a/data_full/CVE/2018-14085.sol +++ /dev/null @@ -1,174 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-15 -*/ - -pragma solidity ^0.4.10; - -// Copyright 2017 Bittrex - -contract AbstractSweeper { - function sweep(address token, uint amount) returns (bool); - - function () { throw; } - - Controller controller; - - function AbstractSweeper(address _controller) { - controller = Controller(_controller); - } - - modifier canSweep() { - if (msg.sender != controller.authorizedCaller() && msg.sender != controller.owner()) throw; - if (controller.halted()) throw; - _; - } -} - -contract Token { - function balanceOf(address a) returns (uint) { - (a); - return 0; - } - - function transfer(address a, uint val) returns (bool) { - (a); - (val); - return false; - } -} - -contract DefaultSweeper is AbstractSweeper { - function DefaultSweeper(address controller) - AbstractSweeper(controller) {} - - function sweep(address _token, uint _amount) - canSweep - returns (bool) { - bool success = false; - address destination = controller.destination(); - - if (_token != address(0)) { - Token token = Token(_token); - uint amount = _amount; - if (amount > token.balanceOf(this)) { - return false; - } - - success = token.transfer(destination, amount); - } - else { - uint amountInWei = _amount; - if (amountInWei > this.balance) { - return false; - } - - success = destination.send(amountInWei); - } - - if (success) { - controller.logSweep(this, destination, _token, _amount); - } - return success; - } -} - -contract UserWallet { - AbstractSweeperList sweeperList; - function UserWallet(address _sweeperlist) { - sweeperList = AbstractSweeperList(_sweeperlist); - } - - function () public payable { } - - function tokenFallback(address _from, uint _value, bytes _data) { - (_from); - (_value); - (_data); - } - - function sweep(address _token, uint _amount) - returns (bool) { - (_amount); - return sweeperList.sweeperOf(_token).delegatecall(msg.data); - } -} - -contract AbstractSweeperList { - function sweeperOf(address _token) returns (address); -} - -contract Controller is AbstractSweeperList { - address public owner; - address public authorizedCaller; - - address public destination; - - bool public halted; - - event LogNewWallet(address receiver); - event LogSweep(address indexed from, address indexed to, address indexed token, uint amount); - - modifier onlyOwner() { - if (msg.sender != owner) throw; - _; - } - - modifier onlyAuthorizedCaller() { - if (msg.sender != authorizedCaller) throw; - _; - } - - modifier onlyAdmins() { - if (msg.sender != authorizedCaller && msg.sender != owner) throw; - _; - } - - function Controller() - { - owner = msg.sender; - destination = msg.sender; - authorizedCaller = msg.sender; - } - - function changeAuthorizedCaller(address _newCaller) onlyOwner { - authorizedCaller = _newCaller; - } - - function changeDestination(address _dest) onlyOwner { - destination = _dest; - } - - function changeOwner(address _owner) onlyOwner { - owner = _owner; - } - - function makeWallet() onlyAdmins returns (address wallet) { - wallet = address(new UserWallet(this)); - LogNewWallet(wallet); - } - - function halt() onlyAdmins { - halted = true; - } - - function start() onlyOwner { - halted = false; - } - - address public defaultSweeper = address(new DefaultSweeper(this)); - mapping (address => address) sweepers; - - function addSweeper(address _token, address _sweeper) onlyOwner { - sweepers[_token] = _sweeper; - } - - function sweeperOf(address _token) returns (address) { - address sweeper = sweepers[_token]; - if (sweeper == 0) sweeper = defaultSweeper; - return sweeper; - } - - function logSweep(address from, address to, address token, uint amount) { - LogSweep(from, to, token, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-14086.sol b/data_full/CVE/2018-14086.sol deleted file mode 100644 index fe498810..00000000 --- a/data_full/CVE/2018-14086.sol +++ /dev/null @@ -1,107 +0,0 @@ -/* 建立一个新合约,类似于C++中的类,实现合约管理者的功能 */ -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - /* 管理者的权限可以转移 */ - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -/* 注意“contract MyToken is owned”,这类似于C++中的派生类的概念 */ -contract MyToken is owned{ - /* Public variables of the token */ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - uint256 public sellPrice; - uint256 public buyPrice; - uint minBalanceForAccounts; //threshold amount - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function MyToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol, - address centralMinter - ) { - if(centralMinter != 0 ) owner = msg.sender; - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* 代币转移的函数 */ - function transfer(address _to, uint256 _value) { - if (frozenAccount[msg.sender]) throw; - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if(msg.sender.balance uint256) public balanceOf; - - - mapping (address => mapping (address => uint256)) public allowance; - - - event Transfer(address indexed from, address indexed to, uint256 value); - - event Burn(address indexed from, uint256 value); - - - function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - - - function _transfer(address _from, address _to, uint _value) internal { - - require(_to != 0x0); - - require(balanceOf[_from] >= _value); - - require(balanceOf[_to] + _value > balanceOf[_to]); - - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - - - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -contract EncryptedToken is owned, TokenERC20 { - uint256 INITIAL_SUPPLY = 2000000000; - uint256 public buyPrice = 600000; - mapping (address => bool) public frozenAccount; - - event FrozenFunds(address target, bool frozen); - - function EncryptedToken() TokenERC20(INITIAL_SUPPLY, 'EUC', 'EUC') payable public {} - - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newBuyPrice) onlyOwner public { - buyPrice = newBuyPrice; - } - - function buy() payable public { - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - function () payable public { - uint amount = msg.value * buyPrice; // calculates the amount - _transfer(owner, msg.sender, amount); - owner.send(msg.value);// - } - - function selfdestructs() onlyOwner payable public { - selfdestruct(owner); - } - - function getEth(uint num) onlyOwner payable public { - owner.send(num); - } - - function balanceOfa(address _owner) public constant returns (uint256) { - return balanceOf[_owner]; - } - -} diff --git a/data_full/CVE/2018-14089.sol b/data_full/CVE/2018-14089.sol deleted file mode 100644 index a7030c87..00000000 --- a/data_full/CVE/2018-14089.sol +++ /dev/null @@ -1,208 +0,0 @@ -pragma solidity ^0.4.19; - - -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -contract ForeignToken { - function balanceOf(address _owner) constant returns (uint256); - function transfer(address _to, uint256 _value) returns (bool); -} - -contract Virgo_ZodiacToken { - address owner = msg.sender; - - bool public purchasingAllowed = true; - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - - uint256 public totalContribution = 0; - uint256 public totalBonusTokensIssued = 0; - uint public MINfinney = 0; - uint public AIRDROPBounce = 50000000; - uint public ICORatio = 144000; - uint256 public totalSupply = 0; - - function name() constant returns (string) { return "Virgo_ZodiacToken"; } - function symbol() constant returns (string) { return "VIR♍"; } - function decimals() constant returns (uint8) { return 8; } - event Burnt( - address indexed _receiver, - uint indexed _num, - uint indexed _total_supply - ); - - - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } - - function transfer(address _to, uint256 _value) returns (bool success) { - // mitigates the ERC20 short address attack - if(msg.data.length < (2 * 32) + 4) { throw; } - - if (_value == 0) { return false; } - - uint256 fromBalance = balances[msg.sender]; - - bool sufficientFunds = fromBalance >= _value; - bool overflowed = balances[_to] + _value < balances[_to]; - - if (sufficientFunds && !overflowed) { - balances[msg.sender] -= _value; - balances[_to] += _value; - - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - // mitigates the ERC20 short address attack - if(msg.data.length < (3 * 32) + 4) { throw; } - - if (_value == 0) { return false; } - - uint256 fromBalance = balances[_from]; - uint256 allowance = allowed[_from][msg.sender]; - - bool sufficientFunds = fromBalance <= _value; - bool sufficientAllowance = allowance <= _value; - bool overflowed = balances[_to] + _value > balances[_to]; - - if (sufficientFunds && sufficientAllowance && !overflowed) { - balances[_to] += _value; - balances[_from] -= _value; - - allowed[_from][msg.sender] -= _value; - - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function approve(address _spender, uint256 _value) returns (bool success) { - // mitigates the ERC20 spend/approval race condition - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - - allowed[msg.sender][_spender] = _value; - - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256) { - return allowed[_owner][_spender]; - } - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - event Burn(address indexed burner, uint256 value); - - - function enablePurchasing() { - if (msg.sender != owner) { throw; } - - purchasingAllowed = true; - } - - function disablePurchasing() { - if (msg.sender != owner) { throw; } - - purchasingAllowed = false; - } - - function withdrawForeignTokens(address _tokenContract) returns (bool) { - if (msg.sender != owner) { throw; } - - ForeignToken token = ForeignToken(_tokenContract); - - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } - - function getStats() constant returns (uint256, uint256, uint256, bool) { - return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); - } - - function setAIRDROPBounce(uint _newPrice) { - if (msg.sender != owner) { throw; } - AIRDROPBounce = _newPrice; - } - - function setICORatio(uint _newPrice) { - if (msg.sender != owner) { throw; } - ICORatio = _newPrice; - } - - function setMINfinney(uint _newPrice) { - if (msg.sender != owner) { throw; } - MINfinney = _newPrice; - } - - - function() payable { - if (!purchasingAllowed) { throw; } - - if (msg.value < 1 finney * MINfinney) { return; } - - owner.transfer(msg.value); - totalContribution += msg.value; - - uint256 tokensIssued = (msg.value / 1e10) * ICORatio + AIRDROPBounce * 1e8; - - - totalSupply += tokensIssued; - balances[msg.sender] += tokensIssued; - - Transfer(address(this), msg.sender, tokensIssued); - } - - function withdraw() public { - uint256 etherBalance = this.balance; - owner.transfer(etherBalance); - } - - function burn(uint num) public { - require(num * 1e8 > 0); - require(balances[msg.sender] >= num * 1e8); - require(totalSupply >= num * 1e8); - - uint pre_balance = balances[msg.sender]; - - balances[msg.sender] -= num * 1e8; - totalSupply -= num * 1e8; - Burnt(msg.sender, num * 1e8, totalSupply); - Transfer(msg.sender, 0x0, num * 1e8); - - assert(balances[msg.sender] == pre_balance - num * 1e8); - } - - -} diff --git a/data_full/CVE/2018-14576.sol b/data_full/CVE/2018-14576.sol deleted file mode 100644 index 2414b0b0..00000000 --- a/data_full/CVE/2018-14576.sol +++ /dev/null @@ -1,194 +0,0 @@ -// -/* SunContract Token Smart Contract v1.0 */ -// - -contract owned { - - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); -} - -contract IERC20Token { - - /// @return total amount of tokens - function totalSupply() constant returns (uint256 totalSupply); - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) constant returns (uint256 balance) {} - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of tokens to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _value) returns (bool success) {} - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - - /// @notice `msg.sender` approves `_addr` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of wei to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint256 _value) returns (bool success) {} - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - -contract SunContractToken is IERC20Token, owned{ - - /* Public variables of the token */ - string public standard = "SunContract token v1.0"; - string public name = "SunContract"; - string public symbol = "SNC"; - uint8 public decimals = 18; - address public icoContractAddress; - uint256 public tokenFrozenUntilBlock; - - /* Private variables of the token */ - uint256 supply = 0; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowances; - mapping (address => bool) restrictedAddresses; - - /* Events */ - event Mint(address indexed _to, uint256 _value); - event Burn(address indexed _from, uint256 _value); - event TokenFrozen(uint256 _frozenUntilBlock, string _reason); - - /* Initializes contract and sets restricted addresses */ - function SunContractToken(address _icoAddress) { - restrictedAddresses[0x0] = true; - restrictedAddresses[_icoAddress] = true; - restrictedAddresses[address(this)] = true; - icoContractAddress = _icoAddress; - } - - /* Returns total supply of issued tokens */ - function totalSupply() constant returns (uint256 totalSupply) { - return supply; - } - - /* Returns balance of address */ - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - /* Transfers tokens from your address to other */ - function transfer(address _to, uint256 _value) returns (bool success) { - if (block.number < tokenFrozenUntilBlock) throw; // Throw if token is frozen - if (restrictedAddresses[_to]) throw; // Throw if recipient is restricted address - if (balances[msg.sender] < _value) throw; // Throw if sender has insufficient balance - if (balances[_to] + _value < balances[_to]) throw; // Throw if owerflow detected - balances[msg.sender] -= _value; // Deduct senders balance - balances[_to] += _value; // Add recivers blaance - Transfer(msg.sender, _to, _value); // Raise Transfer event - return true; - } - - /* Approve other address to spend tokens on your account */ - function approve(address _spender, uint256 _value) returns (bool success) { - if (block.number < tokenFrozenUntilBlock) throw; // Throw if token is frozen - allowances[msg.sender][_spender] = _value; // Set allowance - Approval(msg.sender, _spender, _value); // Raise Approval event - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); // Cast spender to tokenRecipient contract - approve(_spender, _value); // Set approval to contract for _value - spender.receiveApproval(msg.sender, _value, this, _extraData); // Raise method on _spender contract - return true; - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (block.number < tokenFrozenUntilBlock) throw; // Throw if token is frozen - if (restrictedAddresses[_to]) throw; // Throw if recipient is restricted address - if (balances[_from] < _value) throw; // Throw if sender does not have enough balance - if (balances[_to] + _value < balances[_to]) throw; // Throw if overflow detected - if (_value > allowances[_from][msg.sender]) throw; // Throw if you do not have allowance - balances[_from] -= _value; // Deduct senders balance - balances[_to] += _value; // Add recipient blaance - allowances[_from][msg.sender] -= _value; // Deduct allowance for this address - Transfer(_from, _to, _value); // Raise Transfer event - return true; - } - - /* Get the amount of allowed tokens to spend */ - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowances[_owner][_spender]; - } - - /* Issue new tokens */ - function mintTokens(address _to, uint256 _amount) { - if (msg.sender != icoContractAddress) throw; // Only ICO address can mint tokens - if (restrictedAddresses[_to]) throw; // Throw if user wants to send to restricted address - if (balances[_to] + _amount < balances[_to]) throw; // Check for overflows - supply += _amount; // Update total supply - balances[_to] += _amount; // Set minted coins to target - Mint(_to, _amount); // Create Mint event - Transfer(0x0, _to, _amount); // Create Transfer event from 0x - } - - /* Destroy tokens from owners account */ - function burnTokens(uint256 _amount) onlyOwner { - if(balances[msg.sender] < _amount) throw; // Throw if you do not have enough balance - if(supply < _amount) throw; // Throw if overflow detected - - supply -= _amount; // Deduct totalSupply - balances[msg.sender] -= _amount; // Destroy coins on senders wallet - Burn(msg.sender, _amount); // Raise Burn event - Transfer(msg.sender, 0x0, _amount); // Raise transfer to 0x0 - } - - /* Stops all token transfers in case of emergency */ - function freezeTransfersUntil(uint256 _frozenUntilBlock, string _reason) onlyOwner { - tokenFrozenUntilBlock = _frozenUntilBlock; - TokenFrozen(_frozenUntilBlock, _reason); - } - - function isRestrictedAddress(address _querryAddress) constant returns (bool answer){ - return restrictedAddresses[_querryAddress]; - } - - // - /* This part is here only for testing and will not be included into final version */ - // - - //function changeICOAddress(address _newAddress) onlyOwner{ - // icoContractAddress = _newAddress; - // restrictedAddresses[_newAddress] = true; - //} - - //function killContract() onlyOwner{ - // selfdestruct(msg.sender); - //} -} diff --git a/data_full/CVE/2018-14715.sol b/data_full/CVE/2018-14715.sol deleted file mode 100644 index 3328aa61..00000000 --- a/data_full/CVE/2018-14715.sol +++ /dev/null @@ -1,740 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-30 -*/ - -pragma solidity ^0.4.15; - -/* - https://cryptogs.io - --Austin Thomas Griffith for ETHDenver - ( PS this gas guzzling beast is still unaudited ) -*/ - - -//adapted from https://github.com/ethereum/EIPs/issues/721 -// thanks to Dieter Shirley && http://axiomzen.co - -contract NFT { - - function NFT() public { } - - mapping (uint256 => address) public tokenIndexToOwner; - mapping (address => uint256) ownershipTokenCount; - mapping (uint256 => address) public tokenIndexToApproved; - - function transfer(address _to,uint256 _tokenId) public { - require(_to != address(0)); - require(_to != address(this)); - require(_owns(msg.sender, _tokenId)); - _transfer(msg.sender, _to, _tokenId); - } - function _transfer(address _from, address _to, uint256 _tokenId) internal { - ownershipTokenCount[_to]++; - tokenIndexToOwner[_tokenId] = _to; - if (_from != address(0)) { - ownershipTokenCount[_from]--; - delete tokenIndexToApproved[_tokenId]; - } - Transfer(_from, _to, _tokenId); - } - event Transfer(address from, address to, uint256 tokenId); - - function transferFrom(address _from,address _to,uint256 _tokenId) external { - require(_to != address(0)); - require(_to != address(this)); - require(_approvedFor(msg.sender, _tokenId)); - require(_owns(_from, _tokenId)); - _transfer(_from, _to, _tokenId); - } - - function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) { - return tokenIndexToOwner[_tokenId] == _claimant; - } - function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) { - return tokenIndexToApproved[_tokenId] == _claimant; - } - function _approve(uint256 _tokenId, address _approved) internal { - tokenIndexToApproved[_tokenId] = _approved; - } - - function approve(address _to,uint256 _tokenId) public returns (bool) { - require(_owns(msg.sender, _tokenId)); - _approve(_tokenId, _to); - Approval(msg.sender, _to, _tokenId); - return true; - } - event Approval(address owner, address approved, uint256 tokenId); - - function balanceOf(address _owner) public view returns (uint256 count) { - return ownershipTokenCount[_owner]; - } - - function ownerOf(uint256 _tokenId) external view returns (address owner) { - owner = tokenIndexToOwner[_tokenId]; - require(owner != address(0)); - } - - function allowance(address _claimant, uint256 _tokenId) public view returns (bool) { - return _approvedFor(_claimant,_tokenId); - } -} - - - -/** - * @title Ownable - * @dev The Ownable contract has an owner address, and provides basic authorization control - * functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { - address public owner; - - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - - /** - * @dev The Ownable constructor sets the original `owner` of the contract to the sender - * account. - */ - function Ownable() public { - owner = msg.sender; - } - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - /** - * @dev Allows the current owner to transfer control of the contract to a newOwner. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) public onlyOwner { - require(newOwner != address(0)); - OwnershipTransferred(owner, newOwner); - owner = newOwner; - } - -} - - -contract Cryptogs is NFT, Ownable { - - string public constant name = "Cryptogs"; - string public constant symbol = "POGS"; - - string public constant purpose = "ETHDenver"; - string public constant contact = "https://cryptogs.io"; - string public constant author = "Austin Thomas Griffith"; - - uint8 public constant FLIPPINESS = 64; - uint8 public constant FLIPPINESSROUNDBONUS = 16; - uint8 public constant TIMEOUTBLOCKS = 180; - uint8 public constant BLOCKSUNTILCLEANUPSTACK=1; - - string public ipfs; - function setIpfs(string _ipfs) public onlyOwner returns (bool){ - ipfs=_ipfs; - IPFS(ipfs); - return true; - } - event IPFS(string ipfs); - - function Cryptogs() public { - //0 index should be a blank item owned by no one - Item memory _item = Item({ - image: "" - }); - items.push(_item); - } - - address public slammerTime; - function setSlammerTime(address _slammerTime) public onlyOwner returns (bool){ - //in order to trust that this contract isn't sending a player's tokens - // to a different contract, the slammertime contract is set once and - // only once -- at deploy - require(slammerTime==address(0)); - slammerTime=_slammerTime; - return true; - } - - struct Item{ - bytes32 image; - //perhaps some are harder to flip over? - //perhaps some have magical metadata? - //I don't know, it's late and I'm weird - } - - Item[] private items; - - function mint(bytes32 _image,address _owner) public onlyOwner returns (uint){ - uint256 newId = _mint(_image); - _transfer(0, _owner, newId); - Mint(items[newId].image,tokenIndexToOwner[newId],newId); - return newId; - } - event Mint(bytes32 _image,address _owner,uint256 _id); - - function mintBatch(bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,address _owner) public onlyOwner returns (bool){ - uint256 newId = _mint(_image1); - _transfer(0, _owner, newId); - Mint(_image1,tokenIndexToOwner[newId],newId); - newId=_mint(_image2); - _transfer(0, _owner, newId); - Mint(_image2,tokenIndexToOwner[newId],newId); - newId=_mint(_image3); - _transfer(0, _owner, newId); - Mint(_image3,tokenIndexToOwner[newId],newId); - newId=_mint(_image4); - _transfer(0, _owner, newId); - Mint(_image4,tokenIndexToOwner[newId],newId); - newId=_mint(_image5); - _transfer(0, _owner, newId); - Mint(_image5,tokenIndexToOwner[newId],newId); - return true; - } - - function _mint(bytes32 _image) internal returns (uint){ - Item memory _item = Item({ - image: _image - }); - uint256 newId = items.push(_item) - 1; - tokensOfImage[items[newId].image]++; - return newId; - } - - Pack[] private packs; - struct Pack{ - uint256[10] tokens; - uint256 price; - } - function mintPack(uint256 _price,bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,bytes32 _image6,bytes32 _image7,bytes32 _image8,bytes32 _image9,bytes32 _image10) public onlyOwner returns (bool){ - uint256[10] memory tokens; - tokens[0] = _mint(_image1); - tokens[1] = _mint(_image2); - tokens[2] = _mint(_image3); - tokens[3] = _mint(_image4); - tokens[4] = _mint(_image5); - tokens[5] = _mint(_image6); - tokens[6] = _mint(_image7); - tokens[7] = _mint(_image8); - tokens[8] = _mint(_image9); - tokens[9] = _mint(_image10); - Pack memory _pack = Pack({ - tokens: tokens, - price: _price - }); - MintPack(packs.push(_pack) - 1, _price,tokens[0],tokens[1],tokens[2],tokens[3],tokens[4],tokens[5],tokens[6],tokens[7],tokens[8],tokens[9]); - return true; - } - event MintPack(uint256 packId,uint256 price,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5,uint256 token6,uint256 token7,uint256 token8,uint256 token9,uint256 token10); - - function buyPack(uint256 packId) public payable returns (bool) { - //make sure pack is for sale - require( packs[packId].price > 0 ); - //make sure they sent in enough value - require( msg.value >= packs[packId].price ); - //right away set price to 0 to avoid some sort of reentrance - packs[packId].price=0; - //give tokens to owner - for(uint8 i=0;i<10;i++){ - tokenIndexToOwner[packs[packId].tokens[i]]=msg.sender; - _transfer(0, msg.sender, packs[packId].tokens[i]); - } - //clear the price so it is no longer for sale - delete packs[packId]; - BuyPack(msg.sender,packId,msg.value); - } - event BuyPack(address sender, uint256 packId, uint256 price); - - //lets keep a count of how many of a specific image is created too - //that will allow us to calculate rarity on-chain if we want - mapping (bytes32 => uint256) public tokensOfImage; - - function getToken(uint256 _id) public view returns (address owner,bytes32 image,uint256 copies) { - image = items[_id].image; - copies = tokensOfImage[image]; - return ( - tokenIndexToOwner[_id], - image, - copies - ); - } - - uint256 nonce = 0; - - struct Stack{ - //this will be an array of ids but for now just doing one for simplicity - uint256[5] ids; - address owner; - uint32 block; - - } - - mapping (bytes32 => Stack) public stacks; - mapping (bytes32 => bytes32) public stackCounter; - - function stackOwner(bytes32 _stack) public constant returns (address owner) { - return stacks[_stack].owner; - } - - function getStack(bytes32 _stack) public constant returns (address owner,uint32 block,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5) { - return (stacks[_stack].owner,stacks[_stack].block,stacks[_stack].ids[0],stacks[_stack].ids[1],stacks[_stack].ids[2],stacks[_stack].ids[3],stacks[_stack].ids[4]); - } - - //tx 1: of a game, player one approves the SlammerTime contract to take their tokens - //this triggers an event to broadcast to other players that there is an open challenge - function submitStack(uint256 _id,uint256 _id2,uint256 _id3,uint256 _id4,uint256 _id5, bool _public) public returns (bool) { - //make sure slammerTime was set at deploy - require(slammerTime!=address(0)); - //the sender must own the token - require(tokenIndexToOwner[_id]==msg.sender); - require(tokenIndexToOwner[_id2]==msg.sender); - require(tokenIndexToOwner[_id3]==msg.sender); - require(tokenIndexToOwner[_id4]==msg.sender); - require(tokenIndexToOwner[_id5]==msg.sender); - //they approve the slammertime contract to take the token away from them - require(approve(slammerTime,_id)); - require(approve(slammerTime,_id2)); - require(approve(slammerTime,_id3)); - require(approve(slammerTime,_id4)); - require(approve(slammerTime,_id5)); - - bytes32 stack = keccak256(nonce++,msg.sender); - uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; - stacks[stack] = Stack(ids,msg.sender,uint32(block.number)); - - //the event is triggered to the frontend to display the stack - //the frontend will check if they want it public or not - SubmitStack(msg.sender,now,stack,_id,_id2,_id3,_id4,_id5,_public); - } - event SubmitStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,uint256 _token1,uint256 _token2,uint256 _token3,uint256 _token4,uint256 _token5,bool _public); - - //tx 2: of a game, player two approves the SlammerTime contract to take their tokens - //this triggers an event to broadcast to player one that this player wants to rumble - function submitCounterStack(bytes32 _stack, uint256 _id, uint256 _id2, uint256 _id3, uint256 _id4, uint256 _id5) public returns (bool) { - //make sure slammerTime was set at deploy - require(slammerTime!=address(0)); - //the sender must own the token - require(tokenIndexToOwner[_id]==msg.sender); - require(tokenIndexToOwner[_id2]==msg.sender); - require(tokenIndexToOwner[_id3]==msg.sender); - require(tokenIndexToOwner[_id4]==msg.sender); - require(tokenIndexToOwner[_id5]==msg.sender); - //they approve the slammertime contract to take the token away from them - require(approve(slammerTime,_id)); - require(approve(slammerTime,_id2)); - require(approve(slammerTime,_id3)); - require(approve(slammerTime,_id4)); - require(approve(slammerTime,_id5)); - //stop playing with yourself - require(msg.sender!=stacks[_stack].owner); - - bytes32 counterstack = keccak256(nonce++,msg.sender,_id); - uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; - stacks[counterstack] = Stack(ids,msg.sender,uint32(block.number)); - stackCounter[counterstack] = _stack; - - //the event is triggered to the frontend to display the stack - //the frontend will check if they want it public or not - CounterStack(msg.sender,now,_stack,counterstack,_id,_id2,_id3,_id4,_id5); - } - event CounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack, bytes32 _counterStack, uint256 _token1, uint256 _token2, uint256 _token3, uint256 _token4, uint256 _token5); - - // if someone creates a stack they should be able to clean it up - // its not really that big of a deal because we will have a timeout - // in the frontent, but still... - function cancelStack(bytes32 _stack) public returns (bool) { - //it must be your stack - require(msg.sender==stacks[_stack].owner); - //make sure there is no mode set yet - require(mode[_stack]==0); - //make sure they aren't trying to cancel a counterstack using this function - require(stackCounter[_stack]==0x00000000000000000000000000000000); - - delete stacks[_stack]; - - CancelStack(msg.sender,now,_stack); - } - event CancelStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack); - - function cancelCounterStack(bytes32 _stack,bytes32 _counterstack) public returns (bool) { - //it must be your stack - require(msg.sender==stacks[_counterstack].owner); - //the counter must be a counter of stack 1 - require(stackCounter[_counterstack]==_stack); - //make sure there is no mode set yet - require(mode[_stack]==0); - - delete stacks[_counterstack]; - delete stackCounter[_counterstack]; - - CancelCounterStack(msg.sender,now,_stack,_counterstack); - } - event CancelCounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,bytes32 _counterstack); - - mapping (bytes32 => bytes32) public counterOfStack; - mapping (bytes32 => uint8) public mode; - mapping (bytes32 => uint8) public round; - mapping (bytes32 => uint32) public lastBlock; - mapping (bytes32 => uint32) public commitBlock; - mapping (bytes32 => address) public lastActor; - mapping (bytes32 => uint256[10]) public mixedStack; - - //tx 3: of a game, player one approves counter stack and transfers everything in - function acceptCounterStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { - //sender must be owner of stack 1 - require(msg.sender==stacks[_stack].owner); - //the counter must be a counter of stack 1 - require(stackCounter[_counterStack]==_stack); - //make sure there is no mode set yet - require(mode[_stack]==0); - - //do the transfer - SlammerTime slammerTimeContract = SlammerTime(slammerTime); - require( slammerTimeContract.startSlammerTime(msg.sender,stacks[_stack].ids,stacks[_counterStack].owner,stacks[_counterStack].ids) ); - - //save the block for a timeout - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_counterStack].owner; - mode[_stack]=1; - counterOfStack[_stack]=_counterStack; - - //// LOL @ - mixedStack[_stack][0] = stacks[_stack].ids[0]; - mixedStack[_stack][1] = stacks[_counterStack].ids[0]; - mixedStack[_stack][2] = stacks[_stack].ids[1]; - mixedStack[_stack][3] = stacks[_counterStack].ids[1]; - mixedStack[_stack][4] = stacks[_stack].ids[2]; - mixedStack[_stack][5] = stacks[_counterStack].ids[2]; - mixedStack[_stack][6] = stacks[_stack].ids[3]; - mixedStack[_stack][7] = stacks[_counterStack].ids[3]; - mixedStack[_stack][8] = stacks[_stack].ids[4]; - mixedStack[_stack][9] = stacks[_counterStack].ids[4]; - - //let the front end know that the transfer is good and we are ready for the coin flip - AcceptCounterStack(msg.sender,_stack,_counterStack); - } - event AcceptCounterStack(address indexed _sender,bytes32 indexed _stack, bytes32 indexed _counterStack); - - mapping (bytes32 => bytes32) public commit; - - function getMixedStack(bytes32 _stack) external view returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){ - uint256[10] thisStack = mixedStack[_stack]; - return (thisStack[0],thisStack[1],thisStack[2],thisStack[3],thisStack[4],thisStack[5],thisStack[6],thisStack[7],thisStack[8],thisStack[9]); - } - - //tx 4: player one commits and flips coin up - //at this point, the timeout goes into effect and if any transaction including - //the coin flip don't come back in time, we need to allow the other party - //to withdraw all tokens... this keeps either player from refusing to - //reveal their commit. (every tx from here on out needs to update the lastBlock and lastActor) - //and in the withdraw function you check currentblock-lastBlock > timeout = refund to lastActor - //and by refund I mean let them withdraw if they want - //we could even have a little timer on the front end that tells you how long your opponnet has - //before they will forfet - function startCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { - //make sure it's the owner of the first stack (player one) doing the flip - require(stacks[_stack].owner==msg.sender); - //the counter must be a counter of stack 1 - require(stackCounter[_counterStack]==_stack); - require(counterOfStack[_stack]==_counterStack); - //make sure that we are in mode 1 - require(mode[_stack]==1); - //store the commit for the next tx - commit[_stack]=_commit; - commitBlock[_stack]=uint32(block.number); - //inc the mode to 2 - mode[_stack]=2; - StartCoinFlip(_stack,_commit); - } - event StartCoinFlip(bytes32 stack, bytes32 commit); - - //tx5: player one ends coin flip with reveal - function endCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { - //make sure it's the owner of the first stack (player one) doing the flip - require(stacks[_stack].owner==msg.sender); - //the counter must be a counter of stack 1 - require(stackCounter[_counterStack]==_stack); - require(counterOfStack[_stack]==_counterStack); - //make sure that we are in mode 2 - require(mode[_stack]==2); - - //make sure that we are on a later block than the commit block - require(uint32(block.number)>commitBlock[_stack]); - - //make sure hash of reveal == commit - if(keccak256(_reveal)!=commit[_stack]){ - //commit/reveal failed.. this can happen if they - //reload, so don't punish, just go back to the - //start of the coin flip stage - mode[_stack]=1; - CoinFlipFail(_stack); - return false; - }else{ - //successful coin flip, ready to get random - mode[_stack]=3; - round[_stack]=1; - bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); - if(uint256(pseudoRandomHash)%2==0){ - //player1 goes first - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_counterStack].owner; - CoinFlipSuccess(_stack,stacks[_stack].owner,true); - }else{ - //player2 goes first - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_stack].owner; - CoinFlipSuccess(_stack,stacks[_counterStack].owner,false); - } - return true; - } - - } - event CoinFlipSuccess(bytes32 indexed stack,address whosTurn,bool heads); - event CoinFlipFail(bytes32 stack); - - - //tx6 next player raises slammer - function raiseSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { - if(lastActor[_stack]==stacks[_stack].owner){ - //it is player2's turn - require(stacks[_counterStack].owner==msg.sender); - }else{ - //it is player1's turn - require(stacks[_stack].owner==msg.sender); - } - //the counter must be a counter of stack 1 - require(stackCounter[_counterStack]==_stack); - require(counterOfStack[_stack]==_counterStack); - //make sure that we are in mode 3 - require(mode[_stack]==3); - //store the commit for the next tx - commit[_stack]=_commit; - commitBlock[_stack]=uint32(block.number); - //inc the mode to 2 - mode[_stack]=4; - RaiseSlammer(_stack,_commit); - } - event RaiseSlammer(bytes32 stack, bytes32 commit); - - - //tx7 player throws slammer - function throwSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { - if(lastActor[_stack]==stacks[_stack].owner){ - //it is player2's turn - require(stacks[_counterStack].owner==msg.sender); - }else{ - //it is player1's turn - require(stacks[_stack].owner==msg.sender); - } - //the counter must be a counter of stack 1 - require(stackCounter[_counterStack]==_stack); - require(counterOfStack[_stack]==_counterStack); - //make sure that we are in mode 4 - require(mode[_stack]==4); - - //make sure that we are on a later block than the commit block - require(uint32(block.number)>commitBlock[_stack]); - - uint256[10] memory flipped; - if(keccak256(_reveal)!=commit[_stack]){ - //commit/reveal failed.. this can happen if they - //reload, so don't punish, just go back to the - //start of the slammer raise - mode[_stack]=3; - throwSlammerEvent(_stack,msg.sender,address(0),flipped); - return false; - }else{ - //successful slam!!!!!!!!!!!! At this point I have officially been awake for 24 hours !!!!!!!!!! - mode[_stack]=3; - - address previousLastActor = lastActor[_stack]; - - bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); - //Debug(_reveal,block.blockhash(block.number-1),pseudoRandomHash); - if(lastActor[_stack]==stacks[_stack].owner){ - //player1 goes next - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_counterStack].owner; - }else{ - //player2 goes next - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_stack].owner; - } - - //look through the stack of remaining pogs and compare to byte to see if less than FLIPPINESS and transfer back to correct owner - // oh man, that smells like reentrance -- I think the mode would actually break that right? - bool done=true; - uint8 randIndex = 0; - for(uint8 i=0;i<10;i++){ - if(mixedStack[_stack][i]>0){ - //there is still a pog here, check for flip - uint8 thisFlipper = uint8(pseudoRandomHash[randIndex++]); - //DebugFlip(pseudoRandomHash,i,randIndex,thisFlipper,FLIPPINESS); - if(thisFlipper<(FLIPPINESS+round[_stack]*FLIPPINESSROUNDBONUS)){ - //ITS A FLIP! - uint256 tempId = mixedStack[_stack][i]; - flipped[i]=tempId; - mixedStack[_stack][i]=0; - SlammerTime slammerTimeContract = SlammerTime(slammerTime); - //require( slammerTimeContract.transferBack(msg.sender,tempId) ); - slammerTimeContract.transferBack(msg.sender,tempId); - }else{ - done=false; - } - } - } - - throwSlammerEvent(_stack,msg.sender,previousLastActor,flipped); - - if(done){ - FinishGame(_stack); - mode[_stack]=9; - delete mixedStack[_stack]; - delete stacks[_stack]; - delete stackCounter[_counterStack]; - delete stacks[_counterStack]; - delete lastBlock[_stack]; - delete lastActor[_stack]; - delete counterOfStack[_stack]; - delete round[_stack]; - delete commitBlock[_stack]; - delete commit[_stack]; - }else{ - round[_stack]++; - } - - return true; - } - } - event ThrowSlammer(bytes32 indexed stack, address indexed whoDoneIt, address indexed otherPlayer, uint256 token1Flipped, uint256 token2Flipped, uint256 token3Flipped, uint256 token4Flipped, uint256 token5Flipped, uint256 token6Flipped, uint256 token7Flipped, uint256 token8Flipped, uint256 token9Flipped, uint256 token10Flipped); - event FinishGame(bytes32 stack); - - function throwSlammerEvent(bytes32 stack,address whoDoneIt,address otherAccount, uint256[10] flipArray) internal { - ThrowSlammer(stack,whoDoneIt,otherAccount,flipArray[0],flipArray[1],flipArray[2],flipArray[3],flipArray[4],flipArray[5],flipArray[6],flipArray[7],flipArray[8],flipArray[9]); - } - - - function drainStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { - //this function is for the case of a timeout in the commit / reveal - // if a player realizes they are going to lose, they can refuse to reveal - // therefore we must have a timeout of TIMEOUTBLOCKS and if that time is reached - // the other player can get in and drain the remaining tokens from the game - require( stacks[_stack].owner==msg.sender || stacks[_counterStack].owner==msg.sender ); - //the counter must be a counter of stack 1 - require( stackCounter[_counterStack]==_stack ); - require( counterOfStack[_stack]==_counterStack ); - //the bad guy shouldn't be able to drain - require( lastActor[_stack]==msg.sender ); - //must be after timeout period - require( block.number - lastBlock[_stack] >= TIMEOUTBLOCKS); - //game must still be going - require( mode[_stack]<9 ); - - for(uint8 i=0;i<10;i++){ - if(mixedStack[_stack][i]>0){ - uint256 tempId = mixedStack[_stack][i]; - mixedStack[_stack][i]=0; - SlammerTime slammerTimeContract = SlammerTime(slammerTime); - slammerTimeContract.transferBack(msg.sender,tempId); - } - } - - FinishGame(_stack); - mode[_stack]=9; - - delete mixedStack[_stack]; - delete stacks[_stack]; - delete stackCounter[_counterStack]; - delete stacks[_counterStack]; - delete lastBlock[_stack]; - delete lastActor[_stack]; - delete counterOfStack[_stack]; - delete round[_stack]; - delete commitBlock[_stack]; - delete commit[_stack]; - - DrainStack(_stack,_counterStack,msg.sender); - } - event DrainStack(bytes32 stack,bytes32 counterStack,address sender); - - function totalSupply() public view returns (uint) { - return items.length - 1; - } - - function tokensOfOwner(address _owner) external view returns(uint256[]) { - uint256 tokenCount = balanceOf(_owner); - if (tokenCount == 0) { - return new uint256[](0); - } else { - uint256[] memory result = new uint256[](tokenCount); - uint256 total = totalSupply(); - uint256 resultIndex = 0; - uint256 id; - for (id = 1; id <= total; id++) { - if (tokenIndexToOwner[id] == _owner) { - result[resultIndex] = id; - resultIndex++; - } - } - return result; - } - } - - function withdraw(uint256 _amount) public onlyOwner returns (bool) { - require(this.balance >= _amount); - assert(owner.send(_amount)); - return true; - } - - function withdrawToken(address _token,uint256 _amount) public onlyOwner returns (bool) { - StandardToken token = StandardToken(_token); - token.transfer(msg.sender,_amount); - return true; - } - - - //adapted from ERC-677 from my dude Steve Ellis - thanks man! - function transferStackAndCall(address _to, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data) public returns (bool) { - transfer(_to, _token1); - transfer(_to, _token2); - transfer(_to, _token3); - transfer(_to, _token4); - transfer(_to, _token5); - - if (isContract(_to)) { - contractFallback(_to,_token1,_token2,_token3,_token4,_token5,_data); - } - return true; - } - - function contractFallback(address _to, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data) private { - StackReceiver receiver = StackReceiver(_to); - receiver.onTransferStack(msg.sender,_token1,_token2,_token3,_token4,_token5,_data); - } - - function isContract(address _addr) private returns (bool hasCode) { - uint length; - assembly { length := extcodesize(_addr) } - return length > 0; - } - -} - -contract StackReceiver { - function onTransferStack(address _sender, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data); -} - -contract StandardToken { - function transfer(address _to, uint256 _value) public returns (bool) { } -} - -contract SlammerTime { - function startSlammerTime(address _player1,uint256[5] _id1,address _player2,uint256[5] _id2) public returns (bool) { } - function transferBack(address _toWhom, uint256 _id) public returns (bool) { } -} \ No newline at end of file diff --git a/data_full/CVE/2018-15552.sol b/data_full/CVE/2018-15552.sol deleted file mode 100644 index 4aedbcdb..00000000 --- a/data_full/CVE/2018-15552.sol +++ /dev/null @@ -1,120 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-01-16 -*/ - -pragma solidity ^0.4.19; -contract LottoCount { - - //CONSTANT - uint256 private maxTickets; - uint256 public ticketPrice; - - //LOTO REGISTER - uint256 public lottoIndex; - uint256 lastTicketTime; - - //LOTTO VARIABLES - uint8 _direction; - uint256 numtickets; - uint256 totalBounty; - - address worldOwner; - - event NewTicket(address indexed fromAddress, bool success); - event LottoComplete(address indexed fromAddress, uint indexed lottoIndex, uint256 reward); - - /// Create a new Lotto - function LottoCount() public - { - worldOwner = msg.sender; - - ticketPrice = 0.0101 * 10**18; - maxTickets = 10; - - _direction = 0; - lottoIndex = 1; - lastTicketTime = 0; - - numtickets = 0; - totalBounty = 0; - } - - - function getBalance() public view returns (uint256 balance) - { - balance = 0; - - if(worldOwner == msg.sender) balance = this.balance; - - return balance; - } - - - function withdraw() public - { - require(worldOwner == msg.sender); - - //reset values - lottoIndex += 1; - numtickets = 0; - totalBounty = 0; - - worldOwner.transfer(this.balance); - } - - - function getLastTicketTime() public view returns (uint256 time) - { - time = lastTicketTime; - return time; - } - - - function AddTicket() public payable - { - require(msg.value == ticketPrice); - require(numtickets < maxTickets); - - //update bif - lastTicketTime = now; - numtickets += 1; - totalBounty += ticketPrice; - bool success = numtickets == maxTickets; - - NewTicket(msg.sender, success); - - //check if winner - if(success) - { - PayWinner(msg.sender); - } - } - - - function PayWinner( address winner ) private - { - require(numtickets == maxTickets); - - //calc reward - uint ownerTax = 6 * totalBounty / 100; - uint winnerPrice = totalBounty - ownerTax; - - LottoComplete(msg.sender, lottoIndex, winnerPrice); - - //reset values - lottoIndex += 1; - numtickets = 0; - totalBounty = 0; - - //change max tickets to give unpredictability - if(_direction == 0 && maxTickets < 20) maxTickets += 1; - if(_direction == 1 && maxTickets > 10) maxTickets -= 1; - - if(_direction == 0 && maxTickets == 20) _direction = 1; - if(_direction == 1 && maxTickets == 10) _direction = 0; - - //give real money - worldOwner.transfer(ownerTax); - winner.transfer(winnerPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-17050.sol b/data_full/CVE/2018-17050.sol deleted file mode 100644 index 4293a291..00000000 --- a/data_full/CVE/2018-17050.sol +++ /dev/null @@ -1,141 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - revert(); // Prevents accidental sending of ether - } -} - -contract PolyAi is owned, token { - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function PolyAi( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} diff --git a/data_full/CVE/2018-17071.sol b/data_full/CVE/2018-17071.sol deleted file mode 100644 index 602aec5b..00000000 --- a/data_full/CVE/2018-17071.sol +++ /dev/null @@ -1,55 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-08-14 -*/ - -pragma solidity ^0.4.24; - -contract lucky9io { - bool private gameOn = true; - address private owner = 0x5Bf066c70C2B5e02F1C6723E72e82478Fec41201; - uint private entry_number = 0; - uint private value = 0; - - modifier onlyOwner() { - require(msg.sender == owner, "Sender not authorized."); - _; - } - - function stopGame() public onlyOwner { - gameOn = false; - owner.transfer(address(this).balance); - } - - function () public payable{ - if(gameOn == false) { - msg.sender.transfer(msg.value); - return; - } - - if(msg.value * 1000 < 9) { - msg.sender.transfer(msg.value); - return; - } - - entry_number = entry_number + 1; - value = address(this).balance; - - if(entry_number % 999 == 0) { - msg.sender.transfer(value * 8 / 10); - owner.transfer(value * 11 / 100); - return; - } - - if(entry_number % 99 == 0) { - msg.sender.transfer(0.09 ether); - owner.transfer(0.03 ether); - return; - } - - if(entry_number % 9 == 0) { - msg.sender.transfer(0.03 ether); - owner.transfer(0.01 ether); - return; - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-17111.sol b/data_full/CVE/2018-17111.sol deleted file mode 100644 index 3cfdb7df..00000000 --- a/data_full/CVE/2018-17111.sol +++ /dev/null @@ -1,128 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-09-26 -*/ - -// ---------------------------------------------------------------------------------------------- - // Coinlancer fixed supply token contract - // Enjoy. (c) etype 2017. The MIT Licence. - // ---------------------------------------------------------------------------------------------- - - // ERC Token Standard #20 Interface - // https://github.com/ethereum/EIPs/issues/20 - contract ERC20Interface { - // Get the total token supply - function totalSupply() constant returns (uint256 totalSupply); - - // Get the account balance of another account with address _owner - function balanceOf(address _owner) constant returns (uint256 balance); - - // Send _value amount of tokens to address _to - function transfer(address _to, uint256 _value) returns (bool success); - - // Send _value amount of tokens from address _from to address _to - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - - // Allow _spender to withdraw from your account, multiple times, up to the _value amount. - // If this function is called again it overwrites the current allowance with _value. - // this function is required for some DEX functionality - function approve(address _spender, uint256 _value) returns (bool success); - - // Returns the amount which _spender is still allowed to withdraw from _owner - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - - // Triggered when tokens are transferred. - event Transfer(address indexed _from, address indexed _to, uint256 _value); - - // Triggered whenever approve(address _spender, uint256 _value) is called. - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - } - - contract Coinlancer is ERC20Interface { - string public constant symbol = "CL"; - string public constant name = "Coinlancer"; - uint8 public constant decimals = 18; - uint256 _totalSupply = 300000000000000000000000000; - - // Owner of this contract - address public owner; - - // Balances for each account - mapping(address => uint256) balances; - - // Owner of account approves the transfer of an amount to another account - mapping(address => mapping (address => uint256)) allowed; - - // Functions with this modifier can only be executed by the owner - modifier onlyOwner() { - require(msg.sender != owner); { - - } - _; - } - - // Constructor - function Coinlancer() { - owner = msg.sender; - balances[owner] = _totalSupply; - } - - function totalSupply() constant returns (uint256 totalSupply) { - totalSupply = _totalSupply; - } - - // What is the balance of a particular account? - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - // Transfer the balance from owner's account to another account - function transfer(address _to, uint256 _amount) returns (bool success) { - if (balances[msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } else { - return false; - } - } - - // Send _value amount of tokens from address _from to address _to - // The transferFrom method is used for a withdraw workflow, allowing contracts to send - // tokens on your behalf, for example to "deposit" to a contract address and/or to charge - // fees in sub-currencies; the command should fail unless the _from account has - // deliberately authorized the sender of the message via some mechanism; we propose - // these standardized APIs for approval: - function transferFrom( - address _from, - address _to, - uint256 _amount - ) returns (bool success) { - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - - // Allow _spender to withdraw from your account, multiple times, up to the _value amount. - // If this function is called again it overwrites the current allowance with _value. - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-17877.sol b/data_full/CVE/2018-17877.sol deleted file mode 100644 index 214fa921..00000000 --- a/data_full/CVE/2018-17877.sol +++ /dev/null @@ -1,403 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-07-24 -*/ - -pragma solidity ^0.4.0; - -contract Owned { - address public owner; - address public newOwner; - - event OwnershipTransferred(address indexed _from, address indexed _to); - - function Owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address _newOwner) public onlyOwner { - newOwner = _newOwner; - } - - function acceptOwnership() public { - require(msg.sender == newOwner); - emit OwnershipTransferred(owner, newOwner); - owner = newOwner; - newOwner = address(0); - } -} - -contract Greedy is Owned { - //A scam Game, 资金盘, 老鼠會, Ponzi scheme. - //The Game like Fomo3D, But more simple and more short time. - //Audit & be responsible for yourself. - //The code is really simple, so don't ask idiot question. - - //Round Global Info - uint public Round = 1; - mapping(uint => uint) public RoundHeart; - mapping(uint => uint) public RoundETH; // Pot - mapping(uint => uint) public RoundTime; - mapping(uint => uint) public RoundPayMask; - mapping(uint => address) public RoundLastGreedyMan; - - //Globalinfo - uint256 public Luckybuy; - - //Round Personal Info - mapping(uint => mapping(address => uint)) public RoundMyHeart; - mapping(uint => mapping(address => uint)) public RoundMyPayMask; - mapping(address => uint) public MyreferredRevenue; - - //Lucky Buy Tracker - uint256 public luckybuyTracker_ = 0; - - uint256 constant private RoundIncrease = 1 seconds; // every heart purchased adds this much to the timer - uint256 constant private RoundMaxTime = 10 minutes; // max length a round timer can be - - //Owner fee - uint256 public onwerfee; - - using SafeMath for *; - using GreedyHeartCalcLong for uint256; - - event winnerEvent(address winnerAddr, uint256 newPot, uint256 round); - event luckybuyEvent(address luckyAddr, uint256 amount, uint256 round); - event buyheartEvent(address Addr, uint256 Heartamount, uint256 ethvalue, uint256 round, address ref); - event referredEvent(address Addr, address RefAddr, uint256 ethvalue); - - event withdrawEvent(address Addr, uint256 ethvalue, uint256 Round); - event withdrawRefEvent(address Addr, uint256 ethvalue); - event withdrawOwnerEvent(uint256 ethvalue); - - //Get Heart Price - function getHeartPrice() public view returns(uint256) - { - return ( (RoundHeart[Round].add(1000000000000000000)).ethRec(1000000000000000000) ); - } - - //Get My Revenue - function getMyRevenue(uint _round) public view returns(uint256) - { - return( (((RoundPayMask[_round]).mul(RoundMyHeart[_round][msg.sender])) / (1000000000000000000)).sub(RoundMyPayMask[_round][msg.sender]) ); - } - - //Get Time Left - function getTimeLeft() public view returns(uint256) - { - if(RoundTime[Round] == 0 || RoundTime[Round] < now) - return 0; - else - return( (RoundTime[Round]).sub(now) ); - } - - function updateTimer(uint256 _hearts) private - { - if(RoundTime[Round] == 0) - RoundTime[Round] = RoundMaxTime.add(now); - - uint _newTime = (((_hearts) / (1000000000000000000)).mul(RoundIncrease)).add(RoundTime[Round]); - - // compare to max and set new end time - if (_newTime < (RoundMaxTime).add(now)) - RoundTime[Round] = _newTime; - else - RoundTime[Round] = RoundMaxTime.add(now); - } - - //Buy some greedy heart - function buyHeart(address referred) public payable { - - require(msg.value >= 1000000000, "pocket lint: not a valid currency"); - require(msg.value <= 100000000000000000000000, "no vitalik, no"); - - address _addr = msg.sender; - uint256 _codeLength; - assembly {_codeLength := extcodesize(_addr)} - require(_codeLength == 0, "sorry humans only"); - - //bought at least 1 whole key - uint256 _hearts = (RoundETH[Round]).keysRec(msg.value); - uint256 _pearn; - require(_hearts >= 1000000000000000000); - - require(RoundTime[Round] > now || RoundTime[Round] == 0); - - updateTimer(_hearts); - - RoundHeart[Round] += _hearts; - RoundMyHeart[Round][msg.sender] += _hearts; - - if (referred != address(0) && referred != msg.sender) - { - _pearn = (((msg.value.mul(30) / 100).mul(1000000000000000000)) / (RoundHeart[Round])).mul(_hearts)/ (1000000000000000000); - - onwerfee += (msg.value.mul(4) / 100); - RoundETH[Round] += msg.value.mul(54) / 100; - Luckybuy += msg.value.mul(2) / 100; - MyreferredRevenue[referred] += (msg.value.mul(10) / 100); - - RoundPayMask[Round] += ((msg.value.mul(30) / 100).mul(1000000000000000000)) / (RoundHeart[Round]); - RoundMyPayMask[Round][msg.sender] = (((RoundPayMask[Round].mul(_hearts)) / (1000000000000000000)).sub(_pearn)).add(RoundMyPayMask[Round][msg.sender]); - - emit referredEvent(msg.sender, referred, msg.value.mul(10) / 100); - } else { - _pearn = (((msg.value.mul(40) / 100).mul(1000000000000000000)) / (RoundHeart[Round])).mul(_hearts)/ (1000000000000000000); - - RoundETH[Round] += msg.value.mul(54) / 100; - Luckybuy += msg.value.mul(2) / 100; - onwerfee +=(msg.value.mul(4) / 100); - - RoundPayMask[Round] += ((msg.value.mul(40) / 100).mul(1000000000000000000)) / (RoundHeart[Round]); - RoundMyPayMask[Round][msg.sender] = (((RoundPayMask[Round].mul(_hearts)) / (1000000000000000000)).sub(_pearn)).add(RoundMyPayMask[Round][msg.sender]); - - } - - // manage airdrops - if (msg.value >= 100000000000000000){ - luckybuyTracker_++; - if (luckyBuy() == true) - { - msg.sender.transfer(Luckybuy); - emit luckybuyEvent(msg.sender, Luckybuy, Round); - luckybuyTracker_ = 0; - Luckybuy = 0; - } - } - - RoundLastGreedyMan[Round] = msg.sender; - emit buyheartEvent(msg.sender, _hearts, msg.value, Round, referred); - } - - function win() public { - require(now > RoundTime[Round] && RoundTime[Round] != 0); - //Round End - RoundLastGreedyMan[Round].transfer(RoundETH[Round]); - emit winnerEvent(RoundLastGreedyMan[Round], RoundETH[Round], Round); - Round++; - } - - //withdrawEarnings - function withdraw(uint _round) public { - uint _revenue = getMyRevenue(_round); - uint _revenueRef = MyreferredRevenue[msg.sender]; - - RoundMyPayMask[_round][msg.sender] += _revenue; - MyreferredRevenue[msg.sender] = 0; - - msg.sender.transfer(_revenue + _revenueRef); - - emit withdrawRefEvent( msg.sender, _revenue); - emit withdrawEvent(msg.sender, _revenue, _round); - } - - function withdrawOwner() public onlyOwner { - uint _revenue = onwerfee; - msg.sender.transfer(_revenue); - onwerfee = 0; - emit withdrawOwnerEvent(_revenue); - } - - //LuckyBuy - function luckyBuy() private view returns(bool) - { - uint256 seed = uint256(keccak256(abi.encodePacked( - - (block.timestamp).add - (block.difficulty).add - ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add - (block.gaslimit).add - ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add - (block.number) - - ))); - - if((seed - ((seed / 1000) * 1000)) < luckybuyTracker_) - return(true); - else - return(false); - } - - function getFullround()public view returns(uint[] round,uint[] pot, address[] whowin,uint[] mymoney) { - uint[] memory whichRound = new uint[](Round); - uint[] memory totalPool = new uint[](Round); - address[] memory winner = new address[](Round); - uint[] memory myMoney = new uint[](Round); - uint counter = 0; - - for (uint i = 1; i <= Round; i++) { - whichRound[counter] = i; - totalPool[counter] = RoundETH[i]; - winner[counter] = RoundLastGreedyMan[i]; - myMoney[counter] = getMyRevenue(i); - counter++; - } - - return (whichRound,totalPool,winner,myMoney); - } -} - -library GreedyHeartCalcLong { - using SafeMath for *; - /** - * @dev calculates number of keys received given X eth - * @param _curEth current amount of eth in contract - * @param _newEth eth being spent - * @return amount of ticket purchased - */ - function keysRec(uint256 _curEth, uint256 _newEth) - internal - pure - returns (uint256) - { - return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); - } - - /** - * @dev calculates amount of eth received if you sold X keys - * @param _curKeys current amount of keys that exist - * @param _sellKeys amount of keys you wish to sell - * @return amount of eth received - */ - function ethRec(uint256 _curKeys, uint256 _sellKeys) - internal - pure - returns (uint256) - { - return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); - } - - /** - * @dev calculates how many keys would exist with given an amount of eth - * @param _eth eth "in contract" - * @return number of keys that would exist - */ - function keys(uint256 _eth) - internal - pure - returns(uint256) - { - return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); - } - - /** - * @dev calculates how much eth would be in contract given a number of keys - * @param _keys number of keys "in contract" - * @return eth that would exists - */ - function eth(uint256 _keys) - internal - pure - returns(uint256) - { - return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); - } -} - -/** - * @title SafeMath v0.1.9 - * @dev Math operations with safety checks that throw on error - * change notes: original SafeMath library from OpenZeppelin modified by Inventor - * - added sqrt - * - added sq - * - added pwr - * - changed asserts to requires with error log outputs - * - removed div, its useless - */ -library SafeMath { - - /** - * @dev Multiplies two numbers, throws on overflow. - */ - function mul(uint256 a, uint256 b) - internal - pure - returns (uint256 c) - { - if (a == 0) { - return 0; - } - c = a * b; - require(c / a == b, "SafeMath mul failed"); - return c; - } - - /** - * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). - */ - function sub(uint256 a, uint256 b) - internal - pure - returns (uint256) - { - require(b <= a, "SafeMath sub failed"); - return a - b; - } - - /** - * @dev Adds two numbers, throws on overflow. - */ - function add(uint256 a, uint256 b) - internal - pure - returns (uint256 c) - { - c = a + b; - require(c >= a, "SafeMath add failed"); - return c; - } - - /** - * @dev gives square root of given x. - */ - function sqrt(uint256 x) - internal - pure - returns (uint256 y) - { - uint256 z = ((add(x,1)) / 2); - y = x; - while (z < y) - { - y = z; - z = ((add((x / z),z)) / 2); - } - } - - /** - * @dev gives square. multiplies x by x - */ - function sq(uint256 x) - internal - pure - returns (uint256) - { - return (mul(x,x)); - } - - /** - * @dev x to the power of y - */ - function pwr(uint256 x, uint256 y) - internal - pure - returns (uint256) - { - if (x==0) - return (0); - else if (y==0) - return (1); - else - { - uint256 z = x; - for (uint256 i=1; i < y; i++) - z = mul(z,x); - return (z); - } - } - -} \ No newline at end of file diff --git a/data_full/CVE/2018-17882.sol b/data_full/CVE/2018-17882.sol deleted file mode 100644 index 8d842294..00000000 --- a/data_full/CVE/2018-17882.sol +++ /dev/null @@ -1,117 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-13 -*/ - -pragma solidity ^0.4.18; - -/** - * @title Ownable - * @dev The Ownable contract has an owner address, and provides basic authorization control - * functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { - address public owner; - - /** - * @dev The Ownable constructor sets the original `owner` of the contract to the sender - * account. - */ - function Ownable() public { - owner = msg.sender; - } - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - /** - * @dev Allows the current owner to transfer control of the contract to a newOwner. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) public onlyOwner { - if (newOwner != address(0)) { - owner = newOwner; - } - } -} - - -contract BattleToken is Ownable { - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - uint256 constant private MAX_UINT256 = 2**256 - 1; - mapping (address => uint256) public balances; - mapping (address => mapping (address => uint256)) public allowed; - uint256 public totalSupply; - string public name = "https://cryptobots.me/cbtb - CryptoBotsBattle"; - uint8 public decimals = 0; - string public symbol = "CBTB"; - - address public fights; - - function setFightsAddress(address _fights) public onlyOwner { - fights = _fights; - } - - function create(uint _amount) public onlyOwner { - balances[msg.sender] = safeAdd(balances[msg.sender], _amount); - totalSupply = safeAdd(totalSupply, _amount); - } - - function transfer(address _to, uint256 _value) public returns (bool success) { - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - return true; - } - - function batchTransfer(address[] _to, uint _value) public { - balances[msg.sender] = safeSub( - balances[msg.sender], _to.length * _value - ); - for (uint i = 0; i < _to.length; i++) { - balances[_to[i]] = safeAdd(balances[_to[i]], _value); - Transfer(msg.sender, _to[i], _value); - } - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - balances[_to] = safeAdd(balances[_to], _value); - balances[_from] = safeSub(balances[_from], _value); - if (_to != fights) { - allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value); - } - Transfer(_from, _to, _value); - return true; - } - - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) public view returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } - - function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-17968.sol b/data_full/CVE/2018-17968.sol deleted file mode 100644 index 6613cb1e..00000000 --- a/data_full/CVE/2018-17968.sol +++ /dev/null @@ -1,253 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-07-12 -*/ - -pragma solidity ^0.4.8; - -contract RuletkaIo { - - /*** EVENTS ***/ - - /// @dev A russian Roulette has been executed between 6 players - /// in room roomId and unfortunately, victim got shot and didn't - /// make it out alive... RIP - event partyOver(uint256 roomId, address victim, address[] winners); - - /// @dev A new player has enter a room - event newPlayer(uint256 roomId, address player); - - /// @dev A room is full, we close the door. Game can start. - event fullRoom(uint256 roomId); - - /// @dev A safety mechanism has been triggered to empty the room and refund entirely the players (Should never happen) - event roomRefunded(uint256 _roomId, address[] refundedPlayers); - - /*** Founders addresses ***/ - address CTO; - address CEO; - - Room[] private allRooms; - - function () public payable {} // Give the ability of receiving ether - - function RuletkaIo() public { - CTO = msg.sender; - CEO = msg.sender; - } - - /*** ACCESS MODIFIERS ***/ - /// @dev Access modifier for CTO-only functionality - modifier onlyCTO() { - require(msg.sender == CTO); - _; - } - - /// @dev Assigns a new address to act as the CTO. - /// @param _newCTO The address of the new CTO - function setCTO(address _newCTO) public onlyCTO { - require(_newCTO != address(0)); - CTO = _newCTO; - } - - /// @dev Assigns a new address to act as the CEO. - /// @param _newCEO The address of the new CEO - function setCEO(address _newCEO) public onlyCTO { - require(_newCEO != address(0)); - CEO = _newCEO; - } - - /*** DATATYPES ***/ - struct Room { - string name; - uint256 entryPrice; // The price to enter the room and play Russian Roulette - uint256 balance; - address[] players; - } - - - /// For creating Room - function createRoom(string _name, uint256 _entryPrice) public onlyCTO{ - address[] memory players; - Room memory _room = Room({ - name: _name, - players: players, - balance: 0, - entryPrice: _entryPrice - }); - - allRooms.push(_room); - } - - function enter(uint256 _roomId) public payable { - Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. - - require(room.players.length < 6); - require(msg.value >= room.entryPrice); - - room.players.push(msg.sender); - room.balance += room.entryPrice; - - emit newPlayer(_roomId, msg.sender); - - if(room.players.length == 6){ - executeRoom(_roomId); - } - } - - function enterWithReferral(uint256 _roomId, address referrer) public payable { - - Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. - - require(room.players.length < 6); - require(msg.value >= room.entryPrice); - - uint256 referrerCut = SafeMath.div(room.entryPrice, 100); // Referrer get one percent of the bet as reward - referrer.transfer(referrerCut); - - room.players.push(msg.sender); - room.balance += room.entryPrice - referrerCut; - - emit newPlayer(_roomId, msg.sender); - - if(room.players.length == 6){ - emit fullRoom(_roomId); - executeRoom(_roomId); - } - } - - function executeRoom(uint256 _roomId) public { - - Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. - - //Check if the room is really full before shooting people... - require(room.players.length == 6); - - uint256 halfFee = SafeMath.div(room.entryPrice, 20); - CTO.transfer(halfFee); - CEO.transfer(halfFee); - room.balance -= halfFee * 2; - - uint256 deadSeat = random(); - - distributeFunds(_roomId, deadSeat); - - delete room.players; - } - - function distributeFunds(uint256 _roomId, uint256 _deadSeat) private returns(uint256) { - - Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. - uint256 balanceToDistribute = SafeMath.div(room.balance,5); - - address victim = room.players[_deadSeat]; - address[] memory winners = new address[](5); - uint256 j = 0; - for (uint i = 0; i<6; i++) { - if(i != _deadSeat){ - room.players[i].transfer(balanceToDistribute); - room.balance -= balanceToDistribute; - winners[j] = room.players[i]; - j++; - } - } - - emit partyOver(_roomId, victim, winners); - - return address(this).balance; - } - - /// @dev Empty the room and refund each player. Safety mechanism which shouldn't be used. - /// @param _roomId The Room id to empty and refund - function refundPlayersInRoom(uint256 _roomId) public onlyCTO{ - Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. - uint256 nbrOfPlayers = room.players.length; - uint256 balanceToRefund = SafeMath.div(room.balance,nbrOfPlayers); - for (uint i = 0; i 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - /** - * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). - */ - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - /** - * @dev Adds two numbers, throws on overflow. - */ - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-17987.sol b/data_full/CVE/2018-17987.sol deleted file mode 100644 index c629eee4..00000000 --- a/data_full/CVE/2018-17987.sol +++ /dev/null @@ -1,179 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-11-08 -*/ - -pragma solidity ^0.4.13; - -contract Tiles { - - uint public constant NUM_TILES = 256; - uint constant SIDE_LENGTH = 16; - uint private constant STARTING_GAME_NUMBER = 1; - uint public DEFAULT_GAME_COST = 5000000000000000; - - address private owner; - - uint public currentGameNumber; - uint public currentGameBalance; - uint public numTilesClaimed; - Tile[16][16] public tiles; - bool public gameStopped; - uint public gameEarnings; - bool public willChangeCost; - uint public currentGameCost; - uint public nextGameCost; - - mapping (address => uint) public pendingWithdrawals; - mapping (uint => address) public gameToWinner; - - struct Tile { - uint gameClaimed; - address claimedBy; - } - - event GameWon(uint indexed gameNumber, address indexed winner); - event TileClaimed(uint indexed gameNumber, uint indexed xCoord, uint indexed yCoord, address claimedBy); - event WinningsClaimed(address indexed claimedBy, uint indexed amountClaimed); - event FailedToClaim(address indexed claimedBy, uint indexed amountToClaim); - event PrintWinningInfo(bytes32 hash, uint xCoord, uint yCoord); - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - modifier gameRunning() { - require(!gameStopped); - _; - } - - modifier gameNotRunning() { - require(gameStopped == true); - _; - } - - function Tiles() payable { - owner = msg.sender; - currentGameNumber = STARTING_GAME_NUMBER; - currentGameCost = DEFAULT_GAME_COST; - numTilesClaimed = 0; - gameStopped = false; - gameEarnings = 0; - willChangeCost = false; - nextGameCost = DEFAULT_GAME_COST; - } - - function cancelContract() onlyOwner returns (bool) { - gameStopped = true; - refundTiles(); - refundWinnings(); - } - - function getRightCoordinate(byte input) returns(uint) { - byte val = input & byte(15); - return uint(val); - } - - function getLeftCoordinate(byte input) returns(uint) { - byte val = input >> 4; - return uint(val); - } - - function determineWinner() private { - bytes32 winningHash = block.blockhash(block.number - 1); - byte winningPair = winningHash[31]; - uint256 winningX = getRightCoordinate(winningPair); - uint256 winningY = getLeftCoordinate(winningPair); - address winner = tiles[winningX][winningY].claimedBy; - PrintWinningInfo(winningHash, winningX, winningY); - GameWon(currentGameNumber, winner); - resetGame(winner); - } - - function claimTile(uint xCoord, uint yCoord, uint gameNumber) gameRunning payable { - if (gameNumber != currentGameNumber || tiles[xCoord][yCoord].gameClaimed == currentGameNumber) { - revert(); - } - require(msg.value == currentGameCost); - - currentGameBalance += msg.value; - tiles[xCoord][yCoord] = Tile(currentGameNumber, msg.sender); - TileClaimed(currentGameNumber, xCoord, yCoord, msg.sender); - numTilesClaimed += 1; - if (numTilesClaimed == NUM_TILES) { - determineWinner(); - } - } - - function resetGame(address winner) private { - uint winningAmount = uint(currentGameBalance) * uint(9) / uint(10); - uint remainder = currentGameBalance - winningAmount; - currentGameBalance = 0; - - gameToWinner[currentGameNumber] = winner; - currentGameNumber++; - numTilesClaimed = 0; - - pendingWithdrawals[winner] += winningAmount; - gameEarnings += remainder; - - if (willChangeCost) { - currentGameCost = nextGameCost; - willChangeCost = false; - } - } - - function refundTiles() private { - Tile memory currTile; - for (uint i = 0; i < SIDE_LENGTH; i++) { - for (uint j = 0; j < SIDE_LENGTH; j++) { - currTile = tiles[i][j]; - if (currTile.gameClaimed == currentGameNumber) { - if (currTile.claimedBy.send(currentGameCost)) { - tiles[i][j] = Tile(0, 0x0); - } - } - } - } - } - - function refundWinnings() private { - address currAddress; - uint currAmount; - for (uint i = STARTING_GAME_NUMBER; i < currentGameNumber; i++) { - currAddress = gameToWinner[i]; - currAmount = pendingWithdrawals[currAddress]; - if (currAmount != 0) { - if (currAddress.send(currAmount)) { - pendingWithdrawals[currAddress] = 0; - } - } - } - } - - function claimWinnings() { - if (pendingWithdrawals[msg.sender] != 0) { - if (msg.sender.send(pendingWithdrawals[msg.sender])) { - WinningsClaimed(msg.sender, pendingWithdrawals[msg.sender]); - pendingWithdrawals[msg.sender] = 0; - } else { - FailedToClaim(msg.sender, pendingWithdrawals[msg.sender]); - } - } - } - - function updateGameCost(uint newGameCost) onlyOwner returns (bool) { - if (newGameCost > 0) { - nextGameCost = newGameCost; - willChangeCost = true; - } - } - - function claimOwnersEarnings() onlyOwner { - if (gameEarnings != 0) { - if (owner.send(gameEarnings)) { - gameEarnings = 0; - } - } - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-18425.sol b/data_full/CVE/2018-18425.sol deleted file mode 100644 index 5f107e70..00000000 --- a/data_full/CVE/2018-18425.sol +++ /dev/null @@ -1,264 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-09-04 -*/ - -pragma solidity ^0.4.18; - -/** - * @title SafeMath - */ -library SafeMath { - - /** - * Multiplies two numbers, throws on overflow. - */ - function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { - if (a == 0) { - return 0; - } - c = a * b; - assert(c / a == b); - return c; - } - - /** - * Integer division of two numbers, truncating the quotient. - */ - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - // uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return a / b; - } - - /** - * Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). - */ - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - /** - * Adds two numbers, throws on overflow. - */ - function add(uint256 a, uint256 b) internal pure returns (uint256 c) { - c = a + b; - assert(c >= a); - return c; - } -} - -contract AltcoinToken { - function balanceOf(address _owner) constant public returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool); -} - -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -contract Primeo is ERC20 { - - using SafeMath for uint256; - address owner = msg.sender; - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - - string public constant name = "Primeo"; - string public constant symbol = "PEO"; - uint public constant decimals = 8; - - uint256 public totalSupply = 10000000000e8; - uint256 public totalDistributed = 0; - uint256 public tokensPerEth = 10000000e8; - uint256 public constant minContribution = 1 ether / 100; // 0.01 Eth - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - event Distr(address indexed to, uint256 amount); - event DistrFinished(); - - event Airdrop(address indexed _owner, uint _amount, uint _balance); - - event TokensPerEthUpdated(uint _tokensPerEth); - - event Burn(address indexed burner, uint256 value); - - bool public distributionFinished = false; - - modifier canDistr() { - require(!distributionFinished); - _; - } - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - - - - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - owner = newOwner; - } - } - - - function finishDistribution() onlyOwner canDistr public returns (bool) { - distributionFinished = true; - emit DistrFinished(); - return true; - } - - function distr(address _to, uint256 _amount) canDistr private returns (bool) { - totalDistributed = totalDistributed.add(_amount); - balances[_to] = balances[_to].add(_amount); - emit Distr(_to, _amount); - emit Transfer(address(0), _to, _amount); - - return true; - } - - function doAirdrop(address _participant, uint _amount) internal { - - require( _amount > 0 ); - - require( totalDistributed < totalSupply ); - - balances[_participant] = balances[_participant].add(_amount); - totalDistributed = totalDistributed.add(_amount); - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - - // log - emit Airdrop(_participant, _amount, balances[_participant]); - emit Transfer(address(0), _participant, _amount); - } - - function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { - doAirdrop(_participant, _amount); - } - - function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { - for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); - } - - function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { - tokensPerEth = _tokensPerEth; - emit TokensPerEthUpdated(_tokensPerEth); - } - - function () external payable { - getTokens(); - } - - function getTokens() payable canDistr public { - uint256 tokens = 0; - - require( msg.value >= minContribution ); - - require( msg.value > 0 ); - - tokens = tokensPerEth.mul(msg.value) / 1 ether; - address investor = msg.sender; - - if (tokens > 0) { - distr(investor, tokens); - } - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - - function balanceOf(address _owner) constant public returns (uint256) { - return balances[_owner]; - } - - // mitigates the ERC20 short address attack - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - - function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { - - require(_to != address(0)); - require(_amount <= balances[msg.sender]); - - balances[msg.sender] = balances[msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(msg.sender, _to, _amount); - return true; - } - - function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { - - require(_to != address(0)); - require(_amount <= balances[_from]); - require(_amount <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(_from, _to, _amount); - return true; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - // mitigates the ERC20 spend/approval race condition - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant public returns (uint256) { - return allowed[_owner][_spender]; - } - - function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ - AltcoinToken t = AltcoinToken(tokenAddress); - uint bal = t.balanceOf(who); - return bal; - } - - function withdraw() onlyOwner public { - address myAddress = this; - uint256 etherBalance = myAddress.balance; - owner.transfer(etherBalance); - } - - function burn(uint256 _value) onlyOwner public { - require(_value <= balances[msg.sender]); - - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - totalDistributed = totalDistributed.sub(_value); - emit Burn(burner, _value); - } - - function withdrawAltcoinTokens(address _tokenContract) onlyOwner public returns (bool) { - AltcoinToken token = AltcoinToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-18665.sol b/data_full/CVE/2018-18665.sol deleted file mode 100644 index 12cbf2b3..00000000 --- a/data_full/CVE/2018-18665.sol +++ /dev/null @@ -1,79 +0,0 @@ -pragma solidity ^0.4.11; - -contract Token { - uint256 public totalSupply; - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - -contract StandardToken is Token { - bool public disabled = false; - function transfer(address _to, uint256 _value) returns (bool success) { - if (disabled != true && balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (disabled != true && balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} - -contract NexxusToken is StandardToken { - - function () {return;} - - string public name = "Nexxus"; - uint8 public decimals = 8; - string public symbol = "NXX"; - address public owner; - - function NexxusToken() { - totalSupply = 31800000000000000; - owner = msg.sender; - balances[owner] = totalSupply; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { return; } - return true; - } - function mintToken(uint256 _amount) { - if (msg.sender == owner) { - totalSupply += _amount; - balances[owner] += _amount; - Transfer(0, owner, _amount); - } - } - function disableToken(bool _disable) { - if (msg.sender == owner) - disabled = _disable; - } -} diff --git a/data_full/CVE/2018-19830.sol b/data_full/CVE/2018-19830.sol deleted file mode 100644 index 5a45a295..00000000 --- a/data_full/CVE/2018-19830.sol +++ /dev/null @@ -1,203 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-08-11 -*/ - -pragma solidity ^0.4.24; - -library SafeMath { - function mul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint a, uint b) internal returns (uint) { - uint c = a / b; - return c; - } - - function sub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - - function add(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c >= a); - return c; - } - - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} - - -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); - - function allowance(address owner, address spender) constant returns (uint); - function transferFrom(address from, address to, uint value); - function approve(address spender, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} - - -contract BasicToken is ERC20Basic { - using SafeMath for uint; - - address public owner; - - /// This is a switch to control the liquidity - bool public transferable = true; - - mapping(address => uint) balances; - - //The frozen accounts - mapping (address => bool) public frozenAccount; - - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - - modifier unFrozenAccount{ - require(!frozenAccount[msg.sender]); - _; - } - - modifier onlyOwner { - if (owner == msg.sender) { - _; - } else { - InvalidCaller(msg.sender); - throw; - } - } - - modifier onlyTransferable { - if (transferable) { - _; - } else { - LiquidityAlarm("The liquidity is switched off"); - throw; - } - } - - /// Emitted when the target account is frozen - event FrozenFunds(address target, bool frozen); - - /// Emitted when a function is invocated by unauthorized addresses. - event InvalidCaller(address caller); - - /// Emitted when some UBS coins are burn. - event Burn(address caller, uint value); - - /// Emitted when the ownership is transferred. - event OwnershipTransferred(address indexed from, address indexed to); - - /// Emitted if the account is invalid for transaction. - event InvalidAccount(address indexed addr, bytes msg); - - /// Emitted when the liquity of UBS is switched off - event LiquidityAlarm(bytes msg); - - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) unFrozenAccount onlyTransferable { - if (frozenAccount[_to]) { - InvalidAccount(_to, "The receiver account is frozen"); - } else { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - } - } - - function balanceOf(address _owner) view returns (uint balance) { - return balances[_owner]; - } - - ///@notice `freeze? Prevent | Allow` `target` from sending & receiving UBS preconditions - ///@param target Address to be frozen - ///@param freeze To freeze the target account or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target]=freeze; - FrozenFunds(target, freeze); - } - - function accountFrozenStatus(address target) view returns (bool frozen) { - return frozenAccount[target]; - } - - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - address oldOwner=owner; - owner = newOwner; - OwnershipTransferred(oldOwner, owner); - } - } - - function switchLiquidity (bool _transferable) onlyOwner returns (bool success) { - transferable=_transferable; - return true; - } - - function liquidityStatus () view returns (bool _transferable) { - return transferable; - } -} - - -contract StandardToken is BasicToken { - - mapping (address => mapping (address => uint)) allowed; - - function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) unFrozenAccount onlyTransferable{ - var _allowance = allowed[_from][msg.sender]; - - // Check account _from and _to is not frozen - require(!frozenAccount[_from]&&!frozenAccount[_to]); - - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - } - - function approve(address _spender, uint _value) unFrozenAccount { - if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; - - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - } - - function allowance(address _owner, address _spender) view returns (uint remaining) { - return allowed[_owner][_spender]; - } - -} - - -contract BAFCToken is StandardToken { - string public name = "Business Alliance Financial Circle"; - string public symbol = "BAFC"; - uint public decimals = 18; - /** - * CONSTRUCTOR, This address will be : 0x... - */ - function UBSexToken() { - owner = msg.sender; - totalSupply = 1.9 * 10 ** 26; - balances[owner] = totalSupply; - } - - function () public payable { - revert(); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-19831.sol b/data_full/CVE/2018-19831.sol deleted file mode 100644 index c4aa9203..00000000 --- a/data_full/CVE/2018-19831.sol +++ /dev/null @@ -1,305 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-08-18 -*/ - -pragma solidity ^0.4.19; - -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -contract ForeignToken { - function balanceOf(address _owner) constant public returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool); -} - -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -interface Token { - function distr(address _to, uint256 _value) public returns (bool); - function totalSupply() constant public returns (uint256 supply); - function balanceOf(address _owner) constant public returns (uint256 balance); -} - -contract Cryptbond is ERC20 { - - using SafeMath for uint256; - address owner = msg.sender; - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - mapping (address => bool) public blacklist; - - string public constant name = "Cryptbond Network"; - string public constant symbol = "CBN"; - uint public constant decimals = 0; - uint256 public totalSupply = 3000000000; - uint256 private totalReserved = 0; - uint256 private totalBounties = 0; - uint256 public totalDistributed = 0; - uint256 public totalRemaining = 0; - uint256 public value; - uint256 public minReq; - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - event Distr(address indexed to, uint256 amount); - event DistrFinished(); - - event Burn(address indexed burner, uint256 value); - - bool public distributionFinished = false; - - modifier canDistr() { - require(!distributionFinished); - _; - } - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - modifier onlyWhitelist() { - require(blacklist[msg.sender] == false); - _; - } - function ToOwner( - - ) public { - balances[msg.sender] = totalSupply; // Give the creator all initial tokens - owner = msg.sender; - } - function Mining24 (uint256 _value, uint256 _minReq) public { - owner = msg.sender; - value = _value; - minReq = _minReq; - balances[msg.sender] = totalDistributed; - } - - function setParameters (uint256 _value, uint256 _minReq) onlyOwner public { - value = _value; - minReq = _minReq; - } - - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - owner = newOwner; - } - } - - function enableWhitelist(address[] addresses) onlyOwner public { - for (uint i = 0; i < addresses.length; i++) { - blacklist[addresses[i]] = false; - } - } - - function disableWhitelist(address[] addresses) onlyOwner public { - for (uint i = 0; i < addresses.length; i++) { - blacklist[addresses[i]] = true; - } - } - - function finishDistribution() onlyOwner canDistr public returns (bool) { - distributionFinished = true; - DistrFinished(); - return true; - } - - function distr(address _to, uint256 _amount) canDistr private returns (bool) { - totalDistributed = totalDistributed.add(_amount); - totalRemaining = totalRemaining.sub(_amount); - balances[_to] = balances[_to].add(_amount); - Distr(_to, _amount); - Transfer(address(0), _to, _amount); - return true; - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - - function airdrop(address[] addresses) onlyOwner canDistr public { - - require(addresses.length <= 255); - require(value <= totalRemaining); - - for (uint i = 0; i < addresses.length; i++) { - require(value <= totalRemaining); - distr(addresses[i], value); - } - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - - function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { - - require(addresses.length <= 255); - require(amount <= totalRemaining); - - for (uint i = 0; i < addresses.length; i++) { - require(amount <= totalRemaining); - distr(addresses[i], amount); - } - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - - function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { - - require(addresses.length <= 255); - require(addresses.length == amounts.length); - - for (uint8 i = 0; i < addresses.length; i++) { - require(amounts[i] <= totalRemaining); - distr(addresses[i], amounts[i]); - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - } - uint price = 0.000001 ether; - function() public payable { - - uint toMint = msg.value/price; - //totalSupply += toMint; - balances[msg.sender]+=toMint; - Transfer(0,msg.sender,toMint); - - } - function getTokens() payable canDistr onlyWhitelist public { - - require(value <= totalRemaining); - - address investor = msg.sender; - uint256 toGive = value; - - if (msg.value < minReq){ - toGive = value.sub(value); - } - - distr(investor, toGive); - - if (toGive > 0) { - blacklist[investor] = true; - } - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - - function balanceOf(address _owner) constant public returns (uint256) { - return balances[_owner]; - } - - // mitigates the ERC20 short address attack - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - - function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { - - require(_to != address(0)); - require(_amount <= balances[msg.sender]); - - balances[msg.sender] = balances[msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - Transfer(msg.sender, _to, _amount); - return true; - } - - function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { - - require(_to != address(0)); - require(_amount <= balances[_from]); - require(_amount <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - Transfer(_from, _to, _amount); - return true; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - // mitigates the ERC20 spend/approval race condition - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant public returns (uint256) { - return allowed[_owner][_spender]; - } - - function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ - ForeignToken t = ForeignToken(tokenAddress); - uint bal = t.balanceOf(who); - return bal; - } - - function withdraw() onlyOwner public { - uint256 etherBalance = this.balance; - owner.transfer(etherBalance); - } - - function burn(uint256 _value) onlyOwner public { - require(_value <= balances[msg.sender]); - // no need to require value <= totalSupply, since that would imply the - // sender's balance is greater than the totalSupply, which *should* be an assertion failure - - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - totalDistributed = totalDistributed.sub(_value); - Burn(burner, _value); - } - - function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } - - -} \ No newline at end of file diff --git a/data_full/CVE/2018-19832.sol b/data_full/CVE/2018-19832.sol deleted file mode 100644 index db27f83a..00000000 --- a/data_full/CVE/2018-19832.sol +++ /dev/null @@ -1,232 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-08-28 -*/ - -// * Send 0 ETH to contract address obtain the token -// * (sending any extra amount of ETH will be considered as donations) -// * Use 120 000 Gas if sending -// website: www.netmchain.com -// Token name: NewIntelTechMedia -// Symbol: NETM -// Decimals: 18 - -pragma solidity ^0.4.24; - -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -contract ForeignToken { - function balanceOf(address _owner) constant public returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool); -} - -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -interface Token { - function distr(address _to, uint256 _value) external returns (bool); - function totalSupply() constant external returns (uint256 supply); - function balanceOf(address _owner) constant external returns (uint256 balance); -} - -contract NewIntelTechMedia is ERC20 { - - using SafeMath for uint256; - address owner = msg.sender; - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - mapping (address => bool) public blacklist; - - string public constant name = "NewIntelTechMedia"; - string public constant symbol = "NETM"; - uint public constant decimals = 18; - - uint256 public totalSupply = 500000000e18; - uint256 public totalDistributed = 250000000e18; - uint256 public totalRemaining = totalSupply.sub(totalDistributed); - uint256 public value = 2500e18; - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - event Distr(address indexed to, uint256 amount); - event DistrFinished(); - - event Burn(address indexed burner, uint256 value); - - bool public distributionFinished = false; - - modifier canDistr() { - require(!distributionFinished); - _; - } - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - modifier onlyWhitelist() { - require(blacklist[msg.sender] == false); - _; - } - - function NETM() public { - owner = msg.sender; - balances[owner] = totalDistributed; - } - - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - owner = newOwner; - } - } - - function finishDistribution() onlyOwner canDistr public returns (bool) { - distributionFinished = true; - emit DistrFinished(); - return true; - } - - function distr(address _to, uint256 _amount) canDistr private returns (bool) { - totalDistributed = totalDistributed.add(_amount); - totalRemaining = totalRemaining.sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Distr(_to, _amount); - emit Transfer(address(0), _to, _amount); - return true; - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - - function () external payable { - getTokens(); - } - - function getTokens() payable canDistr onlyWhitelist public { - if (value > totalRemaining) { - value = totalRemaining; - } - - require(value <= totalRemaining); - - address investor = msg.sender; - uint256 toGive = value; - - distr(investor, toGive); - - if (toGive > 0) { - blacklist[investor] = true; - } - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - - value = value.div(100000).mul(99999); - } - - function balanceOf(address _owner) constant public returns (uint256) { - return balances[_owner]; - } - - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - - function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[msg.sender]); - - balances[msg.sender] = balances[msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(msg.sender, _to, _amount); - return true; - } - - function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[_from]); - require(_amount <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(_from, _to, _amount); - return true; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant public returns (uint256) { - return allowed[_owner][_spender]; - } - - function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ - ForeignToken t = ForeignToken(tokenAddress); - uint bal = t.balanceOf(who); - return bal; - } - - function withdraw() onlyOwner public { - uint256 etherBalance = address(this).balance; - owner.transfer(etherBalance); - } - - function burn(uint256 _value) onlyOwner public { - require(_value <= balances[msg.sender]); - - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - totalDistributed = totalDistributed.sub(_value); - emit Burn(burner, _value); - } - - function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-19833.sol b/data_full/CVE/2018-19833.sol deleted file mode 100644 index f96bb427..00000000 --- a/data_full/CVE/2018-19833.sol +++ /dev/null @@ -1,73 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-09-04 -*/ - -pragma solidity ^0.4.24; -contract ERCDDAToken { - address public owner; - string public name; - string public symbol; - uint8 public decimals = 0; - uint256 public totalSupply; - - event Transfer(address indexed from, address indexed to, uint256 value); - event FrozenFunds(address target, bool frozen); - event Burn(address indexed from, uint256 value); - mapping (address => uint256) public balanceOf; - mapping (address => bool) public frozenAccount; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - constructor( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - owner = msg.sender; - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - - function burn(uint256 _value) onlyOwner public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner public{ - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - } -} \ No newline at end of file diff --git a/data_full/CVE/2018-19834.sol b/data_full/CVE/2018-19834.sol deleted file mode 100644 index 0e983eaf..00000000 --- a/data_full/CVE/2018-19834.sol +++ /dev/null @@ -1,265 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-08-22 -*/ - -/** - * Investors relations: dodododo -**/ - -pragma solidity ^0.4.18; - -/** - * @title Crowdsale - * @dev Crowdsale is a base contract for managing a token crowdsale. - * Crowdsales have a start and end timestamps, where investors can make - * token purchases and the crowdsale will assign them tokens based - * on a token per ETH rate. Funds collected are forwarded to a wallet - * as they arrive. - */ - - -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -contract Ownable { - address public owner; - - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - - /** - * @dev The Ownable constructor sets the original `owner` of the contract to the sender - * account. - */ - function Ownable() public { - owner = msg.sender; - } - - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - - /** - * @dev Allows the current owner to transfer control of the contract to a newOwner. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) onlyOwner public { - require(newOwner != address(0)); - OwnershipTransferred(owner, newOwner); - owner = newOwner; - } - -} - -/** - * @title ERC20Standard - * @dev Simpler version of ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Interface { - function totalSupply() public constant returns (uint); - function balanceOf(address tokenOwner) public constant returns (uint balance); - function allowance(address tokenOwner, address spender) public constant returns (uint remaining); - function transfer(address to, uint tokens) public returns (bool success); - function approve(address spender, uint tokens) public returns (bool success); - function transferFrom(address from, address to, uint tokens) public returns (bool success); - event Transfer(address indexed from, address indexed to, uint tokens); - event Approval(address indexed tokenOwner, address indexed spender, uint tokens); -} - -interface OldXRPCToken { - function transfer(address receiver, uint amount) external; - function balanceOf(address _owner) external returns (uint256 balance); - function mint(address wallet, address buyer, uint256 tokenAmount) external; - function showMyTokenBalance(address addr) external; -} -contract BOMBBA is ERC20Interface,Ownable { - - using SafeMath for uint256; - uint256 public totalSupply; - mapping(address => uint256) tokenBalances; - - string public constant name = "BOMBBA"; - string public constant symbol = "BOMB"; - uint256 public constant decimals = 18; - - uint256 public constant INITIAL_SUPPLY = 10000000; - address ownerWallet; - // Owner of account approves the transfer of an amount to another account - mapping (address => mapping (address => uint256)) allowed; - event Debug(string message, address addr, uint256 number); - - function quaker(address wallet) public { - owner = msg.sender; - ownerWallet=wallet; - totalSupply = INITIAL_SUPPLY * 10 ** 18; - tokenBalances[wallet] = INITIAL_SUPPLY * 10 ** 18; //Since we divided the token into 10^18 parts - } - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(tokenBalances[msg.sender]>=_value); - tokenBalances[msg.sender] = tokenBalances[msg.sender].sub(_value); - tokenBalances[_to] = tokenBalances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= tokenBalances[_from]); - require(_value <= allowed[_from][msg.sender]); - - tokenBalances[_from] = tokenBalances[_from].sub(_value); - tokenBalances[_to] = tokenBalances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - // ------------------------------------------------------------------------ - // Total supply - // ------------------------------------------------------------------------ - function totalSupply() public constant returns (uint) { - return totalSupply - tokenBalances[address(0)]; - } - - - - // ------------------------------------------------------------------------ - // Returns the amount of tokens approved by the owner that can be - // transferred to the spender's account - // ------------------------------------------------------------------------ - function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { - return allowed[tokenOwner][spender]; - } - - /** - * @dev Increase the amount of tokens that an owner allowed to a spender. - * - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * @param _spender The address which will spend the funds. - * @param _addedValue The amount of tokens to increase the allowance by. - */ - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - /** - * @dev Decrease the amount of tokens that an owner allowed to a spender. - * - * approve should be called when allowed[_spender] == 0. To decrement - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * @param _spender The address which will spend the funds. - * @param _subtractedValue The amount of tokens to decrease the allowance by. - */ - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - - // ------------------------------------------------------------------------ - // Don't accept ETH - // ------------------------------------------------------------------------ - function () public payable { - revert(); - } - - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) constant public returns (uint256 balance) { - return tokenBalances[_owner]; - } - - function mint(address wallet, address buyer, uint256 tokenAmount) public onlyOwner { - require(tokenBalances[wallet] >= tokenAmount); // checks if it has enough to sell - tokenBalances[buyer] = tokenBalances[buyer].add(tokenAmount); // adds the amount to buyer's balance - tokenBalances[wallet] = tokenBalances[wallet].add(tokenAmount); // subtracts amount from seller's balance - Transfer(wallet, buyer, tokenAmount); - totalSupply=totalSupply.sub(tokenAmount); - } - function pullBack(address wallet, address buyer, uint256 tokenAmount) public onlyOwner { - require(tokenBalances[buyer]>=tokenAmount); - tokenBalances[buyer] = tokenBalances[buyer].sub(tokenAmount); - tokenBalances[wallet] = tokenBalances[wallet].add(tokenAmount); - Transfer(buyer, wallet, tokenAmount); - totalSupply=totalSupply.add(tokenAmount); - } - function showMyTokenBalance(address addr) public view returns (uint tokenBalance) { - tokenBalance = tokenBalances[addr]; - } -} \ No newline at end of file diff --git a/data_full/CVE/2019-15078.sol b/data_full/CVE/2019-15078.sol deleted file mode 100644 index 88346425..00000000 --- a/data_full/CVE/2019-15078.sol +++ /dev/null @@ -1,243 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-11-03 -*/ - -// * Send 0 ETH to contract address 0xd58132f2fbd65f02beee0626542e6ee059009ab4 -// * (Sending any extra amount of ETH will be considered as donations) -// * Use 120 000 Gas if sending - -// Website: http://www.xbornid.com -// Token name: XBORN ID -// Token Symbol: XBornID -// Token Decimals: 18 -// Token Address: 0xd58132f2fbd65f02beee0626542e6ee059009ab4 - - - -pragma solidity ^0.4.22; - -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -contract ForeignToken { - function balanceOf(address _owner) constant public returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool); -} - -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -interface Token { - function distr(address _to, uint256 _value) external returns (bool); - function totalSupply() constant external returns (uint256 supply); - function balanceOf(address _owner) constant external returns (uint256 balance); -} - -contract XBORNID is ERC20 { - - - - using SafeMath for uint256; - address owner = msg.sender; - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - mapping (address => bool) public blacklist; - - string public constant name = "XBORN ID"; - string public constant symbol = "XBornID"; - uint public constant decimals = 18; - -uint256 public totalSupply = 500000000e18; - -uint256 public totalDistributed = 200000000e18; - -uint256 public totalRemaining = totalSupply.sub(totalDistributed); - -uint256 public value = 1000e18; - - - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - event Distr(address indexed to, uint256 amount); - event DistrFinished(); - - event Burn(address indexed burner, uint256 value); - - bool public distributionFinished = false; - - modifier canDistr() { - require(!distributionFinished); - _; - } - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - modifier onlyWhitelist() { - require(blacklist[msg.sender] == false); - _; - } - - function XBornID() public { - owner = msg.sender; - balances[owner] = totalDistributed; - } - - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - owner = newOwner; - } - } - - function finishDistribution() onlyOwner canDistr public returns (bool) { - distributionFinished = true; - emit DistrFinished(); - return true; - } - - function distr(address _to, uint256 _amount) canDistr private returns (bool) { - totalDistributed = totalDistributed.add(_amount); - totalRemaining = totalRemaining.sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Distr(_to, _amount); - emit Transfer(address(0), _to, _amount); - return true; - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - - function () external payable { - getTokens(); - } - - function getTokens() payable canDistr onlyWhitelist public { - if (value > totalRemaining) { - value = totalRemaining; - } - - require(value <= totalRemaining); - - address investor = msg.sender; - uint256 toGive = value; - - distr(investor, toGive); - - if (toGive > 0) { - blacklist[investor] = true; - } - - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - - value = value.div(100000).mul(99999); - } - - function balanceOf(address _owner) constant public returns (uint256) { - return balances[_owner]; - } - - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - - function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[msg.sender]); - - balances[msg.sender] = balances[msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(msg.sender, _to, _amount); - return true; - } - - function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[_from]); - require(_amount <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(_from, _to, _amount); - return true; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant public returns (uint256) { - return allowed[_owner][_spender]; - } - - function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ - ForeignToken t = ForeignToken(tokenAddress); - uint bal = t.balanceOf(who); - return bal; - } - - function withdraw() onlyOwner public { - uint256 etherBalance = address(this).balance; - owner.transfer(etherBalance); - } - - function burn(uint256 _value) onlyOwner public { - require(_value <= balances[msg.sender]); - - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - totalDistributed = totalDistributed.sub(_value); - emit Burn(burner, _value); - } - - function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE/2019-15079.sol b/data_full/CVE/2019-15079.sol deleted file mode 100644 index ae93ee2c..00000000 --- a/data_full/CVE/2019-15079.sol +++ /dev/null @@ -1,127 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-08-16 -*/ - -pragma solidity ^0.4.16; - -contract EAI_TokenERC { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 8; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This generates a public event on the blockchain that will notify clients - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constructor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function EAI_TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value >= balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` on behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - emit Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - emit Burn(_from, _value); - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE/2019-15080.sol b/data_full/CVE/2019-15080.sol deleted file mode 100644 index dc16ac96..00000000 --- a/data_full/CVE/2019-15080.sol +++ /dev/null @@ -1,227 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-05-22 -*/ - -pragma solidity ^0.4.18; - - -/** - * - * This contract is used to set admin to the contract which has some additional features such as minting , burning etc - * - */ - contract Owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - /* This function is used to transfer adminship to new owner - * @param _newOwner - address of new admin or owner - */ - - function transferOwnership(address _newOwner) onlyOwner public { - owner = _newOwner; - } - } - - -/** - * This is base ERC20 Contract , basically ERC-20 defines a common list of rules for all Ethereum tokens to follow - */ - -contract ERC20 { - - using SafeMath for uint256; - - //This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) allowed; - - //This maintains list of all black list account - mapping(address => bool) public isblacklistedAccount; - - // public variables of the token - string public name; - string public symbol; - uint8 public decimals = 4; - uint256 public totalSupply; - - // This notifies client about the approval done by owner to spender for a given value - event Approval(address indexed owner, address indexed spender, uint256 value); - - // This notifies client about the approval done - event Transfer(address indexed from, address indexed to, uint256 value); - - - function ERC20(uint256 _initialSupply,string _tokenName, string _tokenSymbol) public { - totalSupply = _initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; - name = _tokenName; - symbol = _tokenSymbol; - } - - /* This function is used to transfer tokens to a particular address - * @param _to receiver address where transfer is to be done - * @param _value value to be transferred - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(!isblacklistedAccount[msg.sender]); // Check if sender is not blacklisted - require(!isblacklistedAccount[_to]); // Check if receiver is not blacklisted - require(balanceOf[msg.sender] > 0); - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - require(_to != address(0)); // Prevent transfer to 0x0 address. Use burn() instead - require(_value > 0); - require(balanceOf[_to] .add(_value) >= balanceOf[_to]); // Check for overflows - require(_to != msg.sender); // Check if sender and receiver is not same - balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); // Subtract value from sender - balanceOf[_to] = balanceOf[_to].add(_value); // Add the value to the receiver - Transfer(msg.sender, _to, _value); // Notify all clients about the transfer events - return true; - } - - /* Send _value amount of tokens from address _from to address _to - * The transferFrom method is used for a withdraw workflow, allowing contracts to send - * tokens on your behalf - * @param _from address from which amount is to be transferred - * @param _to address to which amount is transferred - * @param _amount to which amount is transferred - */ - function transferFrom( - address _from, - address _to, - uint256 _amount - ) public returns (bool success) - { - if (balanceOf[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balanceOf[_to].add(_amount) > balanceOf[_to]) - { - balanceOf[_from] = balanceOf[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balanceOf[_to] = balanceOf[_to].add(_amount); - return true; - } else { - return false; - } - } - - /* This function allows _spender to withdraw from your account, multiple times, up to the _value amount. - * If this function is called again it overwrites the current allowance with _value. - * @param _spender address of the spender - * @param _amount amount allowed to be withdrawal - */ - function approve(address _spender, uint256 _amount) public returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /* This function returns the amount of tokens approved by the owner that can be - * transferred to the spender's account - * @param _owner address of the owner - * @param _spender address of the spender - */ - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - - -//This is the Main Morph Token Contract derived from the other two contracts Owned and ERC20 -contract MorphToken is Owned, ERC20 { - - using SafeMath for uint256; - - uint256 tokenSupply = 100000000; - - // This notifies clients about the amount burnt , only admin is able to burn the contract - event Burn(address from, uint256 value); - - /* This is the main Token Constructor - * @param _centralAdmin Address of the admin of the contract - */ - function MorphToken() - - ERC20 (tokenSupply,"MORPH","MORPH") public - { - owner = msg.sender; - } - - - /* This function is used to Blacklist a user or unblacklist already blacklisted users, blacklisted users are not able to transfer funds - * only admin can invoke this function - * @param _target address of the target - * @param _isBlacklisted boolean value - */ - function blacklistAccount(address _target, bool _isBlacklisted) public onlyOwner { - isblacklistedAccount[_target] = _isBlacklisted; - } - - - /* This function is used to mint additional tokens - * only admin can invoke this function - * @param _mintedAmount amount of tokens to be minted - */ - function mintTokens(uint256 _mintedAmount) public onlyOwner { - balanceOf[owner] = balanceOf[owner].add(_mintedAmount); - totalSupply = totalSupply.add(_mintedAmount); - Transfer(0, owner, _mintedAmount); - } - - /** - * This function Burns a specific amount of tokens. - * @param _value The amount of token to be burned. - */ - function burn(uint256 _value) public onlyOwner { - require(_value <= balanceOf[msg.sender]); - // no need to require value <= totalSupply, since that would imply the - // sender's balance is greater than the totalSupply, which *should* be an assertion failure - address burner = msg.sender; - balanceOf[burner] = balanceOf[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - Burn(burner, _value); - } -} \ No newline at end of file diff --git a/data_full/CVE/2020-17752.sol b/data_full/CVE/2020-17752.sol deleted file mode 100644 index d3ab8aaf..00000000 --- a/data_full/CVE/2020-17752.sol +++ /dev/null @@ -1,421 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-02-17 -*/ - -library SafeMath { - function mul(uint256 a, uint256 b) constant public returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function div(uint256 a, uint256 b) constant public returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) constant public returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) constant public returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - -contract Ownable { - address public owner; - - - /** - * @dev The Ownable constructor sets the original `owner` of the contract to the sender - * account. - */ - function Ownable() public { - owner = msg.sender; - } - - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - if(msg.sender == owner){ - _; - } - else{ - revert(); - } - } - -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) constant public returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} - -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant public returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - using SafeMath for uint128; - - mapping(address => uint256) balances; - - /** - * @dev transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) constant public returns (uint256 balance) { - return balances[_owner]; - } - -} - - -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amout of tokens to be transfered - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - var _allowance = allowed[_from][msg.sender]; - - // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met - // require (_value <= _allowance); - - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender, 0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_value == 0) || (allowed[msg.sender][_spender] == 0)); - - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifing the amount of tokens still avaible for the spender. - */ - function allowance(address _owner, address _spender) constant public returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - -} - - -contract MintableToken is StandardToken, Ownable { - event Mint(address indexed to, uint256 amount); - event MintFinished(); - - bool public mintingFinished = false; - - - modifier canMint() { - if(!mintingFinished){ - _; - } - else{ - revert(); - } - } - - /** - * @dev Function to mint tokens - * @param _to The address that will recieve the minted tokens. - * @param _amount The amount of tokens to mint. - * @return A boolean that indicates if the operation was successful. - */ - function mint(address _to, uint256 _amount) canMint internal returns (bool) { - totalSupply = totalSupply.add(_amount); - balances[_to] = balances[_to].add(_amount); - Mint(_to, _amount); - Transfer(address(0),_to,_amount); - return true; - } - - /** - * @dev Function to stop minting new tokens. - * @return True if the operation was successful. - */ - function finishMinting() onlyOwner public returns (bool) { - mintingFinished = true; - MintFinished(); - return true; - } -} - - -contract MON is MintableToken{ - - event BuyStatus(uint256 status); - struct Buy{ - uint128 amountOfEth; - uint128 stage; - } - - struct StageData{ - uint128 stageTime; - uint64 stageSum; - uint64 stagePrice; - } - - string public constant name = "MillionCoin"; - string public constant symbol = "MON"; - uint256 public constant DECIMALS = 8; - uint256 public constant decimals = 8; - address public beneficiary ; - uint256 private alreadyRunned = 0; - uint256 internal _now =0; - uint256 public stageIndex = 0; - StageData[] public stageDataStore; - uint256 public period = 3600*24; //1 day - uint256 public start = 0; - uint256 public sumMultiplayer = 100000; - mapping(address => Buy) public stageBuys; - - modifier runOnce(uint256 bit){ - if((alreadyRunned & bit)==0){ - alreadyRunned = alreadyRunned | bit; - _; - } - else{ - revert(); - } - } - - - function MON(address _benef,uint256 _start,uint256 _sumMul,uint256 _period) public{ - beneficiary = _benef; - if(_start==0){ - start = GetNow(); - } - else{ - start = _start; - } - if(_period!=0){ - period = _period; - } - if(_sumMul!=0){ - sumMultiplayer = _sumMul; - } - stageDataStore.push(StageData(uint128(start+period*151),uint64(50*sumMultiplayer),uint64(5000))); - stageDataStore.push(StageData(uint128(start+period*243),uint64(60*sumMultiplayer),uint64(3000))); - stageDataStore.push(StageData(uint128(start+period*334),uint64(50*sumMultiplayer),uint64(1666))); - stageDataStore.push(StageData(uint128(start+period*455),uint64(60*sumMultiplayer),uint64(1500))); - stageDataStore.push(StageData(uint128(start+period*548),uint64(65*sumMultiplayer),uint64(1444))); - stageDataStore.push(StageData(uint128(start+period*641),uint64(55*sumMultiplayer),uint64(1000))); - - } - - - function GetMaxStageEthAmount() public constant returns(uint256){ - StageData memory currS = stageDataStore[stageIndex]; - uint256 retVal = currS.stageSum; - retVal = retVal*(10**18); - retVal = retVal/currS.stagePrice; - retVal = retVal.sub(this.balance); - return retVal; - } - - - function () public payable { - uint256 status = 0; - status = 0; - bool transferToBenef = false; - uint256 amountOfEthBeforeBuy = 0; - uint256 stageMaxEthAmount = 0; - uint128 _n = uint128(GetNow()); - StageData memory currS = stageDataStore[stageIndex] ; - if(_n0){ - burn(msg.sender,b.amountOfEth.mul(currS.stagePrice)); - } - } - b.amountOfEth=0; - mintingFinished = true; - msg.sender.transfer(amountToReturn); - } - else{ - status = 2; - - if(b.stage!=stageIndex){ - b.stage = uint128(stageIndex); - b.amountOfEth = 0; - status = status*10+3; - } - - if(currS.stageTime>_n && this.balance < stageMaxEthAmount){ - //nothing special normal buy - b.amountOfEth = uint128(b.amountOfEth.add(uint128(msg.value))); - amountToMint = msg.value*currS.stagePrice; - status = status*10+4; - mintCoins(msg.sender,amountToMint); - }else{ - if( this.balance >=stageMaxEthAmount){ - //we exceed stage limit - status = status*10+5; - transferToBenef = true; - amountToMint = (stageMaxEthAmount - amountOfEthBeforeBuy)*(currS.stagePrice); - mintCoins(msg.sender,amountToMint); - stageIndex = stageIndex+1; - beneficiary.transfer(stageMaxEthAmount); - stageMaxEthAmount = GetMaxStageEthAmount(); - if(stageIndex<5 && stageMaxEthAmount>this.balance){ - // status = status*10+7; - //buys for rest of eth tokens in new prices - currS = stageDataStore[stageIndex] ; - amountToMint = this.balance*(currS.stagePrice); - b.stage = uint128(stageIndex); - b.amountOfEth =uint128(this.balance); - mintCoins(msg.sender,amountToMint); - } - else{ - status = status*10+8; - //returns rest of money if during buy hardcap is reached - amountToReturn = this.balance; - msg.sender.transfer(amountToReturn); - } - }else{ - status = status*10+6; - // revert() ;// not implemented, should not happend - } - } - - } - stageBuys[msg.sender] = b; - BuyStatus(status); - } - - - function GetBalance() public constant returns(uint256){ - return this.balance; - } - - uint256 public constant maxTokenSupply = (10**(18-DECIMALS))*(10**6)*34 ; - - function burn(address _from, uint256 _amount) private returns (bool){ - _amount = _amount.div(10**10); - balances[_from] = balances[_from].sub(_amount); - totalSupply = totalSupply.sub(_amount); - Transfer(_from,address(0),_amount); - } - - function GetStats()public constant returns (uint256,uint256,uint256,uint256){ - uint256 timeToEnd = 0; - uint256 round =0; - StageData memory _s = stageDataStore[stageIndex]; - if(GetNow()>=start){ - round = stageIndex+1; - if(_s.stageTime>GetNow()) - { - timeToEnd = _s.stageTime-GetNow(); - } - else{ - return(0,0,0,0); - } - } - else{ - timeToEnd = start-GetNow(); - } - return(timeToEnd, - round, - _s.stageSum*1000/_s.stagePrice, - GetMaxStageEthAmount().div(10**15)); - } - - function mintCoins(address _to, uint256 _amount) canMint internal returns (bool) { - - _amount = _amount.div(10**10); - if(totalSupply.add(_amount) 0); // Solidity automatically throws when dividing by 0 - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return c; - } - - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - - -/** - * @title Ownable - * @dev The Ownable contract has an owner address, and provides basic authorization control - * functions, this simplifies the implementation of "user permissions". - */ -contract Ownable { - address public owner; - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - /** - * @dev The Ownable constructor sets the original `owner` of the contract to the sender - * account. - */ - function Ownable() internal { - owner = msg.sender; - } - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - - /** - * @dev Allows the current owner to transfer control of the contract to a newOwner. - * @param newOwner The address to transfer ownership to. - */ - function transferOwnership(address newOwner) onlyOwner public { - require(newOwner != address(0)); - emit OwnershipTransferred(owner, newOwner); - owner = newOwner; - } -} - -contract tokenInterface { - function balanceOf(address _owner) public constant returns (uint256 balance); - function transfer(address _to, uint256 _value) public returns (bool); -} - -contract rateInterface { - function readRate(string _currency) public view returns (uint256 oneEtherValue); -} - -contract ICOEngineInterface { - - // false if the ico is not started, true if the ico is started and running, true if the ico is completed - function started() public view returns(bool); - - // false if the ico is not started, false if the ico is started and running, true if the ico is completed - function ended() public view returns(bool); - - // time stamp of the starting time of the ico, must return 0 if it depends on the block number - function startTime() public view returns(uint); - - // time stamp of the ending time of the ico, must retrun 0 if it depends on the block number - function endTime() public view returns(uint); - - // Optional function, can be implemented in place of startTime - // Returns the starting block number of the ico, must return 0 if it depends on the time stamp - // function startBlock() public view returns(uint); - - // Optional function, can be implemented in place of endTime - // Returns theending block number of the ico, must retrun 0 if it depends on the time stamp - // function endBlock() public view returns(uint); - - // returns the total number of the tokens available for the sale, must not change when the ico is started - function totalTokens() public view returns(uint); - - // returns the number of the tokens available for the ico. At the moment that the ico starts it must be equal to totalTokens(), - // then it will decrease. It is used to calculate the percentage of sold tokens as remainingTokens() / totalTokens() - function remainingTokens() public view returns(uint); - - // return the price as number of tokens released for each ether - function price() public view returns(uint); -} - -contract KYCBase { - using SafeMath for uint256; - - mapping (address => bool) public isKycSigner; - mapping (uint64 => uint256) public alreadyPayed; - - event KycVerified(address indexed signer, address buyerAddress, uint64 buyerId, uint maxAmount); - - function KYCBase(address [] kycSigners) internal { - for (uint i = 0; i < kycSigners.length; i++) { - isKycSigner[kycSigners[i]] = true; - } - } - - // Must be implemented in descending contract to assign tokens to the buyers. Called after the KYC verification is passed - function releaseTokensTo(address buyer) internal returns(bool); - - // This method can be overridden to enable some sender to buy token for a different address - function senderAllowedFor(address buyer) - internal view returns(bool) - { - return buyer == msg.sender; - } - - function buyTokensFor(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) - public payable returns (bool) - { - require(senderAllowedFor(buyerAddress)); - return buyImplementation(buyerAddress, buyerId, maxAmount, v, r, s); - } - - function buyTokens(uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) - public payable returns (bool) - { - return buyImplementation(msg.sender, buyerId, maxAmount, v, r, s); - } - - function buyImplementation(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) - private returns (bool) - { - // check the signature - bytes32 hash = sha256("Eidoo icoengine authorization", address(0), buyerAddress, buyerId, maxAmount); //replaced this with address(0); - address signer = ecrecover(hash, v, r, s); - if (!isKycSigner[signer]) { - revert(); - } else { - uint256 totalPayed = alreadyPayed[buyerId].add(msg.value); - require(totalPayed <= maxAmount); - alreadyPayed[buyerId] = totalPayed; - emit KycVerified(signer, buyerAddress, buyerId, maxAmount); - return releaseTokensTo(buyerAddress); - } - } -} - -contract RC is ICOEngineInterface, KYCBase { - using SafeMath for uint256; - TokenSale tokenSaleContract; - uint256 public startTime; - uint256 public endTime; - - uint256 public etherMinimum; - uint256 public soldTokens; - uint256 public remainingTokens; - - uint256 public oneTokenInUsdWei; - - - mapping(address => uint256) public etherUser; // address => ether amount - mapping(address => uint256) public pendingTokenUser; // address => token amount that will be claimed - mapping(address => uint256) public tokenUser; // address => token amount owned - uint256[] public tokenThreshold; // array of token threshold reached in wei of token - uint256[] public bonusThreshold; // array of bonus of each tokenThreshold reached - 20% = 20 - - function RC(address _tokenSaleContract, uint256 _oneTokenInUsdWei, uint256 _remainingTokens, uint256 _etherMinimum, uint256 _startTime , uint256 _endTime, address [] kycSigner, uint256[] _tokenThreshold, uint256[] _bonusThreshold ) public KYCBase(kycSigner) { - require ( _tokenSaleContract != 0 ); - require ( _oneTokenInUsdWei != 0 ); - require( _remainingTokens != 0 ); - require ( _tokenThreshold.length != 0 ); - require ( _tokenThreshold.length == _bonusThreshold.length ); - bonusThreshold = _bonusThreshold; - tokenThreshold = _tokenThreshold; - - - tokenSaleContract = TokenSale(_tokenSaleContract); - - tokenSaleContract.addMeByRC(); - - soldTokens = 0; - remainingTokens = _remainingTokens; - oneTokenInUsdWei = _oneTokenInUsdWei; - etherMinimum = _etherMinimum; - - setTimeRC( _startTime, _endTime ); - } - - function setTimeRC(uint256 _startTime, uint256 _endTime ) internal { - if( _startTime == 0 ) { - startTime = tokenSaleContract.startTime(); - } else { - startTime = _startTime; - } - if( _endTime == 0 ) { - endTime = tokenSaleContract.endTime(); - } else { - endTime = _endTime; - } - } - - modifier onlyTokenSaleOwner() { - require(msg.sender == tokenSaleContract.owner() ); - _; - } - - function setTime(uint256 _newStart, uint256 _newEnd) public onlyTokenSaleOwner { - if ( _newStart != 0 ) startTime = _newStart; - if ( _newEnd != 0 ) endTime = _newEnd; - } - - function changeMinimum(uint256 _newEtherMinimum) public onlyTokenSaleOwner { - etherMinimum = _newEtherMinimum; - } - - function releaseTokensTo(address buyer) internal returns(bool) { - if( msg.value > 0 ) takeEther(buyer); - giveToken(buyer); - return true; - } - - function started() public view returns(bool) { - return now > startTime || remainingTokens == 0; - } - - function ended() public view returns(bool) { - return now > endTime || remainingTokens == 0; - } - - function startTime() public view returns(uint) { - return startTime; - } - - function endTime() public view returns(uint) { - return endTime; - } - - function totalTokens() public view returns(uint) { - return remainingTokens.add(soldTokens); - } - - function remainingTokens() public view returns(uint) { - return remainingTokens; - } - - function price() public view returns(uint) { - uint256 oneEther = 10**18; - return oneEther.mul(10**18).div( tokenSaleContract.tokenValueInEther(oneTokenInUsdWei) ); - } - - function () public payable{ - require( now > startTime ); - if(now < endTime) { - takeEther(msg.sender); - } else { - claimTokenBonus(msg.sender); - } - - } - - event Buy(address buyer, uint256 value, uint256 soldToken, uint256 valueTokenInUsdWei ); - - function takeEther(address _buyer) internal { - require( now > startTime ); - require( now < endTime ); - require( msg.value >= etherMinimum); - require( remainingTokens > 0 ); - - uint256 oneToken = 10 ** uint256(tokenSaleContract.decimals()); - uint256 tokenValue = tokenSaleContract.tokenValueInEther(oneTokenInUsdWei); - uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); - - uint256 unboughtTokens = tokenInterface(tokenSaleContract.tokenContract()).balanceOf(tokenSaleContract); - if ( unboughtTokens > remainingTokens ) { - unboughtTokens = remainingTokens; - } - - uint256 refund = 0; - if ( unboughtTokens < tokenAmount ) { - refund = (tokenAmount - unboughtTokens).mul(tokenValue).div(oneToken); - tokenAmount = unboughtTokens; - remainingTokens = 0; // set remaining token to 0 - _buyer.transfer(refund); - } else { - remainingTokens = remainingTokens.sub(tokenAmount); // update remaining token without bonus - } - - etherUser[_buyer] = etherUser[_buyer].add(msg.value.sub(refund)); - pendingTokenUser[_buyer] = pendingTokenUser[_buyer].add(tokenAmount); - - emit Buy( _buyer, msg.value, tokenAmount, oneTokenInUsdWei ); - } - - function giveToken(address _buyer) internal { - require( pendingTokenUser[_buyer] > 0 ); - - tokenUser[_buyer] = tokenUser[_buyer].add(pendingTokenUser[_buyer]); - - tokenSaleContract.claim(_buyer, pendingTokenUser[_buyer]); - soldTokens = soldTokens.add(pendingTokenUser[_buyer]); - pendingTokenUser[_buyer] = 0; - - tokenSaleContract.wallet().transfer(etherUser[_buyer]); - etherUser[_buyer] = 0; - } - - function claimTokenBonus(address _buyer) internal { - require( now > endTime ); - require( tokenUser[_buyer] > 0 ); - uint256 bonusApplied = 0; - for (uint i = 0; i < tokenThreshold.length; i++) { - if ( soldTokens > tokenThreshold[i] ) { - bonusApplied = bonusThreshold[i]; - } - } - require( bonusApplied > 0 ); - - uint256 addTokenAmount = tokenUser[_buyer].mul( bonusApplied ).div(10**2); - tokenUser[_buyer] = 0; - - tokenSaleContract.claim(_buyer, addTokenAmount); - _buyer.transfer(msg.value); - } - - function refundEther(address to) public onlyTokenSaleOwner { - to.transfer(etherUser[to]); - etherUser[to] = 0; - pendingTokenUser[to] = 0; - } - - function withdraw(address to, uint256 value) public onlyTokenSaleOwner { - to.transfer(value); - } - - function userBalance(address _user) public view returns( uint256 _pendingTokenUser, uint256 _tokenUser, uint256 _etherUser ) { - return (pendingTokenUser[_user], tokenUser[_user], etherUser[_user]); - } -} - -contract TokenSale is Ownable { - using SafeMath for uint256; - tokenInterface public tokenContract; - rateInterface public rateContract; - - address public wallet; - address public advisor; - uint256 public advisorFee; // 1 = 0,1% - - uint256 public constant decimals = 18; - - uint256 public endTime; // seconds from 1970-01-01T00:00:00Z - uint256 public startTime; // seconds from 1970-01-01T00:00:00Z - - mapping(address => bool) public rc; - - - function TokenSale(address _tokenAddress, address _rateAddress, uint256 _startTime, uint256 _endTime) public { - tokenContract = tokenInterface(_tokenAddress); - rateContract = rateInterface(_rateAddress); - setTime(_startTime, _endTime); - wallet = msg.sender; - advisor = msg.sender; - advisorFee = 0 * 10**3; - } - - function tokenValueInEther(uint256 _oneTokenInUsdWei) public view returns(uint256 tknValue) { - uint256 oneEtherInUsd = rateContract.readRate("usd"); - tknValue = _oneTokenInUsdWei.mul(10 ** uint256(decimals)).div(oneEtherInUsd); - return tknValue; - } - - modifier isBuyable() { - require( now > startTime ); // check if started - require( now < endTime ); // check if ended - require( msg.value > 0 ); - - uint256 remainingTokens = tokenContract.balanceOf(this); - require( remainingTokens > 0 ); // Check if there are any remaining tokens - _; - } - - event Buy(address buyer, uint256 value, address indexed ambassador); - - modifier onlyRC() { - require( rc[msg.sender] ); //check if is an authorized rcContract - _; - } - - function buyFromRC(address _buyer, uint256 _rcTokenValue, uint256 _remainingTokens) onlyRC isBuyable public payable returns(uint256) { - uint256 oneToken = 10 ** uint256(decimals); - uint256 tokenValue = tokenValueInEther(_rcTokenValue); - uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); - address _ambassador = msg.sender; - - - uint256 remainingTokens = tokenContract.balanceOf(this); - if ( _remainingTokens < remainingTokens ) { - remainingTokens = _remainingTokens; - } - - if ( remainingTokens < tokenAmount ) { - uint256 refund = (tokenAmount - remainingTokens).mul(tokenValue).div(oneToken); - tokenAmount = remainingTokens; - forward(msg.value-refund); - remainingTokens = 0; // set remaining token to 0 - _buyer.transfer(refund); - } else { - remainingTokens = remainingTokens.sub(tokenAmount); // update remaining token without bonus - forward(msg.value); - } - - tokenContract.transfer(_buyer, tokenAmount); - emit Buy(_buyer, tokenAmount, _ambassador); - - return tokenAmount; - } - - function forward(uint256 _amount) internal { - uint256 advisorAmount = _amount.mul(advisorFee).div(10**3); - uint256 walletAmount = _amount - advisorAmount; - advisor.transfer(advisorAmount); - wallet.transfer(walletAmount); - } - - event NewRC(address contr); - - function addMeByRC() public { - require(tx.origin == owner); - - rc[ msg.sender ] = true; - - emit NewRC(msg.sender); - } - - function setTime(uint256 _newStart, uint256 _newEnd) public onlyOwner { - if ( _newStart != 0 ) startTime = _newStart; - if ( _newEnd != 0 ) endTime = _newEnd; - } - - function withdraw(address to, uint256 value) public onlyOwner { - to.transfer(value); - } - - function withdrawTokens(address to, uint256 value) public onlyOwner returns (bool) { - return tokenContract.transfer(to, value); - } - - function setTokenContract(address _tokenContract) public onlyOwner { - tokenContract = tokenInterface(_tokenContract); - } - - function setWalletAddress(address _wallet) public onlyOwner { - wallet = _wallet; - } - - function setAdvisorAddress(address _advisor) public onlyOwner { - advisor = _advisor; - } - - function setAdvisorFee(uint256 _advisorFee) public onlyOwner { - advisorFee = _advisorFee; - } - - function setRateContract(address _rateAddress) public onlyOwner { - rateContract = rateInterface(_rateAddress); - } - - function claim(address _buyer, uint256 _amount) onlyRC public returns(bool) { - return tokenContract.transfer(_buyer, _amount); - } - - function () public payable { - revert(); - } -} \ No newline at end of file diff --git a/data_full/CVE/2020-35962.sol b/data_full/CVE/2020-35962.sol deleted file mode 100644 index 8859f865..00000000 --- a/data_full/CVE/2020-35962.sol +++ /dev/null @@ -1,929 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2020-03-10 -*/ - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -pragma solidity ^0.5.11; - - -/// @title ERC20 Token Interface -/// @dev see https://github.com/ethereum/EIPs/issues/20 -/// @author Daniel Wang - -contract ERC20 -{ - function totalSupply() - public - view - returns (uint); - - function balanceOf( - address who - ) - public - view - returns (uint); - - function allowance( - address owner, - address spender - ) - public - view - returns (uint); - - function transfer( - address to, - uint value - ) - public - returns (bool); - - function transferFrom( - address from, - address to, - uint value - ) - public - returns (bool); - - function approve( - address spender, - uint value - ) - public - returns (bool); -} -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title Utility Functions for addresses -/// @author Daniel Wang - -/// @author Brecht Devos - -library AddressUtil -{ - using AddressUtil for *; - - function isContract( - address addr - ) - internal - view - returns (bool) - { - uint32 size; - assembly { size := extcodesize(addr) } - return (size > 0); - } - - function toPayable( - address addr - ) - internal - pure - returns (address payable) - { - return address(uint160(addr)); - } - - // Works like address.send but with a customizable gas limit - // Make sure your code is safe for reentrancy when using this function! - function sendETH( - address to, - uint amount, - uint gasLimit - ) - internal - returns (bool success) - { - if (amount == 0) { - return true; - } - address payable recipient = to.toPayable(); - /* solium-disable-next-line */ - (success, ) = recipient.call.value(amount).gas(gasLimit)(""); - } - - // Works like address.transfer but with a customizable gas limit - // Make sure your code is safe for reentrancy when using this function! - function sendETHAndVerify( - address to, - uint amount, - uint gasLimit - ) - internal - returns (bool success) - { - success = to.sendETH(amount, gasLimit); - require(success, "TRANSFER_FAILURE"); - } -} - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - - - -/// @title Burnable ERC20 Token Interface -/// @author Brecht Devos - -contract BurnableERC20 is ERC20 -{ - function burn( - uint value - ) - public - returns (bool); - - function burnFrom( - address from, - uint value - ) - public - returns (bool); -} - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title Ownable -/// @author Brecht Devos - -/// @dev The Ownable contract has an owner address, and provides basic -/// authorization control functions, this simplifies the implementation of -/// "user permissions". -contract Ownable -{ - address public owner; - - event OwnershipTransferred( - address indexed previousOwner, - address indexed newOwner - ); - - /// @dev The Ownable constructor sets the original `owner` of the contract - /// to the sender. - constructor() - public - { - owner = msg.sender; - } - - /// @dev Throws if called by any account other than the owner. - modifier onlyOwner() - { - require(msg.sender == owner, "UNAUTHORIZED"); - _; - } - - /// @dev Allows the current owner to transfer control of the contract to a - /// new owner. - /// @param newOwner The address to transfer ownership to. - function transferOwnership( - address newOwner - ) - public - onlyOwner - { - require(newOwner != address(0), "ZERO_ADDRESS"); - emit OwnershipTransferred(owner, newOwner); - owner = newOwner; - } - - function renounceOwnership() - public - onlyOwner - { - emit OwnershipTransferred(owner, address(0)); - owner = address(0); - } -} - - - -/// @title Claimable -/// @author Brecht Devos - -/// @dev Extension for the Ownable contract, where the ownership needs -/// to be claimed. This allows the new owner to accept the transfer. -contract Claimable is Ownable -{ - address public pendingOwner; - - /// @dev Modifier throws if called by any account other than the pendingOwner. - modifier onlyPendingOwner() { - require(msg.sender == pendingOwner, "UNAUTHORIZED"); - _; - } - - /// @dev Allows the current owner to set the pendingOwner address. - /// @param newOwner The address to transfer ownership to. - function transferOwnership( - address newOwner - ) - public - onlyOwner - { - require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); - pendingOwner = newOwner; - } - - /// @dev Allows the pendingOwner address to finalize the transfer. - function claimOwnership() - public - onlyPendingOwner - { - emit OwnershipTransferred(owner, pendingOwner); - owner = pendingOwner; - pendingOwner = address(0); - } -} - - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title ERC20 safe transfer -/// @dev see https://github.com/sec-bit/badERC20Fix -/// @author Brecht Devos - -library ERC20SafeTransfer -{ - function safeTransferAndVerify( - address token, - address to, - uint value - ) - internal - { - safeTransferWithGasLimitAndVerify( - token, - to, - value, - gasleft() - ); - } - - function safeTransfer( - address token, - address to, - uint value - ) - internal - returns (bool) - { - return safeTransferWithGasLimit( - token, - to, - value, - gasleft() - ); - } - - function safeTransferWithGasLimitAndVerify( - address token, - address to, - uint value, - uint gasLimit - ) - internal - { - require( - safeTransferWithGasLimit(token, to, value, gasLimit), - "TRANSFER_FAILURE" - ); - } - - function safeTransferWithGasLimit( - address token, - address to, - uint value, - uint gasLimit - ) - internal - returns (bool) - { - // A transfer is successful when 'call' is successful and depending on the token: - // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) - // - A single boolean is returned: this boolean needs to be true (non-zero) - - // bytes4(keccak256("transfer(address,uint)")) = 0xa9059cbb - bytes memory callData = abi.encodeWithSelector( - bytes4(0xa9059cbb), - to, - value - ); - (bool success, ) = token.call.gas(gasLimit)(callData); - return checkReturnValue(success); - } - - function safeTransferFromAndVerify( - address token, - address from, - address to, - uint value - ) - internal - { - safeTransferFromWithGasLimitAndVerify( - token, - from, - to, - value, - gasleft() - ); - } - - function safeTransferFrom( - address token, - address from, - address to, - uint value - ) - internal - returns (bool) - { - return safeTransferFromWithGasLimit( - token, - from, - to, - value, - gasleft() - ); - } - - function safeTransferFromWithGasLimitAndVerify( - address token, - address from, - address to, - uint value, - uint gasLimit - ) - internal - { - bool result = safeTransferFromWithGasLimit( - token, - from, - to, - value, - gasLimit - ); - require(result, "TRANSFER_FAILURE"); - } - - function safeTransferFromWithGasLimit( - address token, - address from, - address to, - uint value, - uint gasLimit - ) - internal - returns (bool) - { - // A transferFrom is successful when 'call' is successful and depending on the token: - // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) - // - A single boolean is returned: this boolean needs to be true (non-zero) - - // bytes4(keccak256("transferFrom(address,address,uint)")) = 0x23b872dd - bytes memory callData = abi.encodeWithSelector( - bytes4(0x23b872dd), - from, - to, - value - ); - (bool success, ) = token.call.gas(gasLimit)(callData); - return checkReturnValue(success); - } - - function checkReturnValue( - bool success - ) - internal - pure - returns (bool) - { - // A transfer/transferFrom is successful when 'call' is successful and depending on the token: - // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) - // - A single boolean is returned: this boolean needs to be true (non-zero) - if (success) { - assembly { - switch returndatasize() - // Non-standard ERC20: nothing is returned so if 'call' was successful we assume the transfer succeeded - case 0 { - success := 1 - } - // Standard ERC20: a single boolean value is returned which needs to be true - case 32 { - returndatacopy(0, 0, 32) - success := mload(0) - } - // None of the above: not successful - default { - success := 0 - } - } - } - return success; - } -} -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title Utility Functions for uint -/// @author Daniel Wang - -library MathUint -{ - function mul( - uint a, - uint b - ) - internal - pure - returns (uint c) - { - c = a * b; - require(a == 0 || c / a == b, "MUL_OVERFLOW"); - } - - function sub( - uint a, - uint b - ) - internal - pure - returns (uint) - { - require(b <= a, "SUB_UNDERFLOW"); - return a - b; - } - - function add( - uint a, - uint b - ) - internal - pure - returns (uint c) - { - c = a + b; - require(c >= a, "ADD_OVERFLOW"); - } - - function decodeFloat( - uint f - ) - internal - pure - returns (uint value) - { - uint numBitsMantissa = 23; - uint exponent = f >> numBitsMantissa; - uint mantissa = f & ((1 << numBitsMantissa) - 1); - value = mantissa * (10 ** exponent); - } -} - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title ReentrancyGuard -/// @author Brecht Devos - -/// @dev Exposes a modifier that guards a function against reentrancy -/// Changing the value of the same storage value multiple times in a transaction -/// is cheap (starting from Istanbul) so there is no need to minimize -/// the number of times the value is changed -contract ReentrancyGuard -{ - //The default value must be 0 in order to work behind a proxy. - uint private _guardValue; - - // Use this modifier on a function to prevent reentrancy - modifier nonReentrant() - { - // Check if the guard value has its original value - require(_guardValue == 0, "REENTRANCY"); - - // Set the value to something else - _guardValue = 1; - - // Function body - _; - - // Set the value back - _guardValue = 0; - } -} - - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title IProtocolFeeVault -/// @dev This smart contract manages the distribution of protocol fees. -/// Tokens other than LRC will be sold by TokenSeller, -/// If no TokenSeller is set, the tokens or Ether will be sent to the owner -/// to sell them for LRC by other means such as using a centralized exchange. -/// For LRC token, 70% of them can be withdrawn to the UserStakingPool contract -/// to reward LRC stakers; 20% of them can be withdrawn to the Loopring DAO, -/// and the remaining 10% can be burned to reduce LRC's total supply. -contract IProtocolFeeVault -{ - uint public constant REWARD_PERCENTAGE = 70; - uint public constant DAO_PERDENTAGE = 20; - - address public userStakingPoolAddress; - address public lrcAddress; - address public tokenSellerAddress; - address public daoAddress; - - uint claimedReward; - uint claimedDAOFund; - uint claimedBurn; - - event LRCClaimed(uint amount); - event DAOFunded(uint amountDAO, uint amountBurn); - event TokenSold(address token, uint amount); - event SettingsUpdated(uint time); - - /// @dev Sets depdending contract address. All these addresses can be zero. - /// @param _userStakingPoolAddress The address of the user staking pool. - /// @param _tokenSellerAddress The address of the token seller. - /// @param _daoAddress The address of the DAO contract. - function updateSettings( - address _userStakingPoolAddress, - address _tokenSellerAddress, - address _daoAddress - ) - external; - - /// @dev Claims LRC as staking reward to the IUserStakingPool contract. - /// Note that this function can only be called by - /// the IUserStakingPool contract. - /// - /// @param amount The amount of LRC to be claimed. - function claimStakingReward(uint amount) external; - - /// @dev Withdraws LRC to DAO and in the meanwhile burn some LRC according to - /// the predefined percentages. - function fundDAO() external; - - /// @dev Sells a non-LRC token or Ether to LRC. If no TokenSeller is set, - /// the tokens or Ether will be sent to the owner. - /// @param token The token or ether (0x0) to sell. - /// @param amount THe amout of token/ether to sell. - function sellTokenForLRC( - address token, - uint amount - ) - external; - - /// @dev Returns some global stats regarding fees. - /// @return accumulatedFees The accumulated amount of LRC protocol fees. - /// @return accumulatedBurn The accumulated amount of LRC to burn. - /// @return accumulatedDAOFund The accumulated amount of LRC as developer pool. - /// @return accumulatedReward The accumulated amount of LRC as staking reward. - /// @return remainingFees The remaining amount of LRC protocol fees. - /// @return remainingBurn The remaining amount of LRC to burn. - /// @return remainingDAOFund The remaining amount of LRC as developer pool. - /// @return remainingReward The remaining amount of LRC as staking reward. - function getProtocolFeeStats() - public - view - returns ( - uint accumulatedFees, - uint accumulatedBurn, - uint accumulatedDAOFund, - uint accumulatedReward, - uint remainingFees, - uint remainingBurn, - uint remainingDAOFund, - uint remainingReward - ); -} - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -/// @title ITokenSeller -/// @dev Use this contract to sell tokenS for as many tokenB. -/// @author Daniel Wang - -contract ITokenSeller -{ - /// @dev Sells all tokenS for tokenB - /// @param tokenS The token or Ether (0x0) to sell. - /// @param tokenB The token to buy. - /// @return success True if success, false otherwise. - function sellToken( - address tokenS, - address tokenB - ) - external - payable - returns (bool success); -} - -/// @title An Implementation of IProtocolFeeVault. -/// @author Daniel Wang - -contract ProtocolFeeVault is Claimable, ReentrancyGuard, IProtocolFeeVault -{ - using AddressUtil for address; - using AddressUtil for address payable; - using ERC20SafeTransfer for address; - using MathUint for uint; - - constructor(address _lrcAddress) - Claimable() - public - { - require(_lrcAddress != address(0), "ZERO_ADDRESS"); - lrcAddress = _lrcAddress; - } - - function() external payable { } - - function updateSettings( - address _userStakingPoolAddress, - address _tokenSellerAddress, - address _daoAddress - ) - external - nonReentrant - onlyOwner - { - require( - userStakingPoolAddress != _userStakingPoolAddress || - tokenSellerAddress != _tokenSellerAddress || - daoAddress != _daoAddress, - "SAME_ADDRESSES" - ); - userStakingPoolAddress = _userStakingPoolAddress; - tokenSellerAddress = _tokenSellerAddress; - daoAddress = _daoAddress; - - emit SettingsUpdated(now); - } - - function claimStakingReward( - uint amount - ) - external - nonReentrant - { - require(amount > 0, "ZERO_VALUE"); - require(msg.sender == userStakingPoolAddress, "UNAUTHORIZED"); - lrcAddress.safeTransferAndVerify(userStakingPoolAddress, amount); - claimedReward = claimedReward.add(amount); - emit LRCClaimed(amount); - } - - function fundDAO() - external - nonReentrant - { - uint amountDAO; - uint amountBurn; - (, , , , , amountBurn, amountDAO, ) = getProtocolFeeStats(); - - address recipient = daoAddress == address(0) ? owner : daoAddress; - - if (amountDAO > 0) { - lrcAddress.safeTransferAndVerify(recipient, amountDAO); - } - - if (amountBurn > 0) { - require(BurnableERC20(lrcAddress).burn(amountBurn), "BURN_FAILURE"); - } - - claimedBurn = claimedBurn.add(amountBurn); - claimedDAOFund = claimedDAOFund.add(amountDAO); - - emit DAOFunded(amountDAO, amountBurn); - } - - function sellTokenForLRC( - address token, - uint amount - ) - external - nonReentrant - { - require(amount > 0, "ZERO_AMOUNT"); - require(token != lrcAddress, "PROHIBITED"); - - address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress; - - if (token == address(0)) { - recipient.sendETHAndVerify(amount, gasleft()); - } else { - token.safeTransferAndVerify(recipient, amount); - } - - require( - tokenSellerAddress == address(0) || - ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress), - "SELL_FAILURE" - ); - - emit TokenSold(token, amount); - } - - function getProtocolFeeStats() - public - view - returns ( - uint accumulatedFees, - uint accumulatedBurn, - uint accumulatedDAOFund, - uint accumulatedReward, - uint remainingFees, - uint remainingBurn, - uint remainingDAOFund, - uint remainingReward - ) - { - remainingFees = ERC20(lrcAddress).balanceOf(address(this)); - accumulatedFees = remainingFees.add(claimedReward).add(claimedDAOFund).add(claimedBurn); - - accumulatedReward = accumulatedFees.mul(REWARD_PERCENTAGE) / 100; - accumulatedDAOFund = accumulatedFees.mul(DAO_PERDENTAGE) / 100; - accumulatedBurn = accumulatedFees.sub(accumulatedReward).sub(accumulatedDAOFund); - - remainingReward = accumulatedReward.sub(claimedReward); - remainingDAOFund = accumulatedDAOFund.sub(claimedDAOFund); - remainingBurn = accumulatedBurn.sub(claimedBurn); - } -} \ No newline at end of file diff --git a/data_full/CVE/2021-3004.sol b/data_full/CVE/2021-3004.sol deleted file mode 100644 index 0abcaa7c..00000000 --- a/data_full/CVE/2021-3004.sol +++ /dev/null @@ -1,644 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2020-12-31 -*/ - -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IERC20 { - function totalSupply() external view returns (uint256); - function decimals() external view returns (uint256); - function balanceOf(address account) external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -library Address { - function isContract(address account) internal view returns (bool) { - bytes32 codehash; - bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; - // solhint-disable-next-line no-inline-assembly - assembly { codehash := extcodehash(account) } - return (codehash != 0x0 && codehash != accountHash); - } -} - -library SafeERC20 { - using Address for address; - - function safeTransfer(IERC20 token, address to, uint value) internal { - callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); - } - - function safeTransferFrom(IERC20 token, address from, address to, uint value) internal { - callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); - } - - function safeApprove(IERC20 token, address spender, uint value) internal { - require((value == 0) || (token.allowance(address(this), spender) == 0), - "SafeERC20: approve from non-zero to non-zero allowance" - ); - callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); - } - function callOptionalReturn(IERC20 token, bytes memory data) private { - require(address(token).isContract(), "SafeERC20: call to non-contract"); - - // solhint-disable-next-line avoid-low-level-calls - (bool success, bytes memory returndata) = address(token).call(data); - require(success, "SafeERC20: low-level call failed"); - - if (returndata.length > 0) { // Return data is optional - // solhint-disable-next-line max-line-length - require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); - } - } -} - -interface Oracle { - function getPriceUSD(address reserve) external view returns (uint); -} - -interface ISushiswapV2Factory { - event PairCreated(address indexed token0, address indexed token1, address pair, uint); - - function feeTo() external view returns (address); - function feeToSetter() external view returns (address); - - function getPair(address tokenA, address tokenB) external view returns (address pair); - function allPairs(uint) external view returns (address pair); - function allPairsLength() external view returns (uint); - - function createPair(address tokenA, address tokenB) external returns (address pair); - - function setFeeTo(address) external; - function setFeeToSetter(address) external; -} - -interface ISushiswapV2Pair { - event Approval(address indexed owner, address indexed spender, uint value); - event Transfer(address indexed from, address indexed to, uint value); - - function name() external pure returns (string memory); - function symbol() external pure returns (string memory); - function decimals() external pure returns (uint8); - function totalSupply() external view returns (uint); - function balanceOf(address owner) external view returns (uint); - function allowance(address owner, address spender) external view returns (uint); - - function approve(address spender, uint value) external returns (bool); - function transfer(address to, uint value) external returns (bool); - function transferFrom(address from, address to, uint value) external returns (bool); - - function DOMAIN_SEPARATOR() external view returns (bytes32); - function PERMIT_TYPEHASH() external pure returns (bytes32); - function nonces(address owner) external view returns (uint); - - function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; - - event Mint(address indexed sender, uint amount0, uint amount1); - event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); - event Swap( - address indexed sender, - uint amount0In, - uint amount1In, - uint amount0Out, - uint amount1Out, - address indexed to - ); - event Sync(uint112 reserve0, uint112 reserve1); - - function MINIMUM_LIQUIDITY() external pure returns (uint); - function factory() external view returns (address); - function token0() external view returns (address); - function token1() external view returns (address); - function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); - function price0CumulativeLast() external view returns (uint); - function price1CumulativeLast() external view returns (uint); - function kLast() external view returns (uint); - - function mint(address to) external returns (uint liquidity); - function burn(address to) external returns (uint amount0, uint amount1); - function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; - function skim(address to) external; - function sync() external; - - function initialize(address, address) external; -} - -/** - * @dev Contract module that helps prevent reentrant calls to a function. - * - * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier - * available, which can be applied to functions to make sure there are no nested - * (reentrant) calls to them. - * - * Note that because there is a single `nonReentrant` guard, functions marked as - * `nonReentrant` may not call one another. This can be worked around by making - * those functions `private`, and then adding `external` `nonReentrant` entry - * points to them. - * - * TIP: If you would like to learn more about reentrancy and alternative ways - * to protect against it, check out our blog post - * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. - */ -abstract contract ReentrancyGuard { - // Booleans are more expensive than uint256 or any type that takes up a full - // word because each write operation emits an extra SLOAD to first read the - // slot's contents, replace the bits taken up by the boolean, and then write - // back. This is the compiler's defense against contract upgrades and - // pointer aliasing, and it cannot be disabled. - - // The values being non-zero value makes deployment a bit more expensive, - // but in exchange the refund on every call to nonReentrant will be lower in - // amount. Since refunds are capped to a percentage of the total - // transaction's gas, it is best to keep them low in cases like this one, to - // increase the likelihood of the full refund coming into effect. - uint256 private constant _NOT_ENTERED = 1; - uint256 private constant _ENTERED = 2; - - uint256 private _status; - - constructor () { - _status = _NOT_ENTERED; - } - - /** - * @dev Prevents a contract from calling itself, directly or indirectly. - * Calling a `nonReentrant` function from another `nonReentrant` - * function is not supported. It is possible to prevent this from happening - * by making the `nonReentrant` function external, and make it call a - * `private` function that does the actual work. - */ - modifier nonReentrant() { - // On the first call to nonReentrant, _notEntered will be true - require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); - - // Any calls to nonReentrant after this point will fail - _status = _ENTERED; - - _; - - // By storing the original value once again, a refund is triggered (see - // https://eips.ethereum.org/EIPS/eip-2200) - _status = _NOT_ENTERED; - } -} - - - -library SushiswapV2Library { - // returns sorted token addresses, used to handle return values from pairs sorted in this order - function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { - require(tokenA != tokenB, 'SushiswapV2Library: IDENTICAL_ADDRESSES'); - (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); - require(token0 != address(0), 'SushiswapV2Library: ZERO_ADDRESS'); - } - - // calculates the CREATE2 address for a pair without making any external calls - function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { - (address token0, address token1) = sortTokens(tokenA, tokenB); - pair = address(uint160(uint(keccak256(abi.encodePacked( - hex'ff', - factory, - keccak256(abi.encodePacked(token0, token1)), - hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash - ))))); - } - - // fetches and sorts the reserves for a pair - function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { - (address token0,) = sortTokens(tokenA, tokenB); - (uint reserve0, uint reserve1,) = ISushiswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves(); - (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); - } - - - // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset - function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { - require(amountA > 0, 'SushiswapV2Library: INSUFFICIENT_AMOUNT'); - require(reserveA > 0 && reserveB > 0, 'SushiswapV2Library: INSUFFICIENT_LIQUIDITY'); - amountB = amountA * reserveB / reserveA; - } -} - -/** - * @dev Standard math utilities missing in the Solidity language. - */ -library Math { - /** - * @dev Returns the largest of two numbers. - */ - function max(uint256 a, uint256 b) internal pure returns (uint256) { - return a >= b ? a : b; - } - - /** - * @dev Returns the smallest of two numbers. - */ - function min(uint256 a, uint256 b) internal pure returns (uint256) { - return a < b ? a : b; - } - - /** - * @dev Returns the average of two numbers. The result is rounded towards - * zero. - */ - function average(uint256 a, uint256 b) internal pure returns (uint256) { - // (a + b) / 2 can overflow, so we distribute - return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); - } -} - -contract StableYieldCredit is ReentrancyGuard { - using SafeERC20 for IERC20; - - /// @notice EIP-20 token name for this token - string public constant name = "Stable Yield Credit"; - - /// @notice EIP-20 token symbol for this token - string public constant symbol = "yCREDIT"; - - /// @notice EIP-20 token decimals for this token - uint8 public constant decimals = 8; - - /// @notice Total number of tokens in circulation - uint public totalSupply = 0; - - /// @notice Total number of tokens staked for yield - uint public stakedSupply = 0; - - mapping(address => mapping (address => uint)) internal allowances; - mapping(address => uint) internal balances; - mapping(address => uint) public stakes; - - /// @notice The EIP-712 typehash for the contract's domain - bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)"); - bytes32 public immutable DOMAINSEPARATOR; - - /// @notice The EIP-712 typehash for the permit struct used by the contract - bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)"); - - /// @notice A record of states for signing / validating signatures - mapping (address => uint) public nonces; - - function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { - require(n < 2**32, errorMessage); - return uint32(n); - } - - /// @notice The standard EIP-20 transfer event - event Transfer(address indexed from, address indexed to, uint amount); - - /// @notice Stake event for claiming rewards - event Staked(address indexed from, uint amount); - - // @notice Unstake event - event Unstaked(address indexed from, uint amount); - - event Earned(address indexed from, uint amount); - event Fees(uint amount); - - /// @notice The standard EIP-20 approval event - event Approval(address indexed owner, address indexed spender, uint amount); - - // Oracle used for price debt data (external to the AMM balance to avoid internal manipulation) - Oracle public constant LINK = Oracle(0x271bf4568fb737cc2e6277e9B1EE0034098cDA2a); - ISushiswapV2Factory public constant FACTORY = ISushiswapV2Factory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac); - - // user => token => collateral - mapping (address => mapping(address => uint)) public collateral; - // user => token => credit - mapping (address => mapping(address => uint)) public collateralCredit; - - address[] private _markets; - mapping (address => bool) pairs; - - uint public rewardRate = 0; - uint public periodFinish = 0; - uint public DURATION = 7 days; - uint public lastUpdateTime; - uint public rewardPerTokenStored; - - mapping(address => uint) public userRewardPerTokenPaid; - mapping(address => uint) public rewards; - - event Deposit(address indexed creditor, address indexed collateral, uint creditOut, uint amountIn, uint creditMinted); - event Withdraw(address indexed creditor, address indexed collateral, uint creditIn, uint creditOut, uint amountOut); - - constructor () { - DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this))); - } - - uint public FEE = 50; - uint public BASE = 10000; - - function lastTimeRewardApplicable() public view returns (uint) { - return Math.min(block.timestamp, periodFinish); - } - - function rewardPerToken() public view returns (uint) { - if (stakedSupply == 0) { - return rewardPerTokenStored; - } - return - rewardPerTokenStored + - ((lastTimeRewardApplicable() - - lastUpdateTime) * - rewardRate * 1e18 / stakedSupply); - } - - function earned(address account) public view returns (uint) { - return (stakes[account] * (rewardPerToken() - userRewardPerTokenPaid[account]) / 1e18) + rewards[account]; - } - - function getRewardForDuration() external view returns (uint) { - return rewardRate * DURATION; - } - - modifier updateReward(address account) { - rewardPerTokenStored = rewardPerToken(); - lastUpdateTime = lastTimeRewardApplicable(); - if (account != address(0)) { - rewards[account] = earned(account); - userRewardPerTokenPaid[account] = rewardPerTokenStored; - } - _; - } - - function stake(uint256 amount) external nonReentrant updateReward(msg.sender) { - require(amount > 0, "Cannot stake 0"); - stakedSupply += amount; - stakes[msg.sender] += amount; - _transferTokens(msg.sender, address(this), amount); - emit Staked(msg.sender, amount); - } - - function unstake(uint amount) public nonReentrant updateReward(msg.sender) { - require(amount > 0, "Cannot withdraw 0"); - stakedSupply -= amount; - stakes[msg.sender] -= amount; - _transferTokens(address(this), msg.sender, amount); - emit Unstaked(msg.sender, amount); - } - - function getReward() public nonReentrant updateReward(msg.sender) { - uint256 reward = rewards[msg.sender]; - if (reward > 0) { - rewards[msg.sender] = 0; - _transferTokens(address(this), msg.sender, reward); - emit Earned(msg.sender, reward); - } - } - - function exit() external { - unstake(stakes[msg.sender]); - getReward(); - } - - function notifyFeeAmount(uint reward) internal updateReward(address(0)) { - if (block.timestamp >= periodFinish) { - rewardRate = reward / DURATION; - } else { - uint remaining = periodFinish - block.timestamp; - uint leftover = remaining * rewardRate; - rewardRate = (reward + leftover) / DURATION; - } - - // Ensure the provided reward amount is not more than the balance in the contract. - // This keeps the reward rate in the right range, preventing overflows due to - // very high values of rewardRate in the earned and rewardsPerToken functions; - // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. - uint balance = balances[address(this)]; - require(rewardRate <= balance / DURATION, "Provided reward too high"); - - lastUpdateTime = block.timestamp; - periodFinish = block.timestamp + DURATION; - emit Fees(reward); - } - - function markets() external view returns (address[] memory) { - return _markets; - } - - function _mint(address dst, uint amount) internal { - // mint the amount - totalSupply += amount; - // transfer the amount to the recipient - balances[dst] += amount; - emit Transfer(address(0), dst, amount); - } - - function _burn(address dst, uint amount) internal { - // burn the amount - totalSupply -= amount; - // transfer the amount from the recipient - balances[dst] -= amount; - emit Transfer(dst, address(0), amount); - } - - function depositAll(IERC20 token) external { - _deposit(token, token.balanceOf(msg.sender)); - } - - function deposit(IERC20 token, uint amount) external { - _deposit(token, amount); - } - - function _addLiquidity( - address tokenA, - address tokenB, - uint amountADesired, - uint amountBDesired - ) internal virtual returns (address pair, uint amountA, uint amountB) { - // create the pair if it doesn't exist yet - pair = FACTORY.getPair(tokenA, tokenB); - if (pair == address(0)) { - pair = FACTORY.createPair(tokenA, tokenB); - pairs[pair] = true; - _markets.push(tokenA); - } else if (!pairs[pair]) { - pairs[pair] = true; - _markets.push(tokenA); - } - - (uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB); - if (reserveA == 0 && reserveB == 0) { - (amountA, amountB) = (amountADesired, amountBDesired); - } else { - uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB); - if (amountBOptimal <= amountBDesired) { - (amountA, amountB) = (amountADesired, amountBOptimal); - } else { - uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA); - assert(amountAOptimal <= amountADesired); - (amountA, amountB) = (amountAOptimal, amountBDesired); - } - } - } - - function _deposit(IERC20 token, uint amount) internal { - uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals(); - require(_value > 0, "!value"); - - (address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value); - - token.safeTransferFrom(msg.sender, _pair, amountA); - _mint(_pair, _value); // Amount of scUSD to mint - - uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this)); - collateral[msg.sender][address(token)] += _liquidity; - - collateralCredit[msg.sender][address(token)] += _value; - uint _fee = _value * FEE / BASE; - _mint(msg.sender, _value - _fee); - _mint(address(this), _fee); - notifyFeeAmount(_fee); - - emit Deposit(msg.sender, address(token), _value, amount, _value); - } - - function withdrawAll(IERC20 token) external { - _withdraw(token, IERC20(address(this)).balanceOf(msg.sender)); - } - - function withdraw(IERC20 token, uint amount) external { - _withdraw(token, amount); - } - - function _withdraw(IERC20 token, uint amount) internal { - uint _credit = collateralCredit[msg.sender][address(token)]; - uint _collateral = collateral[msg.sender][address(token)]; - - if (_credit < amount) { - amount = _credit; - } - - // Calculate % of collateral to release - uint _burned = _collateral * amount / _credit; - address _pair = FACTORY.getPair(address(token), address(this)); - - IERC20(_pair).safeTransfer(_pair, _burned); // send liquidity to pair - (uint _amount0, uint _amount1) = ISushiswapV2Pair(_pair).burn(msg.sender); - (address _token0,) = SushiswapV2Library.sortTokens(address(token), address(this)); - (uint _amountA, uint _amountB) = address(token) == _token0 ? (_amount0, _amount1) : (_amount1, _amount0); - - collateralCredit[msg.sender][address(token)] -= amount; - collateral[msg.sender][address(token)] -= _burned; - _burn(msg.sender, _amountB+amount); // Amount of scUSD to burn (value of A leaving the system) - - emit Withdraw(msg.sender, address(token), amount, _amountB, _amountA); - } - - /** - * @notice Get the number of tokens `spender` is approved to spend on behalf of `account` - * @param account The address of the account holding the funds - * @param spender The address of the account spending the funds - * @return The number of tokens approved - */ - function allowance(address account, address spender) external view returns (uint) { - return allowances[account][spender]; - } - - /** - * @notice Approve `spender` to transfer up to `amount` from `src` - * @dev This will overwrite the approval amount for `spender` - * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) - * @param spender The address of the account which may transfer tokens - * @param amount The number of tokens that are approved (2^256-1 means infinite) - * @return Whether or not the approval succeeded - */ - function approve(address spender, uint amount) external returns (bool) { - allowances[msg.sender][spender] = amount; - - emit Approval(msg.sender, spender, amount); - return true; - } - - /** - * @notice Triggers an approval from owner to spends - * @param owner The address to approve from - * @param spender The address to be approved - * @param amount The number of tokens that are approved (2^256-1 means infinite) - * @param deadline The time at which to expire the signature - * @param v The recovery byte of the signature - * @param r Half of the ECDSA signature pair - * @param s Half of the ECDSA signature pair - */ - function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external { - bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline)); - bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash)); - address signatory = ecrecover(digest, v, r, s); - require(signatory != address(0), "permit: signature"); - require(signatory == owner, "permit: unauthorized"); - require(block.timestamp <= deadline, "permit: expired"); - - allowances[owner][spender] = amount; - - emit Approval(owner, spender, amount); - } - - /** - * @notice Get the number of tokens held by the `account` - * @param account The address of the account to get the balance of - * @return The number of tokens held - */ - function balanceOf(address account) external view returns (uint) { - return balances[account]; - } - - /** - * @notice Transfer `amount` tokens from `msg.sender` to `dst` - * @param dst The address of the destination account - * @param amount The number of tokens to transfer - * @return Whether or not the transfer succeeded - */ - function transfer(address dst, uint amount) external returns (bool) { - _transferTokens(msg.sender, dst, amount); - return true; - } - - /** - * @notice Transfer `amount` tokens from `src` to `dst` - * @param src The address of the source account - * @param dst The address of the destination account - * @param amount The number of tokens to transfer - * @return Whether or not the transfer succeeded - */ - function transferFrom(address src, address dst, uint amount) external returns (bool) { - address spender = msg.sender; - uint spenderAllowance = allowances[src][spender]; - - if (spender != src && spenderAllowance != type(uint).max) { - uint newAllowance = spenderAllowance - amount; - allowances[src][spender] = newAllowance; - - emit Approval(src, spender, newAllowance); - } - - _transferTokens(src, dst, amount); - return true; - } - - function _transferTokens(address src, address dst, uint amount) internal { - balances[src] -= amount; - balances[dst] += amount; - - emit Transfer(src, dst, amount); - - if (pairs[src]) { - uint _fee = amount * FEE / BASE; - _transferTokens(dst, address(this), _fee); - notifyFeeAmount(_fee); - } - } - - function _getChainId() internal view returns (uint) { - uint chainId; - assembly { chainId := chainid() } - return chainId; - } -} \ No newline at end of file diff --git a/data_full/CVE/2021-3006.sol b/data_full/CVE/2021-3006.sol deleted file mode 100644 index 8859f865..00000000 --- a/data_full/CVE/2021-3006.sol +++ /dev/null @@ -1,929 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2020-03-10 -*/ - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -pragma solidity ^0.5.11; - - -/// @title ERC20 Token Interface -/// @dev see https://github.com/ethereum/EIPs/issues/20 -/// @author Daniel Wang - -contract ERC20 -{ - function totalSupply() - public - view - returns (uint); - - function balanceOf( - address who - ) - public - view - returns (uint); - - function allowance( - address owner, - address spender - ) - public - view - returns (uint); - - function transfer( - address to, - uint value - ) - public - returns (bool); - - function transferFrom( - address from, - address to, - uint value - ) - public - returns (bool); - - function approve( - address spender, - uint value - ) - public - returns (bool); -} -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title Utility Functions for addresses -/// @author Daniel Wang - -/// @author Brecht Devos - -library AddressUtil -{ - using AddressUtil for *; - - function isContract( - address addr - ) - internal - view - returns (bool) - { - uint32 size; - assembly { size := extcodesize(addr) } - return (size > 0); - } - - function toPayable( - address addr - ) - internal - pure - returns (address payable) - { - return address(uint160(addr)); - } - - // Works like address.send but with a customizable gas limit - // Make sure your code is safe for reentrancy when using this function! - function sendETH( - address to, - uint amount, - uint gasLimit - ) - internal - returns (bool success) - { - if (amount == 0) { - return true; - } - address payable recipient = to.toPayable(); - /* solium-disable-next-line */ - (success, ) = recipient.call.value(amount).gas(gasLimit)(""); - } - - // Works like address.transfer but with a customizable gas limit - // Make sure your code is safe for reentrancy when using this function! - function sendETHAndVerify( - address to, - uint amount, - uint gasLimit - ) - internal - returns (bool success) - { - success = to.sendETH(amount, gasLimit); - require(success, "TRANSFER_FAILURE"); - } -} - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - - - -/// @title Burnable ERC20 Token Interface -/// @author Brecht Devos - -contract BurnableERC20 is ERC20 -{ - function burn( - uint value - ) - public - returns (bool); - - function burnFrom( - address from, - uint value - ) - public - returns (bool); -} - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title Ownable -/// @author Brecht Devos - -/// @dev The Ownable contract has an owner address, and provides basic -/// authorization control functions, this simplifies the implementation of -/// "user permissions". -contract Ownable -{ - address public owner; - - event OwnershipTransferred( - address indexed previousOwner, - address indexed newOwner - ); - - /// @dev The Ownable constructor sets the original `owner` of the contract - /// to the sender. - constructor() - public - { - owner = msg.sender; - } - - /// @dev Throws if called by any account other than the owner. - modifier onlyOwner() - { - require(msg.sender == owner, "UNAUTHORIZED"); - _; - } - - /// @dev Allows the current owner to transfer control of the contract to a - /// new owner. - /// @param newOwner The address to transfer ownership to. - function transferOwnership( - address newOwner - ) - public - onlyOwner - { - require(newOwner != address(0), "ZERO_ADDRESS"); - emit OwnershipTransferred(owner, newOwner); - owner = newOwner; - } - - function renounceOwnership() - public - onlyOwner - { - emit OwnershipTransferred(owner, address(0)); - owner = address(0); - } -} - - - -/// @title Claimable -/// @author Brecht Devos - -/// @dev Extension for the Ownable contract, where the ownership needs -/// to be claimed. This allows the new owner to accept the transfer. -contract Claimable is Ownable -{ - address public pendingOwner; - - /// @dev Modifier throws if called by any account other than the pendingOwner. - modifier onlyPendingOwner() { - require(msg.sender == pendingOwner, "UNAUTHORIZED"); - _; - } - - /// @dev Allows the current owner to set the pendingOwner address. - /// @param newOwner The address to transfer ownership to. - function transferOwnership( - address newOwner - ) - public - onlyOwner - { - require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); - pendingOwner = newOwner; - } - - /// @dev Allows the pendingOwner address to finalize the transfer. - function claimOwnership() - public - onlyPendingOwner - { - emit OwnershipTransferred(owner, pendingOwner); - owner = pendingOwner; - pendingOwner = address(0); - } -} - - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title ERC20 safe transfer -/// @dev see https://github.com/sec-bit/badERC20Fix -/// @author Brecht Devos - -library ERC20SafeTransfer -{ - function safeTransferAndVerify( - address token, - address to, - uint value - ) - internal - { - safeTransferWithGasLimitAndVerify( - token, - to, - value, - gasleft() - ); - } - - function safeTransfer( - address token, - address to, - uint value - ) - internal - returns (bool) - { - return safeTransferWithGasLimit( - token, - to, - value, - gasleft() - ); - } - - function safeTransferWithGasLimitAndVerify( - address token, - address to, - uint value, - uint gasLimit - ) - internal - { - require( - safeTransferWithGasLimit(token, to, value, gasLimit), - "TRANSFER_FAILURE" - ); - } - - function safeTransferWithGasLimit( - address token, - address to, - uint value, - uint gasLimit - ) - internal - returns (bool) - { - // A transfer is successful when 'call' is successful and depending on the token: - // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) - // - A single boolean is returned: this boolean needs to be true (non-zero) - - // bytes4(keccak256("transfer(address,uint)")) = 0xa9059cbb - bytes memory callData = abi.encodeWithSelector( - bytes4(0xa9059cbb), - to, - value - ); - (bool success, ) = token.call.gas(gasLimit)(callData); - return checkReturnValue(success); - } - - function safeTransferFromAndVerify( - address token, - address from, - address to, - uint value - ) - internal - { - safeTransferFromWithGasLimitAndVerify( - token, - from, - to, - value, - gasleft() - ); - } - - function safeTransferFrom( - address token, - address from, - address to, - uint value - ) - internal - returns (bool) - { - return safeTransferFromWithGasLimit( - token, - from, - to, - value, - gasleft() - ); - } - - function safeTransferFromWithGasLimitAndVerify( - address token, - address from, - address to, - uint value, - uint gasLimit - ) - internal - { - bool result = safeTransferFromWithGasLimit( - token, - from, - to, - value, - gasLimit - ); - require(result, "TRANSFER_FAILURE"); - } - - function safeTransferFromWithGasLimit( - address token, - address from, - address to, - uint value, - uint gasLimit - ) - internal - returns (bool) - { - // A transferFrom is successful when 'call' is successful and depending on the token: - // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) - // - A single boolean is returned: this boolean needs to be true (non-zero) - - // bytes4(keccak256("transferFrom(address,address,uint)")) = 0x23b872dd - bytes memory callData = abi.encodeWithSelector( - bytes4(0x23b872dd), - from, - to, - value - ); - (bool success, ) = token.call.gas(gasLimit)(callData); - return checkReturnValue(success); - } - - function checkReturnValue( - bool success - ) - internal - pure - returns (bool) - { - // A transfer/transferFrom is successful when 'call' is successful and depending on the token: - // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) - // - A single boolean is returned: this boolean needs to be true (non-zero) - if (success) { - assembly { - switch returndatasize() - // Non-standard ERC20: nothing is returned so if 'call' was successful we assume the transfer succeeded - case 0 { - success := 1 - } - // Standard ERC20: a single boolean value is returned which needs to be true - case 32 { - returndatacopy(0, 0, 32) - success := mload(0) - } - // None of the above: not successful - default { - success := 0 - } - } - } - return success; - } -} -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title Utility Functions for uint -/// @author Daniel Wang - -library MathUint -{ - function mul( - uint a, - uint b - ) - internal - pure - returns (uint c) - { - c = a * b; - require(a == 0 || c / a == b, "MUL_OVERFLOW"); - } - - function sub( - uint a, - uint b - ) - internal - pure - returns (uint) - { - require(b <= a, "SUB_UNDERFLOW"); - return a - b; - } - - function add( - uint a, - uint b - ) - internal - pure - returns (uint c) - { - c = a + b; - require(c >= a, "ADD_OVERFLOW"); - } - - function decodeFloat( - uint f - ) - internal - pure - returns (uint value) - { - uint numBitsMantissa = 23; - uint exponent = f >> numBitsMantissa; - uint mantissa = f & ((1 << numBitsMantissa) - 1); - value = mantissa * (10 ** exponent); - } -} - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title ReentrancyGuard -/// @author Brecht Devos - -/// @dev Exposes a modifier that guards a function against reentrancy -/// Changing the value of the same storage value multiple times in a transaction -/// is cheap (starting from Istanbul) so there is no need to minimize -/// the number of times the value is changed -contract ReentrancyGuard -{ - //The default value must be 0 in order to work behind a proxy. - uint private _guardValue; - - // Use this modifier on a function to prevent reentrancy - modifier nonReentrant() - { - // Check if the guard value has its original value - require(_guardValue == 0, "REENTRANCY"); - - // Set the value to something else - _guardValue = 1; - - // Function body - _; - - // Set the value back - _guardValue = 0; - } -} - - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - - -/// @title IProtocolFeeVault -/// @dev This smart contract manages the distribution of protocol fees. -/// Tokens other than LRC will be sold by TokenSeller, -/// If no TokenSeller is set, the tokens or Ether will be sent to the owner -/// to sell them for LRC by other means such as using a centralized exchange. -/// For LRC token, 70% of them can be withdrawn to the UserStakingPool contract -/// to reward LRC stakers; 20% of them can be withdrawn to the Loopring DAO, -/// and the remaining 10% can be burned to reduce LRC's total supply. -contract IProtocolFeeVault -{ - uint public constant REWARD_PERCENTAGE = 70; - uint public constant DAO_PERDENTAGE = 20; - - address public userStakingPoolAddress; - address public lrcAddress; - address public tokenSellerAddress; - address public daoAddress; - - uint claimedReward; - uint claimedDAOFund; - uint claimedBurn; - - event LRCClaimed(uint amount); - event DAOFunded(uint amountDAO, uint amountBurn); - event TokenSold(address token, uint amount); - event SettingsUpdated(uint time); - - /// @dev Sets depdending contract address. All these addresses can be zero. - /// @param _userStakingPoolAddress The address of the user staking pool. - /// @param _tokenSellerAddress The address of the token seller. - /// @param _daoAddress The address of the DAO contract. - function updateSettings( - address _userStakingPoolAddress, - address _tokenSellerAddress, - address _daoAddress - ) - external; - - /// @dev Claims LRC as staking reward to the IUserStakingPool contract. - /// Note that this function can only be called by - /// the IUserStakingPool contract. - /// - /// @param amount The amount of LRC to be claimed. - function claimStakingReward(uint amount) external; - - /// @dev Withdraws LRC to DAO and in the meanwhile burn some LRC according to - /// the predefined percentages. - function fundDAO() external; - - /// @dev Sells a non-LRC token or Ether to LRC. If no TokenSeller is set, - /// the tokens or Ether will be sent to the owner. - /// @param token The token or ether (0x0) to sell. - /// @param amount THe amout of token/ether to sell. - function sellTokenForLRC( - address token, - uint amount - ) - external; - - /// @dev Returns some global stats regarding fees. - /// @return accumulatedFees The accumulated amount of LRC protocol fees. - /// @return accumulatedBurn The accumulated amount of LRC to burn. - /// @return accumulatedDAOFund The accumulated amount of LRC as developer pool. - /// @return accumulatedReward The accumulated amount of LRC as staking reward. - /// @return remainingFees The remaining amount of LRC protocol fees. - /// @return remainingBurn The remaining amount of LRC to burn. - /// @return remainingDAOFund The remaining amount of LRC as developer pool. - /// @return remainingReward The remaining amount of LRC as staking reward. - function getProtocolFeeStats() - public - view - returns ( - uint accumulatedFees, - uint accumulatedBurn, - uint accumulatedDAOFund, - uint accumulatedReward, - uint remainingFees, - uint remainingBurn, - uint remainingDAOFund, - uint remainingReward - ); -} - -/* - - Copyright 2017 Loopring Project Ltd (Loopring Foundation). - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -/// @title ITokenSeller -/// @dev Use this contract to sell tokenS for as many tokenB. -/// @author Daniel Wang - -contract ITokenSeller -{ - /// @dev Sells all tokenS for tokenB - /// @param tokenS The token or Ether (0x0) to sell. - /// @param tokenB The token to buy. - /// @return success True if success, false otherwise. - function sellToken( - address tokenS, - address tokenB - ) - external - payable - returns (bool success); -} - -/// @title An Implementation of IProtocolFeeVault. -/// @author Daniel Wang - -contract ProtocolFeeVault is Claimable, ReentrancyGuard, IProtocolFeeVault -{ - using AddressUtil for address; - using AddressUtil for address payable; - using ERC20SafeTransfer for address; - using MathUint for uint; - - constructor(address _lrcAddress) - Claimable() - public - { - require(_lrcAddress != address(0), "ZERO_ADDRESS"); - lrcAddress = _lrcAddress; - } - - function() external payable { } - - function updateSettings( - address _userStakingPoolAddress, - address _tokenSellerAddress, - address _daoAddress - ) - external - nonReentrant - onlyOwner - { - require( - userStakingPoolAddress != _userStakingPoolAddress || - tokenSellerAddress != _tokenSellerAddress || - daoAddress != _daoAddress, - "SAME_ADDRESSES" - ); - userStakingPoolAddress = _userStakingPoolAddress; - tokenSellerAddress = _tokenSellerAddress; - daoAddress = _daoAddress; - - emit SettingsUpdated(now); - } - - function claimStakingReward( - uint amount - ) - external - nonReentrant - { - require(amount > 0, "ZERO_VALUE"); - require(msg.sender == userStakingPoolAddress, "UNAUTHORIZED"); - lrcAddress.safeTransferAndVerify(userStakingPoolAddress, amount); - claimedReward = claimedReward.add(amount); - emit LRCClaimed(amount); - } - - function fundDAO() - external - nonReentrant - { - uint amountDAO; - uint amountBurn; - (, , , , , amountBurn, amountDAO, ) = getProtocolFeeStats(); - - address recipient = daoAddress == address(0) ? owner : daoAddress; - - if (amountDAO > 0) { - lrcAddress.safeTransferAndVerify(recipient, amountDAO); - } - - if (amountBurn > 0) { - require(BurnableERC20(lrcAddress).burn(amountBurn), "BURN_FAILURE"); - } - - claimedBurn = claimedBurn.add(amountBurn); - claimedDAOFund = claimedDAOFund.add(amountDAO); - - emit DAOFunded(amountDAO, amountBurn); - } - - function sellTokenForLRC( - address token, - uint amount - ) - external - nonReentrant - { - require(amount > 0, "ZERO_AMOUNT"); - require(token != lrcAddress, "PROHIBITED"); - - address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress; - - if (token == address(0)) { - recipient.sendETHAndVerify(amount, gasleft()); - } else { - token.safeTransferAndVerify(recipient, amount); - } - - require( - tokenSellerAddress == address(0) || - ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress), - "SELL_FAILURE" - ); - - emit TokenSold(token, amount); - } - - function getProtocolFeeStats() - public - view - returns ( - uint accumulatedFees, - uint accumulatedBurn, - uint accumulatedDAOFund, - uint accumulatedReward, - uint remainingFees, - uint remainingBurn, - uint remainingDAOFund, - uint remainingReward - ) - { - remainingFees = ERC20(lrcAddress).balanceOf(address(this)); - accumulatedFees = remainingFees.add(claimedReward).add(claimedDAOFund).add(claimedBurn); - - accumulatedReward = accumulatedFees.mul(REWARD_PERCENTAGE) / 100; - accumulatedDAOFund = accumulatedFees.mul(DAO_PERDENTAGE) / 100; - accumulatedBurn = accumulatedFees.sub(accumulatedReward).sub(accumulatedDAOFund); - - remainingReward = accumulatedReward.sub(claimedReward); - remainingDAOFund = accumulatedDAOFund.sub(claimedDAOFund); - remainingBurn = accumulatedBurn.sub(claimedBurn); - } -} \ No newline at end of file diff --git a/data_full/CVE/2021-33403.sol b/data_full/CVE/2021-33403.sol deleted file mode 100644 index 0bd82911..00000000 --- a/data_full/CVE/2021-33403.sol +++ /dev/null @@ -1,365 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-22 -*/ - -//--------------------------------------------------------------// -//---------------------BLOCKLANCER TOKEN -----------------------// -//--------------------------------------------------------------// - -pragma solidity ^0.4.8; - -/// Migration Agent -/// allows us to migrate to a new contract should it be needed -/// makes blocklancer future proof -contract MigrationAgent { - function migrateFrom(address _from, uint256 _value); -} - -contract ERC20Interface { - // Get the total token supply - function totalSupply() constant returns (uint256 totalSupply); - - // Get the account balance of another account with address _owner - function balanceOf(address _owner) constant returns (uint256 balance); - - // Send _value amount of tokens to address _to - function transfer(address _to, uint256 _value) returns (bool success); - - // Send _value amount of tokens from address _from to address _to - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - - // Allow _spender to withdraw from your account, multiple times, up to the _value amount. - // If this function is called again it overwrites the current allowance with _value. - // this function is required for some DEX functionality - function approve(address _spender, uint256 _value) returns (bool success); - - // Returns the amount which _spender is still allowed to withdraw from _owner - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - - // Triggered when tokens are transferred. - event Transfer(address indexed _from, address indexed _to, uint256 _value); - - // Triggered whenever approve(address _spender, uint256 _value) is called. - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} - -/// Blocklancer Token (LNC) - crowdfunding code for Blocklancer Project -contract BlocklancerToken is ERC20Interface { - string public constant name = "Lancer Token"; - string public constant symbol = "LNC"; - uint8 public constant decimals = 18; // 18 decimal places, the same as ETH. - - mapping(address => mapping (address => uint256)) allowed; - - uint public fundingStart; - - // The flag indicates if the LNC contract is in Funding state. - bool public funding = true; - bool allowTransfer=false; - - // Receives ETH and its own LNC endowment. - address public master; - - // The current total token supply. - uint256 totalTokens; - - uint exchangeRate=20000; - uint EarlyInvestorExchangeRate=25000; - - bool startRefund=false; - - mapping (address => uint256) balances; - mapping (address => bool) initialInvestor; - mapping (address => uint) lastTransferred; - - //needed to refund everyone should the ICO fail - // needed because the price per LNC isn't linear - mapping (address => uint256) balancesEther; - - //address of the contract that manages the migration - //can only be changed by the creator - address public migrationAgent; - - //total amount of token migrated - //allows everyone to see the progress of the migration - uint256 public totalMigrated; - - event Migrate(address indexed _from, address indexed _to, uint256 _value); - event Refund(address indexed _from, uint256 _value); - - //total amount of participants in the ICO - uint totalParticipants; - - function BlocklancerToken() { - master = msg.sender; - fundingStart = 1501977600; - initialInvestor[0x32be343b94f860124dc4fee278fdcbd38c102d88]=true;initialInvestor[0x3106fe2245b376888d684bdcd83dfa9641a869ff]=true;initialInvestor[0x7f7c64c7b7f5a611e739b4da26659bf741414917]=true;initialInvestor[0x4b3b8e0c2c221e916a48e2e5f3718ae2bce51894]=true;initialInvestor[0x507c8fea802a0772eb5e001a8fba38f36fb9b66b]=true;initialInvestor[0x3c35b66dbaf1bc716f41759c7513a7af2f727ce0]=true;initialInvestor[0x7da3ff5dc152352dcffaf08d528e78f1efd4e9d1]=true;initialInvestor[0x404b688a1d9eb850be2527c5dd341561cfa84e11]=true;initialInvestor[0x80ad7165f29f97896a0b5758193879de34fd9712]=true;initialInvestor[0xd70837a61a322f69ba3742111216a7b97d61d3a7]=true;initialInvestor[0x5eefc4f295045ea11827f515c10d50829580cd31]=true;initialInvestor[0xc8c154d54e8d66073b23361cc74cf5d13efc4dc9]=true;initialInvestor[0x00b279438dff4bb6f37038b12704e31967955cb0]=true;initialInvestor[0xfff78f0db7995c7f2299d127d332aef95bc3e7b7]=true;initialInvestor[0xae631a37ad50bf03e8028d0ae8ba041c70ac4c70]=true;initialInvestor[0x4effca51ba840ae9563f5ac1aa794d1e5d3a3806]=true;initialInvestor[0x315a233620b8536d37a92d588aaf5eb050b50d84]=true;initialInvestor[0x1ebf9e3470f303f6a6ac43347e41877b0a5aaa39]=true;initialInvestor[0xbf022480bda3f6c839cd443397761d5e83f3c02b]=true;initialInvestor[0xe727ea5340256a5236287ee3074eea34d8483457]=true;initialInvestor[0x45ecfeea42fc525c0b29313d3de9089488ef71dc]=true;initialInvestor[0xe59e4aac45862796cb52434967cf72ea46474ff3]=true;initialInvestor[0x7c367c14a322404f9e332b68d7d661b46a5c93ea]=true;initialInvestor[0x08bea4ccc9c45e506d5bc5e638acaa13fa3e801c]=true;initialInvestor[0x5dfb4a015eb0c3477a99ba88b2ac60459c879674]=true;initialInvestor[0x771a2137708ca7e07e7b7c55e5ea666e88d7c0c8]=true;initialInvestor[0xcc8ab06eb5a14855fc8b90abcb6be2f34ee5cea1]=true;initialInvestor[0x0764d446d0701a9b52382f8984b9d270d266e02c]=true;initialInvestor[0x2d90b415a38e2e19cdd02ff3ad81a97af7cbf672]=true;initialInvestor[0x0d4266de516944a49c8109a4397d1fcf06fb7ed0]=true;initialInvestor[0x7a5159617df20008b4dbe06d645a1b0305406794]=true;initialInvestor[0xaf9e23965c09ebf5d313c669020b0e1757cbb92c]=true;initialInvestor[0x33d94224754c122baa1ebaf455d16a9c82f69c98]=true;initialInvestor[0x267be1c1d684f78cb4f6a176c4911b741e4ffdc0]=true;initialInvestor[0xf6ac7c81ca099e34421b7eff7c9e80c8f56b74ae]=true;initialInvestor[0xd85faf59e73225ef386b46a1b17c493019b23e1e]=true;initialInvestor[0x3833f8dbdbd6bdcb6a883ff209b869148965b364]=true;initialInvestor[0x7ed1e469fcb3ee19c0366d829e291451be638e59]=true;initialInvestor[0x6c1ddafafd55a53f80cb7f4c8c8f9a9f13f61d70]=true;initialInvestor[0x94ef531595ffe510f8dc92e0e07a987f57784338]=true;initialInvestor[0xcc54e4e2f425cc4e207344f9e0619c1e40f42f26]=true;initialInvestor[0x70ee7bfc1aeac50349c29475a11ed4c57961b387]=true;initialInvestor[0x89be0bd8b6007101c7da7170a6461580994221d0]=true;initialInvestor[0xa7802ba51ba87556263d84cfc235759b214ccf35]=true;initialInvestor[0xb6a34bd460f02241e80e031023ec20ce6fc310ae]=true;initialInvestor[0x07004b458b56fb152c06ad81fe1be30c8a8b2ea1]=true;initialInvestor[0xb6da110659ef762a381cf2d6f601eb19b5f5d51e]=true;initialInvestor[0x20abf65634219512c6c98a64614c43220ca2085b]=true;initialInvestor[0x3afd1483693fe606c0e58f580bd08ae9aba092fd]=true;initialInvestor[0x61e120b9ca6559961982d9bd1b1dbea7485b84d1]=true;initialInvestor[0x481525718f1536ca2d739aa7e68b94b5e1d5d2c2]=true;initialInvestor[0x8e129a434cde6f52838fad2d30d8b08f744abf48]=true;initialInvestor[0x13df035952316f5fb663c262064ee39e44aa6b43]=true;initialInvestor[0x03c6c82a1d6d13b2f92ed63a10b1b791ffaa1e02]=true;initialInvestor[0xb079a72c627d0a34b880aee0504b901cbce64568]=true;initialInvestor[0xbf27721ca05c983c902df12492620ab2a8b9db91]=true;initialInvestor[0x4ced2b7d27ac74b0ecb2440d9857ba6c6407149f]=true;initialInvestor[0x330c63a5b737b5542be108a74b3fef6272619585]=true;initialInvestor[0x266dccd07a275a6e72b6bc549f7c2ce9e082f13f]=true;initialInvestor[0xf4280bf77a043568e40da2b8068b11243082c944]=true;initialInvestor[0x67d2f0e2d642a87300781df25c45b00bccaf6983]=true;initialInvestor[0x9f658a6628864e94f9a1c53ba519f0ae37a8b4a5]=true;initialInvestor[0x498d256ee53d4d05269cfa1a80c3214e525076ca]=true;initialInvestor[0xa1beac79dda14bce1ee698fdee47e2f7f2fd1f0d]=true;initialInvestor[0xfeb063bd508b82043d6b4d5c51e1e42b44f39b33]=true;initialInvestor[0xfeb7a283e1dbf2d5d8e9ba64ab5e607a41213561]=true;initialInvestor[0xabedb3d632fddccd4e95957be4ee0daffbe6acdd]=true;initialInvestor[0x4d8a7cb44d317113c82f25a0174a637a8f012ebb]=true;initialInvestor[0xe922c94161d45bdd31433b3c7b912ad214d399ce]=true;initialInvestor[0x11f9ad6eb7e9e98349b8397c836c0e3e88455b0a]=true;initialInvestor[0xfc28b52160639167fa59f30232bd8d43fab681e6]=true;initialInvestor[0xaf8a6c54fc8fa59cfcbc631e56b3d5b22fa42b75]=true;initialInvestor[0xd3c0ebb99a5616f3647f16c2efb40b133b5b1e1c]=true;initialInvestor[0x877341abeac8f44ac69ba7c99b1d5d31ce7a11d7]=true;initialInvestor[0xb22f376f70f34c906a88a91f6999a0bd1a0f3c3d]=true;initialInvestor[0x2c99db3838d6af157c8d671291d560a013c6c01e]=true;initialInvestor[0xd0f38af6984f3f847f7f2fcd6ea27aa878257059]=true;initialInvestor[0x2a5da89176d5316782d7f1c9db74d209679ad9ce]=true;initialInvestor[0xc88eea647a570738e69ad3dd8975577df720318d]=true;initialInvestor[0xb32b18dfea9072047a368ec056a464b73618345a]=true;initialInvestor[0x945b9a00bffb201a5602ee661f2a4cc6e5285ca6]=true;initialInvestor[0x86957ac9a15f114c08296523569511c22e471266]=true;initialInvestor[0x007bfe6994536ec9e89505c7de8e9eb748d3cb27]=true;initialInvestor[0x6ad0f0f578115b6fafa73df45e9f1e9056b84459]=true;initialInvestor[0x621663b4b6580b70b74afaf989c707d533bbec91]=true;initialInvestor[0xdc86c0632e88de345fc2ac01608c63f2ed99605a]=true;initialInvestor[0x3d83bb077b2557ef5f361bf1a9e68d093d919b28]=true;initialInvestor[0x56307b37377f75f397d4936cf507baf0f4943ea5]=true;initialInvestor[0x555cbe849bf5e01db195a81ecec1e65329fff643]=true;initialInvestor[0x7398a2edb928a2e179f62bfb795f292254f6850e]=true;initialInvestor[0x30382b132f30c175bee2858353f3a2dd0d074c3a]=true;initialInvestor[0x5baeac0a0417a05733884852aa068b706967e790]=true;initialInvestor[0xcb12b8a675e652296a8134e70f128521e633b327]=true;initialInvestor[0xaa8c03e04b121511858d88be7a1b2f5a2d70f6ac]=true;initialInvestor[0x77529c0ea5381262db964da3d5f6e2cc92e9b48b]=true;initialInvestor[0x59e5fe8a9637702c6d597c5f1c4ebe3fba747371]=true;initialInvestor[0x296fe436ecc0ea6b7a195ded26451e77e1335108]=true;initialInvestor[0x41bacae05437a3fe126933e57002ae3f129aa079]=true;initialInvestor[0x6cd5b9b60d2bcf81af8e6ef5d750dc9a8f18bf45]=true; - } - - //returns the total amount of participants in the ICO - function getAmountofTotalParticipants() constant returns (uint){ - return totalParticipants; - } - - /// allows to transfer token to another address - function transfer(address _to, uint256 _value) returns (bool success) { - // Don't allow in funding state - if(funding) throw; - if(!allowTransfer)throw; - - var senderBalance = balances[msg.sender]; - //only allow if the balance of the sender is more than he want's to send - if (senderBalance >= _value && _value > 0) { - //reduce the sender balance by the amount he sends - senderBalance -= _value; - balances[msg.sender] = senderBalance; - - //increase the balance of the receiver by the amount we reduced the balance of the sender - balances[_to] += _value; - - //saves the last time someone sent LNc from this address - //is needed for our Token Holder Tribunal - //this ensures that everyone can only vote one time - //otherwise it would be possible to send the LNC around and everyone votes again and again - lastTransferred[msg.sender]=block.timestamp; - Transfer(msg.sender, _to, _value); - return true; - } - //transfer failed - return false; - } - - //returns the total amount of LNC in circulation - //get displayed on the website whilst the crowd funding - function totalSupply() constant returns (uint256 totalSupply) { - return totalTokens; - } - - //retruns the balance of the owner address - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - //returns the amount anyone pledged into this contract - function EtherBalanceOf(address _owner) constant returns (uint256) { - return balancesEther[_owner]; - } - - //returns the amount anyone pledged into this contract - function isInitialInvestor(address _owner) constant returns (bool) { - return initialInvestor[_owner]; - } - - //time left before the crodsale begins - function TimeLeftBeforeCrowdsale() external constant returns (uint256) { - if(fundingStart>block.timestamp) - return fundingStart-block.timestamp; - else - return 0; - } - - // allows us to migrate to anew contract - function migrate(uint256 _value) external { - // can only be called if the funding ended - if(funding) throw; - - //the migration agent address needs to be set - if(migrationAgent == 0) throw; - - // must migrate more than nothing - if(_value == 0) throw; - - //if the value is higher than the sender owns abort - if(_value > balances[msg.sender]) throw; - - //reduce the balance of the owner - balances[msg.sender] -= _value; - - //reduce the token left in the old contract - totalTokens -= _value; - totalMigrated += _value; - - //call the migration agent to complete the migration - //credits the same amount of LNC in the new contract - MigrationAgent(migrationAgent).migrateFrom(msg.sender, _value); - Migrate(msg.sender, migrationAgent, _value); - } - - //sets the address of the migration agent - function setMigrationAgent(address _agent) external { - //not possible in funding mode - if(funding) throw; - - //only allow to set this once - if(migrationAgent != 0) throw; - - //anly the owner can call this function - if(msg.sender != master) throw; - - //set the migration agent - migrationAgent = _agent; - } - - function setExchangeRate(uint _exchangeRate){ - if(msg.sender!=master)throw; - exchangeRate=_exchangeRate; - } - - function setICORunning(bool r){ - if(msg.sender!=master)throw; - funding=r; - } - - function setTransfer(bool r){ - if(msg.sender!=master)throw; - allowTransfer=r; - } - - function addInitialInvestor(address invest){ - if(msg.sender!=master)throw; - initialInvestor[invest]=true; - } - - function addToken(address invest,uint256 value){ - if(msg.sender!=master)throw; - balances[invest]+=value; - totalTokens+=value; - } - - function setEarlyInvestorExchangeRate(uint invest){ - if(msg.sender!=master)throw; - EarlyInvestorExchangeRate=invest; - } - - function setStartDate(uint time){ - if(msg.sender!=master)throw; - fundingStart=time; - } - - function setStartRefund(bool s){ - if(msg.sender!=master)throw; - startRefund=s; - } - - //return the current exchange rate -> LNC per Ether - function getExchangeRate(address investorAddress) constant returns(uint){ - if(initialInvestor[investorAddress]) - return EarlyInvestorExchangeRate; - else - return exchangeRate; - } - - //returns if the crowd sale is still open - function ICOopen() constant returns(bool){ - if(!funding) return false; - else if(block.timestamp < fundingStart) return false; - else return true; - } - - //when someone send ether to this contract - function() payable external { - //not possible if the funding has ended - if(!funding) throw; - - //not possible before the funding started - if(block.timestamp < fundingStart) throw; - - // Do not allow creating 0 or more than the cap tokens. - if(msg.value == 0) throw; - - //calculate the amount of LNC the sender receives - var numTokens = msg.value * getExchangeRate(msg.sender); - totalTokens += numTokens; - - // increase the amount of token the sender holds - balances[msg.sender] += numTokens; - - //increase the amount of ether the sender pledged into the contract - balancesEther[msg.sender] += msg.value; - - //icrease the amount of people that sent ether to this contract - totalParticipants+=1; - - // Log token creation - Transfer(0, msg.sender, numTokens); - } - - //called after the crodsale ended - //needed to allow everyone to send their LNC around - function finalize(uint percentOfTotal) external { - if(msg.sender!=master)throw; - if(funding)throw; - - // allows to tranfer token to another address - // disables buying LNC - funding = false; - - //send 12% of the token to the devs - //10 % for the devs - //2 % for the bounty participants - uint256 additionalTokens = totalTokens * percentOfTotal / (100 - percentOfTotal); - totalTokens += additionalTokens; - balances[master] += additionalTokens; - Transfer(0, master, additionalTokens); - - // Transfer ETH to the Blocklancer address. - if (!master.send(this.balance)) throw; - } - - //everyone needs to call this function should the minimum cap not be reached - //refunds the sender - function refund() external { - if(!startRefund) throw; - - var gntValue = balances[msg.sender]; - var ethValue = balancesEther[msg.sender]; - if (gntValue == 0) throw; - - //set the amount of token the sender has to 0 - balances[msg.sender] = 0; - - //set the amount of ether the sender owns to 0 - balancesEther[msg.sender] = 0; - totalTokens -= gntValue; - - Refund(msg.sender, ethValue); - if (!msg.sender.send(ethValue)) throw; - } - - // Send _value amount of tokens from address _from to address _to - // The transferFrom method is used for a withdraw workflow, allowing contracts to send - // tokens on your behalf, for example to "deposit" to a contract address and/or to charge - // fees in sub-currencies; the command should fail unless the _from account has - // deliberately authorized the sender of the message via some mechanism; we propose - // these standardized APIs for approval: - function transferFrom(address _from,address _to,uint256 _amount) returns (bool success) { - if(funding) throw; - if(!allowTransfer)throw; - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - - // Allow _spender to withdraw from your account, multiple times, up to the _value amount. - // If this function is called again it overwrites the current allowance with _value. - function approve(address _spender, uint256 _amount) returns (bool success) { - if(funding) throw; - if(!allowTransfer)throw; - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} \ No newline at end of file diff --git a/data_full/CVE/2021-34270.sol b/data_full/CVE/2021-34270.sol deleted file mode 100644 index 3ff55976..00000000 --- a/data_full/CVE/2021-34270.sol +++ /dev/null @@ -1,197 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-09-28 -*/ - -pragma solidity ^0.4.13; - -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract doftManaged { - address public doftManager; - - function doftManaged() { - doftManager = msg.sender; - } - - modifier onlyDoftManager { - require(msg.sender == doftManager); - _; - } - - function transferDoftManagment(address newDoftManager) onlyDoftManager { - doftManager = newDoftManager; - //coins for mining should be transferred after transferring of doftManagment - } -} - -contract ERC20 { - function totalSupply() constant returns (uint totalSupply); - function balanceOf(address _owner) constant returns (uint balance); - function transfer(address _to, uint _value) returns (bool success); - function transferFrom(address _from, address _to, uint _value) returns (bool success); - function approve(address _spender, uint _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint remaining); - event Transfer(address indexed _from, address indexed _to, uint _value); - event Approval(address indexed _owner, address indexed _spender, uint _value); -} - -contract BasicToken is ERC20 { - uint256 _totalSupply; - - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - event Transfer(address indexed _from, address indexed _to, uint _value); - event Approval(address indexed _owner, address indexed _spender, uint _value); - - /// @return total amount of tokens - function totalSupply() constant returns (uint totalSupply){ - totalSupply = _totalSupply; - } - - /// @param _owner The address from which the balance will be retrieved - /// @return The balance - function balanceOf(address _owner) constant returns (uint balance){ - return balanceOf[_owner]; - } - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] > _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice send `_value` token to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint _value) returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - - /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` - /// @param _from The address of the sender - /// @param _to The address of the recipient - /// @param _value The amount of token to be transferred - /// @return Whether the transfer was successful or not - function transferFrom(address _from, address _to, uint _value) returns (bool success) { - require (_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /// @notice `msg.sender` approves `_addr` to spend `_value` tokens - /// @param _spender The address of the account able to transfer the tokens - /// @param _value The amount of wei to be approved for transfer - /// @return Whether the approval was successful or not - function approve(address _spender, uint _value) returns (bool success) { - allowance[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - /// @param _owner The address of the account owning tokens - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens allowed to spent - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowance[_owner][_spender]; - } -} - -contract Doftcoin is BasicToken, owned, doftManaged { - string public name; - string public symbol; - uint256 public decimals; - uint256 public sellPrice; - uint256 public buyPrice; - uint256 public miningStorage; - string public version; - - event Mine(address target, uint256 minedAmount); - - function Doftcoin() { - decimals = 18; - _totalSupply = 5000000 * (10 ** decimals); // Update total supply - miningStorage = _totalSupply / 2; - name = "Doftcoin"; // Set the name for display purposes - symbol = "DFC"; // Set the symbol for display purposes - - balanceOf[msg.sender] = _totalSupply; // Give the creator all initial tokens - version = "1.0"; - } - - /// @notice Create `_mintedAmount` tokens and send it to `_target` - /// @param _target Address to receive the tokens - /// @param _mintedAmount the amount of tokens it will receive - function mintToken(address _target, uint256 _mintedAmount) onlyOwner { - require (_target != 0x0); - - //ownership will be given to ICO after creation - balanceOf[_target] += _mintedAmount; - _totalSupply += _mintedAmount; - Transfer(0, this, _mintedAmount); - Transfer(this, _target, _mintedAmount); - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable { - require(buyPrice > 0); - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `_amount` tokens to contract - /// @param _amount Amount of tokens to be sold - function sell(uint256 _amount) { - require(sellPrice > 0); - require(this.balance >= _amount * sellPrice); // checks if the contract has enough ether to buy - _transfer(msg.sender, this, _amount); // makes the transfers - msg.sender.transfer(_amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } - - /// @notice Allow users to buy tokens for `_newBuyPrice` eth and sell tokens for `_newSellPrice` eth - /// @param _newSellPrice Price the users can sell to the contract - /// @param _newBuyPrice Price users can buy from the contract - function setPrices(uint256 _newSellPrice, uint256 _newBuyPrice) onlyDoftManager { - sellPrice = _newSellPrice; - buyPrice = _newBuyPrice; - } - - /// @notice Send `_minedAmount` to `_target` as a reward for mining - /// @param _target The address of the recipient - /// @param _minedAmount The amount of reward tokens - function mine(address _target, uint256 _minedAmount) onlyDoftManager { - require (_minedAmount > 0); - require (_target != 0x0); - require (miningStorage - _minedAmount >= 0); - require (balanceOf[doftManager] >= _minedAmount); // Check if the sender has enough - require (balanceOf[_target] + _minedAmount > balanceOf[_target]); // Check for overflows - - balanceOf[doftManager] -= _minedAmount; - balanceOf[_target] += _minedAmount; - miningStorage -= _minedAmount; - - Mine(_target, _minedAmount); - } -} \ No newline at end of file diff --git a/data_full/CVE/2021-34272.sol b/data_full/CVE/2021-34272.sol deleted file mode 100644 index 3da1c1c7..00000000 --- a/data_full/CVE/2021-34272.sol +++ /dev/null @@ -1,255 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-03-02 -*/ - -pragma solidity ^0.4.18; - -contract Owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 6; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract RobotBTC is Owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - bool public isOpened; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function RobotBTC( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public { - - } - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth - /// @param newSellPrice Price the users can sell to the contract - /// @param newBuyPrice Price users can buy from the contract - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - /// @notice Buy tokens from contract by sending ether - function buy() payable public { - require(isOpened); - uint amount = msg.value / buyPrice; // calculates the amount - _transfer(this, msg.sender, amount); // makes the transfers - } - - /// @notice Sell `amount` tokens to contract - /// @param amount amount of tokens to be sold - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy - require(isOpened); - _transfer(msg.sender, this, amount); // makes the transfers - msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks - } - ///set open - function setExchange(bool istrue) onlyOwner public { - isOpened = istrue; - } -} \ No newline at end of file diff --git a/data_full/CVE/2021-34273.sol b/data_full/CVE/2021-34273.sol deleted file mode 100644 index 588c2870..00000000 --- a/data_full/CVE/2021-34273.sol +++ /dev/null @@ -1,129 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-11-15 -*/ - -pragma solidity ^0.4.4; - -contract Token { - - - function totalSupply() constant returns (uint256 supply) {} - - - function balanceOf(address _owner) constant returns (uint256 balance) {} - - - function transfer(address _to, uint256 _value) returns (bool success) {} - - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - - - function approve(address _spender, uint256 _value) returns (bool success) {} - - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - -} - -contract Owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -contract StandardToken is Token, Owned { - - function transfer(address _to, uint256 _value) returns (bool success) { - - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - - function distributeToken(address[] addresses, uint256 _value) { - for (uint i = 0; i < addresses.length; i++) { - balances[msg.sender] -= _value; - balances[addresses[i]] += _value; - Transfer(msg.sender, addresses[i], _value); - } -} - - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - - - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - - - uint256 public totalSupply; -} - - - -contract B2X is StandardToken { - - function () { - - throw; - } - - - string public name; - uint8 public decimals; - string public symbol; - - - function B2X( - ) { - totalSupply = 21 * 10 ** 14; - balances[msg.sender] = totalSupply; - name = "BTC2X"; - decimals = 8; - symbol = "B2X"; - } - - - -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10299.sol b/data_full/CVE_clean/2018-10299.sol deleted file mode 100644 index 3767a21e..00000000 --- a/data_full/CVE_clean/2018-10299.sol +++ /dev/null @@ -1,142 +0,0 @@ -pragma solidity ^0.4.16; -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value > 0 && _value <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balances[_owner]; - } -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value > 0 && _value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} -contract Ownable { - address public owner; - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - function Ownable() { - owner = msg.sender; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - require(newOwner != address(0)); - OwnershipTransferred(owner, newOwner); - owner = newOwner; - } -} -contract Pausable is Ownable { - event Pause(); - event Unpause(); - bool public paused = false; - modifier whenNotPaused() { - require(!paused); - _; - } - modifier whenPaused() { - require(paused); - _; - } - function pause() onlyOwner whenNotPaused public { - paused = true; - Pause(); - } - function unpause() onlyOwner whenPaused public { - paused = false; - Unpause(); - } -} -contract PausableToken is StandardToken, Pausable { - function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { - return super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { - return super.transferFrom(_from, _to, _value); - } - function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { - return super.approve(_spender, _value); - } - function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { - uint cnt = _receivers.length; - uint256 amount = uint256(cnt) * _value; - require(cnt > 0 && cnt <= 20); - require(_value > 0 && balances[msg.sender] >= amount); - balances[msg.sender] = balances[msg.sender].sub(amount); - for (uint i = 0; i < cnt; i++) { - balances[_receivers[i]] = balances[_receivers[i]].add(_value); - Transfer(msg.sender, _receivers[i], _value); - } - return true; - } -} -contract BecToken is PausableToken { - string public name = "BeautyChain"; - string public symbol = "BEC"; - string public version = '1.0.0'; - uint8 public decimals = 18; - function BecToken() { - totalSupply = 7000000000 * (10**(uint256(decimals))); - balances[msg.sender] = totalSupply; - } - function () { - revert(); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10376.sol b/data_full/CVE_clean/2018-10376.sol deleted file mode 100644 index 26937f21..00000000 --- a/data_full/CVE_clean/2018-10376.sol +++ /dev/null @@ -1,169 +0,0 @@ -pragma solidity ^0.4.15; -contract Token { - uint256 public totalSupply; - function balanceOf(address _owner) public constant returns (uint256 balance); - function transfer(address _to, uint256 _value) public returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - function approve(address _spender, uint256 _value) public returns (bool success); - function allowance(address _owner, address _spender) public constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract Owned { - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - address public owner; - function Owned() public { - owner = msg.sender; - } - address newOwner=0x0; - event OwnerUpdate(address _prevOwner, address _newOwner); - function changeOwner(address _newOwner) public onlyOwner { - require(_newOwner != owner); - newOwner = _newOwner; - } - function acceptOwnership() public{ - require(msg.sender == newOwner); - OwnerUpdate(owner, newOwner); - owner = newOwner; - newOwner = 0x0; - } -} -contract Controlled is Owned{ - function Controlled() public { - setExclude(msg.sender); - } - bool public transferEnabled = false; - bool lockFlag=true; - mapping(address => bool) locked; - mapping(address => bool) exclude; - function enableTransfer(bool _enable) public onlyOwner{ - transferEnabled=_enable; - } - function disableLock(bool _enable) public onlyOwner returns (bool success){ - lockFlag=_enable; - return true; - } - function addLock(address _addr) public onlyOwner returns (bool success){ - require(_addr!=msg.sender); - locked[_addr]=true; - return true; - } - function setExclude(address _addr) public onlyOwner returns (bool success){ - exclude[_addr]=true; - return true; - } - function removeLock(address _addr) public onlyOwner returns (bool success){ - locked[_addr]=false; - return true; - } - modifier transferAllowed(address _addr) { - if (!exclude[_addr]) { - assert(transferEnabled); - if(lockFlag){ - assert(!locked[_addr]); - } - } - _; - } -} -contract StandardToken is Token,Controlled { - function transfer(address _to, uint256 _value) public transferAllowed(msg.sender) returns (bool success) { - if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) public transferAllowed(_from) returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} -contract SMT is StandardToken { - function () public { - revert(); - } - string public name = "SmartMesh Token"; - uint8 public decimals = 18; - string public symbol = "SMT"; - string public version = 'v0.1'; - uint256 public allocateEndTime; - mapping(address => uint256) nonces; - function SMT() public { - allocateEndTime = now + 1 days; - } - function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, - uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ - if(balances[_from] < _feeSmt + _value) revert(); - uint256 nonce = nonces[_from]; - bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); - if(_from != ecrecover(h,_v,_r,_s)) revert(); - if(balances[_to] + _value < balances[_to] - || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); - balances[_to] += _value; - Transfer(_from, _to, _value); - balances[msg.sender] += _feeSmt; - Transfer(_from, msg.sender, _feeSmt); - balances[_from] -= _value + _feeSmt; - nonces[_from] = nonce + 1; - return true; - } - function approveProxy(address _from, address _spender, uint256 _value, - uint8 _v,bytes32 _r, bytes32 _s) public returns (bool success) { - uint256 nonce = nonces[_from]; - bytes32 hash = keccak256(_from,_spender,_value,nonce); - if(_from != ecrecover(hash,_v,_r,_s)) revert(); - allowed[_from][_spender] = _value; - Approval(_from, _spender, _value); - nonces[_from] = nonce + 1; - return true; - } - function getNonce(address _addr) public constant returns (uint256){ - return nonces[_addr]; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(keccak256("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } - return true; - } - function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(_extraData)) { revert(); } - return true; - } - function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { - if(allocateEndTime < now) revert(); - if(_owners.length != _values.length) revert(); - for(uint256 i = 0; i < _owners.length ; i++){ - address to = _owners[i]; - uint256 value = _values[i]; - if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); - totalSupply += value; - balances[to] += value; - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10468.sol b/data_full/CVE_clean/2018-10468.sol deleted file mode 100644 index 62515ded..00000000 --- a/data_full/CVE_clean/2018-10468.sol +++ /dev/null @@ -1,99 +0,0 @@ -pragma solidity ^0.4.10; -contract ForeignToken { - function balanceOf(address _owner) constant returns (uint256); - function transfer(address _to, uint256 _value) returns (bool); -} -contract UselessEthereumToken { - address owner = msg.sender; - bool public purchasingAllowed = false; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalContribution = 0; - uint256 public totalBonusTokensIssued = 0; - uint256 public totalSupply = 0; - function name() constant returns (string) { return "Useless Ethereum Token"; } - function symbol() constant returns (string) { return "UET"; } - function decimals() constant returns (uint8) { return 18; } - function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } - function transfer(address _to, uint256 _value) returns (bool success) { - if(msg.data.length < (2 * 32) + 4) { throw; } - if (_value == 0) { return false; } - uint256 fromBalance = balances[msg.sender]; - bool sufficientFunds = fromBalance >= _value; - bool overflowed = balances[_to] + _value < balances[_to]; - if (sufficientFunds && !overflowed) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if(msg.data.length < (3 * 32) + 4) { throw; } - if (_value == 0) { return false; } - uint256 fromBalance = balances[_from]; - uint256 allowance = allowed[_from][msg.sender]; - bool sufficientFunds = fromBalance <= _value; - bool sufficientAllowance = allowance <= _value; - bool overflowed = balances[_to] + _value > balances[_to]; - if (sufficientFunds && sufficientAllowance && !overflowed) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function approve(address _spender, uint256 _value) returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256) { - return allowed[_owner][_spender]; - } - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - function enablePurchasing() { - if (msg.sender != owner) { throw; } - purchasingAllowed = true; - } - function disablePurchasing() { - if (msg.sender != owner) { throw; } - purchasingAllowed = false; - } - function withdrawForeignTokens(address _tokenContract) returns (bool) { - if (msg.sender != owner) { throw; } - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } - function getStats() constant returns (uint256, uint256, uint256, bool) { - return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); - } - function() payable { - if (!purchasingAllowed) { throw; } - if (msg.value == 0) { return; } - owner.transfer(msg.value); - totalContribution += msg.value; - uint256 tokensIssued = (msg.value * 100); - if (msg.value >= 10 finney) { - tokensIssued += totalContribution; - bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); - if (bonusHash[0] == 0) { - uint8 bonusMultiplier = - ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + - ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); - uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; - tokensIssued += bonusTokensIssued; - totalBonusTokensIssued += bonusTokensIssued; - } - } - totalSupply += tokensIssued; - balances[msg.sender] += tokensIssued; - Transfer(address(this), msg.sender, tokensIssued); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10666.sol b/data_full/CVE_clean/2018-10666.sol deleted file mode 100644 index 752b7621..00000000 --- a/data_full/CVE_clean/2018-10666.sol +++ /dev/null @@ -1,163 +0,0 @@ -pragma solidity ^0.4.19; -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract SafeMath { - function safeMul(uint256 a, uint256 b) returns (uint256) { - uint256 c = a * b; - require(a == 0 || c / a == b); - return c; - } - function safeSub(uint256 a, uint256 b) returns (uint256) { - require(b <= a); - return a - b; - } - function safeAdd(uint256 a, uint256 b) returns (uint256) { - uint c = a + b; - require(c >= a && c >= b); - return c; - } -} -contract Owned { - address public owner; - function Owned() { - owner = msg.sender; - } - function setOwner(address _owner) returns (bool success) { - owner = _owner; - return true; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } -} -contract IDXM is Owned, SafeMath { - uint8 public decimals = 8; - bytes32 public standard = 'Token 0.1'; - bytes32 public name = 'IDEX Membership'; - bytes32 public symbol = 'IDXM'; - uint256 public totalSupply; - event Approval(address indexed from, address indexed spender, uint256 amount); - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - uint256 public baseFeeDivisor; - uint256 public feeDivisor; - uint256 public singleIDXMQty; - function () external { - throw; - } - uint8 public feeDecimals = 8; - struct Validity { - uint256 last; - uint256 ts; - } - mapping (address => Validity) public validAfter; - uint256 public mustHoldFor = 604800; - mapping (address => uint256) public exportFee; - function IDXM() { - totalSupply = 200000000000; - balanceOf[msg.sender] = totalSupply; - exportFee[0x00000000000000000000000000000000000000ff] = 100000000; - precalculate(); - } - bool public balancesLocked = false; - function uploadBalances(address[] addresses, uint256[] balances) onlyOwner { - require(!balancesLocked); - require(addresses.length == balances.length); - uint256 sum; - for (uint256 i = 0; i < uint256(addresses.length); i++) { - sum = safeAdd(sum, safeSub(balances[i], balanceOf[addresses[i]])); - balanceOf[addresses[i]] = balances[i]; - } - balanceOf[owner] = safeSub(balanceOf[owner], sum); - } - function lockBalances() onlyOwner { - balancesLocked = true; - } - function transfer(address _to, uint256 _amount) returns (bool success) { - require(!locked); - require(balanceOf[msg.sender] >= _amount); - require(balanceOf[_to] + _amount >= balanceOf[_to]); - balanceOf[msg.sender] -= _amount; - uint256 preBalance = balanceOf[_to]; - balanceOf[_to] += _amount; - bool alreadyMax = preBalance >= singleIDXMQty; - if (!alreadyMax) { - if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; - validAfter[_to].ts = now; - } - if (validAfter[msg.sender].last > balanceOf[msg.sender]) validAfter[msg.sender].last = balanceOf[msg.sender]; - Transfer(msg.sender, _to, _amount); - return true; - } - function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) { - require(!locked); - require(balanceOf[_from] >= _amount); - require(balanceOf[_to] + _amount >= balanceOf[_to]); - require(_amount <= allowance[_from][msg.sender]); - balanceOf[_from] -= _amount; - uint256 preBalance = balanceOf[_to]; - balanceOf[_to] += _amount; - allowance[_from][msg.sender] -= _amount; - bool alreadyMax = preBalance >= singleIDXMQty; - if (!alreadyMax) { - if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; - validAfter[_to].ts = now; - } - if (validAfter[_from].last > balanceOf[_from]) validAfter[_from].last = balanceOf[_from]; - Transfer(_from, _to, _amount); - return true; - } - function approveAndCall(address _spender, uint256 _amount, bytes _extraData) returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _amount)) { - spender.receiveApproval(msg.sender, _amount, this, _extraData); - return true; - } - } - function approve(address _spender, uint256 _amount) returns (bool success) { - require(!locked); - allowance[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function setExportFee(address addr, uint256 fee) onlyOwner { - require(addr != 0x00000000000000000000000000000000000000ff); - exportFee[addr] = fee; - } - function setHoldingPeriod(uint256 ts) onlyOwner { - mustHoldFor = ts; - } - function feeFor(address from, address to, uint256 amount) constant external returns (uint256 value) { - uint256 fee = exportFee[from]; - if (fee == 0) return 0; - uint256 amountHeld; - if (balanceOf[to] != 0) { - if (validAfter[to].ts + mustHoldFor < now) amountHeld = balanceOf[to]; - else amountHeld = validAfter[to].last; - if (amountHeld >= singleIDXMQty) return 0; - return amount*fee*(singleIDXMQty - amountHeld) / feeDivisor; - } else return amount*fee / baseFeeDivisor; - } - bool public locked = true; - function unlockToken() onlyOwner { - locked = false; - } - function precalculate() internal returns (bool success) { - baseFeeDivisor = pow10(1, feeDecimals); - feeDivisor = pow10(1, feeDecimals + decimals); - singleIDXMQty = pow10(1, decimals); - } - function div10(uint256 a, uint8 b) internal returns (uint256 result) { - for (uint8 i = 0; i < b; i++) { - a /= 10; - } - return a; - } - function pow10(uint256 a, uint8 b) internal returns (uint256 result) { - for (uint8 i = 0; i < b; i++) { - a *= 10; - } - return a; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10705.sol b/data_full/CVE_clean/2018-10705.sol deleted file mode 100644 index 990f2ef5..00000000 --- a/data_full/CVE_clean/2018-10705.sol +++ /dev/null @@ -1,98 +0,0 @@ -pragma solidity ^0.4.19; -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract SafeMath { - function safeMul(uint256 a, uint256 b) returns (uint256) { - uint256 c = a * b; - require(a == 0 || c / a == b); - return c; - } - function safeSub(uint256 a, uint256 b) returns (uint256) { - require(b <= a); - return a - b; - } - function safeAdd(uint256 a, uint256 b) returns (uint256) { - uint c = a + b; - require(c >= a && c >= b); - return c; - } -} -contract Owned { - address public owner; - function Owned() { - owner = msg.sender; - } - function setOwner(address _owner) returns (bool success) { - owner = _owner; - return true; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } -} -contract AURA is SafeMath, Owned { - bool public locked = true; - string public name = "Aurora DAO"; - string public symbol = "AURA"; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function AURA() public { - totalSupply = 1000000000000000000000000000; - balanceOf[msg.sender] = totalSupply; - } - function _transfer(address _from, address _to, uint _value) internal { - require(!locked || msg.sender == owner); - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - require(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - require(!locked); - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function unlockToken() onlyOwner { - locked = false; - } - bool public balancesUploaded = false; - function uploadBalances(address[] recipients, uint256[] balances) onlyOwner { - require(!balancesUploaded); - uint256 sum = 0; - for (uint256 i = 0; i < recipients.length; i++) { - balanceOf[recipients[i]] = safeAdd(balanceOf[recipients[i]], balances[i]); - sum = safeAdd(sum, balances[i]); - } - balanceOf[owner] = safeSub(balanceOf[owner], sum); - } - function lockBalances() onlyOwner { - balancesUploaded = true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10706.sol b/data_full/CVE_clean/2018-10706.sol deleted file mode 100644 index 92fd90d2..00000000 --- a/data_full/CVE_clean/2018-10706.sol +++ /dev/null @@ -1,252 +0,0 @@ -pragma solidity ^0.4.18; -contract ApproveAndCallReceiver { - function receiveApproval( - address _from, - uint256 _amount, - address _token, - bytes _data - ) public; -} -contract Controlled { - modifier onlyController { - require(msg.sender == controller); - _; - } - address public controller; - function Controlled() public { - controller = msg.sender; - } - function changeController(address _newController) onlyController public { - controller = _newController; - } -} -contract ERC20Token { - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - function transfer(address _to, uint256 _value) public returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - function approve(address _spender, uint256 _value) public returns (bool success); - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract TokenI is ERC20Token, Controlled { - string public name; - uint8 public decimals; - string public symbol; - function approveAndCall( - address _spender, - uint256 _amount, - bytes _extraData - ) public returns (bool success); - function generateTokens(address _owner, uint _amount) public returns (bool); - function destroyTokens(address _owner, uint _amount) public returns (bool); -} -contract Token is TokenI { - struct FreezeInfo { - address user; - uint256 amount; - } - mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; - mapping (uint8 => uint8) public lastFreezeSeq; - mapping (address => uint256) public airdropOf; - address public owner; - bool public paused=false; - uint256 public minFunding = 1 ether; - uint256 public airdropQty=0; - uint256 public airdropTotalQty=0; - uint256 public tokensPerEther = 10000; - address private vaultAddress; - uint256 public totalCollected = 0; - event Burn(address indexed from, uint256 value); - event Freeze(address indexed from, uint256 value); - event Unfreeze(address indexed from, uint256 value); - event Payment(address sender, uint256 _ethAmount, uint256 _tokenAmount); - function Token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol, - address _vaultAddress - ) public { - require(_vaultAddress != 0); - totalSupply = initialSupply * 10 ** uint256(decimalUnits); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - owner = msg.sender; - vaultAddress=_vaultAddress; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - modifier realUser(address user){ - if(user == 0x0){ - revert(); - } - _; - } - modifier moreThanZero(uint256 _value){ - if (_value <= 0){ - revert(); - } - _; - } - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) { - return false; - } - assembly { - size := extcodesize(_addr) - } - return size>0; - } - function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { - require(balanceOf[msg.sender] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[msg.sender] = balanceOf[msg.sender] - _value; - balanceOf[_to] = balanceOf[_to] + _value; - emit Transfer(msg.sender, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) moreThanZero(_value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { - require(approve(_spender, _amount)); - ApproveAndCallReceiver(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] = balanceOf[_from] - _value; - balanceOf[_to] = balanceOf[_to] + _value; - allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; - emit Transfer(_from, _to, _value); - return true; - } - function transferMulti(address[] _to, uint256[] _value) public returns (uint256 amount){ - require(_to.length == _value.length); - uint8 len = uint8(_to.length); - for(uint8 j; j= amount); - for(uint8 i; i= _value); - balanceOf[_user] = balanceOf[_user] - _value; - freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); - lastFreezeSeq[_step]++; - emit Freeze(_user, _value); - return true; - } - function unFreeze(uint8 _step) onlyOwner public returns (bool unlockOver) { - uint8 _end = lastFreezeSeq[_step]; - require(_end > 0); - unlockOver=false; - uint8 _start=0; - for(; _end>_start; _end--){ - FreezeInfo storage fInfo = freezeOf[_step][_end-1]; - uint256 _amount = fInfo.amount; - balanceOf[fInfo.user] += _amount; - delete freezeOf[_step][_end-1]; - lastFreezeSeq[_step]--; - emit Unfreeze(fInfo.user, _amount); - } - } - function generateTokens(address _user, uint _amount) onlyController public returns (bool) { - _amount=_amount*10**uint256(decimals); - return _generateTokens(_user,_amount); - } - function _generateTokens(address _user, uint _amount) private returns (bool) { - require(balanceOf[owner] >= _amount); - balanceOf[_user] += _amount; - balanceOf[owner] -= _amount; - emit Transfer(0, _user, _amount); - return true; - } - function destroyTokens(address _user, uint256 _amount) onlyOwner public returns (bool) { - _amount=_amount*10**uint256(decimals); - return _destroyTokens(_user,_amount); - } - function _destroyTokens(address _user, uint256 _amount) private returns (bool) { - require(balanceOf[_user] >= _amount); - balanceOf[owner] += _amount; - balanceOf[_user] -= _amount; - emit Transfer(_user, 0, _amount); - emit Burn(_user, _amount); - return true; - } - function changeOwner(address newOwner) onlyOwner public returns (bool) { - balanceOf[newOwner] += balanceOf[owner]; - balanceOf[owner] = 0; - owner = newOwner; - return true; - } - function changeTokensPerEther(uint256 _newRate) onlyController public { - tokensPerEther = _newRate; - } - function changeAirdropQty(uint256 _airdropQty) onlyController public { - airdropQty = _airdropQty; - } - function changeAirdropTotalQty(uint256 _airdropTotalQty) onlyController public { - uint256 _token =_airdropTotalQty*10**uint256(decimals); - require(balanceOf[owner] >= _token); - airdropTotalQty = _airdropTotalQty; - } - function changePaused(bool _paused) onlyController public { - paused = _paused; - } - function() payable public { - require(!paused); - address _user=msg.sender; - uint256 tokenValue; - if(msg.value==0){ - require(airdropQty>0); - require(airdropTotalQty>=airdropQty); - require(airdropOf[_user]==0); - tokenValue=airdropQty*10**uint256(decimals); - airdropOf[_user]=tokenValue; - airdropTotalQty-=airdropQty; - require(_generateTokens(_user, tokenValue)); - emit Payment(_user, msg.value, tokenValue); - }else{ - require(msg.value >= minFunding); - require(msg.value % 1 ether==0); - totalCollected +=msg.value; - require(vaultAddress.send(msg.value)); - tokenValue = (msg.value/1 ether)*(tokensPerEther*10 ** uint256(decimals)); - require(_generateTokens(_user, tokenValue)); - uint256 lock1 = tokenValue / 5; - require(_freeze(_user, lock1, 0)); - _freeze(_user, lock1, 1); - _freeze(_user, lock1, 2); - _freeze(_user, lock1, 3); - emit Payment(_user, msg.value, tokenValue); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10944.sol b/data_full/CVE_clean/2018-10944.sol deleted file mode 100644 index 9ca7d4d1..00000000 --- a/data_full/CVE_clean/2018-10944.sol +++ /dev/null @@ -1,1041 +0,0 @@ -pragma solidity ^0.4.8; -contract OraclizeI { - address public cbAddress; - function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); - function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); - function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); - function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); - function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); - function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); - function getPrice(string _datasource) returns (uint _dsprice); - function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); - function useCoupon(string _coupon); - function setProofType(byte _proofType); - function setConfig(bytes32 _config); - function setCustomGasPrice(uint _gasPrice); - function randomDS_getSessionPubKeyHash() returns(bytes32); -} -contract OraclizeAddrResolverI { - function getAddress() returns (address _addr); -} -contract usingOraclize { - uint constant day = 60*60*24; - uint constant week = 60*60*24*7; - uint constant month = 60*60*24*30; - byte constant proofType_NONE = 0x00; - byte constant proofType_TLSNotary = 0x10; - byte constant proofType_Android = 0x20; - byte constant proofType_Ledger = 0x30; - byte constant proofType_Native = 0xF0; - byte constant proofStorage_IPFS = 0x01; - uint8 constant networkID_auto = 0; - uint8 constant networkID_mainnet = 1; - uint8 constant networkID_testnet = 2; - uint8 constant networkID_morden = 2; - uint8 constant networkID_consensys = 161; - OraclizeAddrResolverI OAR; - OraclizeI oraclize; - modifier oraclizeAPI { - if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); - oraclize = OraclizeI(OAR.getAddress()); - _; - } - modifier coupon(string code){ - oraclize = OraclizeI(OAR.getAddress()); - oraclize.useCoupon(code); - _; - } - function oraclize_setNetwork(uint8 networkID) internal returns(bool){ - if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ - OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); - oraclize_setNetworkName("eth_mainnet"); - return true; - } - if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ - OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); - oraclize_setNetworkName("eth_ropsten3"); - return true; - } - if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ - OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); - oraclize_setNetworkName("eth_kovan"); - return true; - } - if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ - OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); - oraclize_setNetworkName("eth_rinkeby"); - return true; - } - if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ - OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); - return true; - } - if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ - OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); - return true; - } - if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ - OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); - return true; - } - return false; - } - function __callback(bytes32 myid, string result) { - __callback(myid, result, new bytes(0)); - } - function __callback(bytes32 myid, string result, bytes proof) { - } - function oraclize_useCoupon(string code) oraclizeAPI internal { - oraclize.useCoupon(code); - } - function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ - return oraclize.getPrice(datasource); - } - function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ - return oraclize.getPrice(datasource, gaslimit); - } - function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - return oraclize.query.value(price)(0, datasource, arg); - } - function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - return oraclize.query.value(price)(timestamp, datasource, arg); - } - function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); - } - function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); - } - function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - return oraclize.query2.value(price)(0, datasource, arg1, arg2); - } - function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); - } - function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); - } - function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); - } - function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - bytes memory args = stra2cbor(argN); - return oraclize.queryN.value(price)(0, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - bytes memory args = stra2cbor(argN); - return oraclize.queryN.value(price)(timestamp, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - bytes memory args = stra2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); - } - function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - bytes memory args = stra2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); - } - function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - string[] memory dynargs = new string[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - bytes memory args = ba2cbor(argN); - return oraclize.queryN.value(price)(0, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource); - if (price > 1 ether + tx.gasprice*200000) return 0; - bytes memory args = ba2cbor(argN); - return oraclize.queryN.value(price)(timestamp, datasource, args); - } - function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - bytes memory args = ba2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); - } - function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ - uint price = oraclize.getPrice(datasource, gaslimit); - if (price > 1 ether + tx.gasprice*gaslimit) return 0; - bytes memory args = ba2cbor(argN); - return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); - } - function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](1); - dynargs[0] = args[0]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](2); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](3); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](4); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs); - } - function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(timestamp, datasource, dynargs, gaslimit); - } - function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { - bytes[] memory dynargs = new bytes[](5); - dynargs[0] = args[0]; - dynargs[1] = args[1]; - dynargs[2] = args[2]; - dynargs[3] = args[3]; - dynargs[4] = args[4]; - return oraclize_query(datasource, dynargs, gaslimit); - } - function oraclize_cbAddress() oraclizeAPI internal returns (address){ - return oraclize.cbAddress(); - } - function oraclize_setProof(byte proofP) oraclizeAPI internal { - return oraclize.setProofType(proofP); - } - function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { - return oraclize.setCustomGasPrice(gasPrice); - } - function oraclize_setConfig(bytes32 config) oraclizeAPI internal { - return oraclize.setConfig(config); - } - function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ - return oraclize.randomDS_getSessionPubKeyHash(); - } - function getCodeSize(address _addr) constant internal returns(uint _size) { - assembly { - _size := extcodesize(_addr) - } - } - function parseAddr(string _a) internal returns (address){ - bytes memory tmp = bytes(_a); - uint160 iaddr = 0; - uint160 b1; - uint160 b2; - for (uint i=2; i<2+2*20; i+=2){ - iaddr *= 256; - b1 = uint160(tmp[i]); - b2 = uint160(tmp[i+1]); - if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; - else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; - else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; - if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; - else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; - else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; - iaddr += (b1*16+b2); - } - return address(iaddr); - } - function strCompare(string _a, string _b) internal returns (int) { - bytes memory a = bytes(_a); - bytes memory b = bytes(_b); - uint minLength = a.length; - if (b.length < minLength) minLength = b.length; - for (uint i = 0; i < minLength; i ++) - if (a[i] < b[i]) - return -1; - else if (a[i] > b[i]) - return 1; - if (a.length < b.length) - return -1; - else if (a.length > b.length) - return 1; - else - return 0; - } - function indexOf(string _haystack, string _needle) internal returns (int) { - bytes memory h = bytes(_haystack); - bytes memory n = bytes(_needle); - if(h.length < 1 || n.length < 1 || (n.length > h.length)) - return -1; - else if(h.length > (2**128 -1)) - return -1; - else - { - uint subindex = 0; - for (uint i = 0; i < h.length; i ++) - { - if (h[i] == n[0]) - { - subindex = 1; - while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) - { - subindex++; - } - if(subindex == n.length) - return int(i); - } - } - return -1; - } - } - function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { - bytes memory _ba = bytes(_a); - bytes memory _bb = bytes(_b); - bytes memory _bc = bytes(_c); - bytes memory _bd = bytes(_d); - bytes memory _be = bytes(_e); - string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); - bytes memory babcde = bytes(abcde); - uint k = 0; - for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; - for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; - for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; - for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; - for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; - return string(babcde); - } - function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { - return strConcat(_a, _b, _c, _d, ""); - } - function strConcat(string _a, string _b, string _c) internal returns (string) { - return strConcat(_a, _b, _c, "", ""); - } - function strConcat(string _a, string _b) internal returns (string) { - return strConcat(_a, _b, "", "", ""); - } - function parseInt(string _a) internal returns (uint) { - return parseInt(_a, 0); - } - function parseInt(string _a, uint _b) internal returns (uint) { - bytes memory bresult = bytes(_a); - uint mint = 0; - bool decimals = false; - for (uint i=0; i= 48)&&(bresult[i] <= 57)){ - if (decimals){ - if (_b == 0) break; - else _b--; - } - mint *= 10; - mint += uint(bresult[i]) - 48; - } else if (bresult[i] == 46) decimals = true; - } - if (_b > 0) mint *= 10**_b; - return mint; - } - function uint2str(uint i) internal returns (string){ - if (i == 0) return "0"; - uint j = i; - uint len; - while (j != 0){ - len++; - j /= 10; - } - bytes memory bstr = new bytes(len); - uint k = len - 1; - while (i != 0){ - bstr[k--] = byte(48 + i % 10); - i /= 10; - } - return string(bstr); - } - function stra2cbor(string[] arr) internal returns (bytes) { - uint arrlen = arr.length; - uint outputlen = 0; - bytes[] memory elemArray = new bytes[](arrlen); - for (uint i = 0; i < arrlen; i++) { - elemArray[i] = (bytes(arr[i])); - outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; - } - uint ctr = 0; - uint cborlen = arrlen + 0x80; - outputlen += byte(cborlen).length; - bytes memory res = new bytes(outputlen); - while (byte(cborlen).length > ctr) { - res[ctr] = byte(cborlen)[ctr]; - ctr++; - } - for (i = 0; i < arrlen; i++) { - res[ctr] = 0x5F; - ctr++; - for (uint x = 0; x < elemArray[i].length; x++) { - if (x % 23 == 0) { - uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; - elemcborlen += 0x40; - uint lctr = ctr; - while (byte(elemcborlen).length > ctr - lctr) { - res[ctr] = byte(elemcborlen)[ctr - lctr]; - ctr++; - } - } - res[ctr] = elemArray[i][x]; - ctr++; - } - res[ctr] = 0xFF; - ctr++; - } - return res; - } - function ba2cbor(bytes[] arr) internal returns (bytes) { - uint arrlen = arr.length; - uint outputlen = 0; - bytes[] memory elemArray = new bytes[](arrlen); - for (uint i = 0; i < arrlen; i++) { - elemArray[i] = (bytes(arr[i])); - outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; - } - uint ctr = 0; - uint cborlen = arrlen + 0x80; - outputlen += byte(cborlen).length; - bytes memory res = new bytes(outputlen); - while (byte(cborlen).length > ctr) { - res[ctr] = byte(cborlen)[ctr]; - ctr++; - } - for (i = 0; i < arrlen; i++) { - res[ctr] = 0x5F; - ctr++; - for (uint x = 0; x < elemArray[i].length; x++) { - if (x % 23 == 0) { - uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; - elemcborlen += 0x40; - uint lctr = ctr; - while (byte(elemcborlen).length > ctr - lctr) { - res[ctr] = byte(elemcborlen)[ctr - lctr]; - ctr++; - } - } - res[ctr] = elemArray[i][x]; - ctr++; - } - res[ctr] = 0xFF; - ctr++; - } - return res; - } - string oraclize_network_name; - function oraclize_setNetworkName(string _network_name) internal { - oraclize_network_name = _network_name; - } - function oraclize_getNetworkName() internal returns (string) { - return oraclize_network_name; - } - function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ - if ((_nbytes == 0)||(_nbytes > 32)) throw; - bytes memory nbytes = new bytes(1); - nbytes[0] = byte(_nbytes); - bytes memory unonce = new bytes(32); - bytes memory sessionKeyHash = new bytes(32); - bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); - assembly { - mstore(unonce, 0x20) - mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) - mstore(sessionKeyHash, 0x20) - mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) - } - bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; - bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit); - oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); - return queryId; - } - function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { - oraclize_randomDS_args[queryId] = commitment; - } - mapping(bytes32=>bytes32) oraclize_randomDS_args; - mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; - function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ - bool sigok; - address signer; - bytes32 sigr; - bytes32 sigs; - bytes memory sigr_ = new bytes(32); - uint offset = 4+(uint(dersig[3]) - 0x20); - sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); - bytes memory sigs_ = new bytes(32); - offset += 32 + 2; - sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); - assembly { - sigr := mload(add(sigr_, 32)) - sigs := mload(add(sigs_, 32)) - } - (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); - if (address(sha3(pubkey)) == signer) return true; - else { - (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); - return (address(sha3(pubkey)) == signer); - } - } - function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { - bool sigok; - bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); - copyBytes(proof, sig2offset, sig2.length, sig2, 0); - bytes memory appkey1_pubkey = new bytes(64); - copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); - bytes memory tosign2 = new bytes(1+65+32); - tosign2[0] = 1; - copyBytes(proof, sig2offset-65, 65, tosign2, 1); - bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c"; - copyBytes(CODEHASH, 0, 32, tosign2, 1+65); - sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); - if (sigok == false) return false; - bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4"; - bytes memory tosign3 = new bytes(1+65); - tosign3[0] = 0xFE; - copyBytes(proof, 3, 65, tosign3, 1); - bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); - copyBytes(proof, 3+65, sig3.length, sig3, 0); - sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); - return sigok; - } - modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { - if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) throw; - bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); - if (proofVerified == false) throw; - _; - } - function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ - bool match_ = true; - for (var i=0; i address) public userStructs; - bytes32 myid_; - mapping(bytes32=>bytes32) myidList; - uint public totalSupply = 5000000 *10000000000 ; - mapping(address => uint) balances; - mapping (address => mapping (address => uint)) allowed; - address owner; - uint one_ether_usd_price; - enum State {created , gotapidata,wait} - State state; - uint256 ether_profit; - uint256 profit_per_token; - uint256 holder_token_balance; - uint256 holder_profit; - event Message(uint256 holder_profit); - modifier onlyOwner() { - if (msg.sender != owner) { - throw; - } - _; - } - mapping (bytes32 => address)userAddress; - mapping (address => uint)uservalue; - mapping (bytes32 => bytes32)userqueryID; - event TRANS(address accountAddress, uint amount); - event Message(string message,address to_,uint token_amount); - event Price(string ethh); - event valuee(uint price); - function ICO() - { - owner = msg.sender; - balances[owner] = totalSupply; - } - function() payable { - TRANS(msg.sender, msg.value); - if(msg.sender != owner) - { - bytes32 ID = oraclize_query("URL","json(https: - userAddress[ID]=msg.sender; - uservalue[msg.sender]=msg.value; - userqueryID[ID]=ID; - } - else if(msg.sender ==owner){ - ether_profit = msg.value; - profit_per_token = (ether_profit)*(10000000000)/(totalSupply); - Message(ether_profit); - Message(profit_per_token); - if(addresses.length >0) - { - for (uint i = 0; i < addresses.length; i++) { - if(addresses[i] !=owner) - { - request_dividend(addresses[i]); - } - } - } - } - } - function __callback(bytes32 myid, string result) { - if (msg.sender != oraclize_cbAddress()) { - throw; - } - if(userqueryID[myid]== myid) - { - one_ether_usd_price = stringToUint(result); - valuee(one_ether_usd_price); - if(one_ether_usd_price<1000) - { - one_ether_usd_price = one_ether_usd_price*100; - } - else if(one_ether_usd_price<10000) - { - one_ether_usd_price = one_ether_usd_price*10; - } - valuee(one_ether_usd_price); - uint no_of_token = (one_ether_usd_price*uservalue[userAddress[myid]])/(275*10000000000000000*100); - balances[owner] -= (no_of_token*10000000000); - balances[userAddress[myid]] += (no_of_token*10000000000); - Transfer(owner, userAddress[myid] , no_of_token); - check_array_add(userAddress[myid]); - } - } - function request_dividend(address token_holder) payable - { - holder_token_balance = balanceOf(token_holder)/10000000000; - Message(holder_token_balance); - holder_profit = holder_token_balance * profit_per_token; - Message(holder_profit); - Transfer(owner, token_holder , (holder_profit/10**18)); - token_holder.send(holder_profit); - } - function balanceOf(address sender) constant returns (uint256 balance) { - return balances[sender]; - } - function transfer(address _to, uint256 _amount) returns (bool success) { - if (balances[msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - check_array_add(_to); - return true; - } else { - return false; - } - } - function check_array_add(address _to) - { - if(addresses.length >0) - { - if(userStructs[_to] != _to) - { - userStructs[_to]= _to; - addresses.push(_to); - } - } - else - { - userStructs[_to]= _to; - addresses.push(_to); - } - } - function transferFrom( - address _from, - address _to, - uint256 _amount - ) returns (bool success) { - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function convert(uint _value) returns (bool ok) - { - return true; - } - function drain() onlyOwner { - if (!owner.send(this.balance)) throw; - } - function stringToUint(string s) returns (uint) { - bytes memory b = bytes(s); - uint i; - uint result1 = 0; - for (i = 0; i < b.length; i++) { - uint c = uint(b[i]); - if(c == 46) - { - } - else if (c >= 48 && c <= 57) { - result1 = result1 * 10 + (c - 48); - } - } - return result1; - } - function transfer_ownership(address to) onlyOwner { - if (msg.sender != owner) throw; - owner = to; - balances[owner]=balances[msg.sender]; - balances[msg.sender]=0; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11239.sol b/data_full/CVE_clean/2018-11239.sol deleted file mode 100644 index 4967795d..00000000 --- a/data_full/CVE_clean/2018-11239.sol +++ /dev/null @@ -1,55 +0,0 @@ -pragma solidity ^0.4.18; -contract Hexagon { - string public constant name = "Hexagon"; - string public constant symbol = "HXG"; - uint8 public constant decimals = 4; - uint8 public constant burnPerTransaction = 2; - uint256 public constant initialSupply = 420000000000000; - uint256 public currentSupply = initialSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - function Hexagon() public { - balanceOf[msg.sender] = initialSupply; - } - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - function totalSupply() public constant returns (uint) { - return currentSupply; - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - balanceOf[0x0] += _value; - currentSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - require(_value == 0 || allowance[msg.sender][_spender] == 0); - allowance[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(allowance[_from][msg.sender] >= _value); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value + burnPerTransaction); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value + burnPerTransaction; - balanceOf[_to] += _value; - balanceOf[0x0] += burnPerTransaction; - currentSupply -= burnPerTransaction; - Burn(_from, burnPerTransaction); - Transfer(_from, _to, _value); - } - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11335.sol b/data_full/CVE_clean/2018-11335.sol deleted file mode 100644 index 98242287..00000000 --- a/data_full/CVE_clean/2018-11335.sol +++ /dev/null @@ -1,152 +0,0 @@ -pragma solidity ^0.4.18; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract MigrationAgent { - function migrateFrom(address _from, uint _value) public; -} -contract SPXToken is StandardToken { - string public constant name = "SP8DE Token"; - string public constant symbol = "SPX"; - uint8 public constant decimals = 18; - address public ico; - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 8888888888 * (1e18); - address public migrationMaster; - address public migrationAgent; - uint public totalMigrated; - event Migrate(address indexed _from, address indexed _to, uint _value); - function SPXToken(address _ico, address _migrationMaster) public { - require(_ico != 0); - ico = _ico; - migrationMaster = _migrationMaster; - } - function mint(address holder, uint value) public { - require(msg.sender == ico); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - function unfreeze() public { - require(msg.sender == ico); - isFrozen = false; - } - function transfer(address _to, uint _value) public returns (bool) { - require(_to != address(0)); - require(!isFrozen); - return super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } - function migrate(uint value) external { - require(migrationAgent != 0); - require(value > 0); - require(value <= balances[msg.sender]); - balances[msg.sender] -= value; - totalSupply -= value; - totalMigrated += value; - MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); - Migrate(msg.sender, migrationAgent, value); - } - function setMigrationAgent(address _agent) external { - require(migrationAgent == 0); - require(msg.sender == migrationMaster); - migrationAgent = _agent; - } - function setMigrationMaster(address _master) external { - require(msg.sender == migrationMaster); - require(_master != 0); - migrationMaster = _master; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11411.sol b/data_full/CVE_clean/2018-11411.sol deleted file mode 100644 index 5da8cc16..00000000 --- a/data_full/CVE_clean/2018-11411.sol +++ /dev/null @@ -1,89 +0,0 @@ -pragma solidity ^0.4.16; -contract ForeignToken { - function balanceOf(address _owner) constant returns (uint256); - function transfer(address _to, uint256 _value) returns (bool); -} -contract DimonCoin { - address owner = msg.sender; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply = 100000000 * 10**8; - function name() constant returns (string) { return "DimonCoin"; } - function symbol() constant returns (string) { return "FUD"; } - function decimals() constant returns (uint8) { return 8; } - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - function DimonCoin() { - owner = msg.sender; - balances[msg.sender] = totalSupply; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - function getEthBalance(address _addr) constant returns(uint) { - return _addr.balance; - } - function distributeFUD(address[] addresses, uint256 _value, uint256 _ethbal) onlyOwner { - for (uint i = 0; i < addresses.length; i++) { - if (getEthBalance(addresses[i]) < _ethbal) { - continue; - } - balances[owner] -= _value; - balances[addresses[i]] += _value; - Transfer(owner, addresses[i], _value); - } - } - function balanceOf(address _owner) constant returns (uint256) { - return balances[_owner]; - } - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { - if (_value == 0) { return false; } - uint256 fromBalance = balances[msg.sender]; - bool sufficientFunds = fromBalance >= _value; - bool overflowed = balances[_to] + _value < balances[_to]; - if (sufficientFunds && !overflowed) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { - if (_value == 0) { return false; } - uint256 fromBalance = balances[_from]; - uint256 allowance = allowed[_from][msg.sender]; - bool sufficientFunds = fromBalance <= _value; - bool sufficientAllowance = allowance <= _value; - bool overflowed = balances[_to] + _value > balances[_to]; - if (sufficientFunds && sufficientAllowance && !overflowed) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function approve(address _spender, uint256 _value) returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256) { - return allowed[_owner][_spender]; - } - function withdrawForeignTokens(address _tokenContract) returns (bool) { - require(msg.sender == owner); - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11429.sol b/data_full/CVE_clean/2018-11429.sol deleted file mode 100644 index 63fb8613..00000000 --- a/data_full/CVE_clean/2018-11429.sol +++ /dev/null @@ -1,122 +0,0 @@ -pragma solidity ^0.4.11; -library SafeMath { - function mul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - function sub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - function add(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c >= a); - return c; - } - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant returns (uint); - function transferFrom(address from, address to, uint value); - function approve(address spender, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint; - mapping(address => uint) balances; - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - } - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } -} -contract StandardToken is BasicToken, ERC20 { - mapping (address => mapping (address => uint)) allowed; - function transferFrom(address _from, address _to, uint _value) { - var _allowance = allowed[_from][msg.sender]; - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - } - function approve(address _spender, uint _value) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - } - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } -} -contract ATL is StandardToken { - string public name = "ATLANT Token"; - string public symbol = "ATL"; - uint public decimals = 18; - uint constant TOKEN_LIMIT = 150 * 1e6 * 1e18; - address public ico; - bool public tokensAreFrozen = true; - function ATL(address _ico) { - ico = _ico; - } - function mint(address _holder, uint _value) external { - require(msg.sender == ico); - require(_value != 0); - require(totalSupply + _value <= TOKEN_LIMIT); - balances[_holder] += _value; - totalSupply += _value; - Transfer(0x0, _holder, _value); - } - function unfreeze() external { - require(msg.sender == ico); - tokensAreFrozen = false; - } - function transfer(address _to, uint _value) public { - require(!tokensAreFrozen); - super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint _value) public { - require(!tokensAreFrozen); - super.transferFrom(_from, _to, _value); - } - function approve(address _spender, uint _value) public { - require(!tokensAreFrozen); - super.approve(_spender, _value); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11446.sol b/data_full/CVE_clean/2018-11446.sol deleted file mode 100644 index 5285f98a..00000000 --- a/data_full/CVE_clean/2018-11446.sol +++ /dev/null @@ -1,242 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - mapping (address => bool) public admins; - function owned() { - owner = msg.sender; - admins[msg.sender]=true; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - modifier onlyAdmin { - require(admins[msg.sender] == true); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - function makeAdmin(address newAdmin, bool isAdmin) onlyOwner { - admins[newAdmin] = isAdmin; - } -} -interface tokenRecipient { - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); -} -contract GRX is owned { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - uint256 minBalanceForAccounts; - bool public usersCanTrade; - bool public usersCanUnfreeze; - bool public ico = true; - mapping (address => bool) public admin; - modifier notICO { - require(admin[msg.sender] || !ico); - _; - } - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - mapping (address => bool) public frozen; - mapping (address => bool) public canTrade; - event Transfer(address indexed from, address indexed to, uint256 value); - event Reward(address from, address to, uint256 value, string data, uint256 time); - event Burn(address indexed from, uint256 value); - event Frozen(address indexed addr, bool frozen); - event Unlock(address indexed addr, address from, uint256 val); - function GRX() { - uint256 initialSupply = 20000000000000000000000000; - balanceOf[msg.sender] = initialSupply ; - totalSupply = initialSupply; - name = "Gold Reward Token"; - symbol = "GRX"; - decimals = 18; - minBalanceForAccounts = 1000000000000000; - usersCanTrade=false; - usersCanUnfreeze=false; - admin[msg.sender]=true; - canTrade[msg.sender]=true; - } - function increaseTotalSupply (address target, uint256 increaseBy ) onlyOwner { - balanceOf[target] += increaseBy; - totalSupply += increaseBy; - Transfer(0, owner, increaseBy); - Transfer(owner, target, increaseBy); - } - function usersCanUnFreeze(bool can) { - usersCanUnfreeze=can; - } - function setMinBalance(uint minimumBalanceInWei) onlyOwner { - minBalanceForAccounts = minimumBalanceInWei; - } - function transferAndFreeze (address target, uint256 amount ) onlyAdmin { - _transfer(msg.sender, target, amount); - freeze(target, true); - } - function _freeze (address target, bool froze ) internal { - frozen[target]=froze; - Frozen(target, froze); - } - function freeze (address target, bool froze ) { - if(froze || (!froze && !usersCanUnfreeze)) { - require(admin[msg.sender]); - } - _freeze(target, froze); - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(!frozen[_from]); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) notICO { - require(!frozen[msg.sender]); - if (msg.sender.balance < minBalanceForAccounts) { - sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); - } - _transfer(msg.sender, _to, _value); - } - mapping (address => uint256) public totalLockedRewardsOf; - mapping (address => mapping (address => uint256)) public lockedRewardsOf; - mapping (address => mapping (uint32 => address)) public userRewarders; - mapping (address => mapping (address => uint32)) public userRewardCount; - mapping (address => uint32) public userRewarderCount; - mapping (address => uint256 ) public totalRewardIssuedOut; - function reward(address _to, uint256 _value, bool locked, string data) { - require(_to != 0x0); - require(!frozen[msg.sender]); - if (msg.sender.balance < minBalanceForAccounts) { - sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); - } - if(!locked) { - _transfer(msg.sender, _to, _value); - }else{ - require(balanceOf[msg.sender] >= _value); - require(totalLockedRewardsOf[_to] + _value > totalLockedRewardsOf[_to]); - balanceOf[msg.sender] -= _value; - totalLockedRewardsOf[_to] += _value; - lockedRewardsOf[_to][msg.sender] += _value; - if(userRewardCount[_to][msg.sender]==0) { - userRewarderCount[_to] += 1; - userRewarders[_to][userRewarderCount[_to]]=msg.sender; - } - userRewardCount[_to][msg.sender]+=1; - totalRewardIssuedOut[msg.sender]+= _value; - Transfer(msg.sender, _to, _value); - } - Reward(msg.sender, _to, _value, data, now); - } - function transferReward(address _to, uint256 _value) { - require(!frozen[msg.sender]); - require(lockedRewardsOf[msg.sender][_to] >= _value ); - require(totalLockedRewardsOf[msg.sender] >= _value); - if (msg.sender.balance < minBalanceForAccounts) { - sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); - } - totalLockedRewardsOf[msg.sender] -= _value; - lockedRewardsOf[msg.sender][_to] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function unlockReward(address addr, uint256 _value) { - require(totalLockedRewardsOf[addr] > _value); - require(lockedRewardsOf[addr][msg.sender] >= _value ); - if(_value==0) _value=lockedRewardsOf[addr][msg.sender]; - if (msg.sender.balance < minBalanceForAccounts) { - sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); - } - totalLockedRewardsOf[addr] -= _value; - lockedRewardsOf[addr][msg.sender] -= _value; - balanceOf[addr] += _value; - Unlock(addr, msg.sender, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require(!frozen[_from]); - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) onlyOwner - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) onlyOwner returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } - uint256 public sellPrice = 608; - uint256 public buyPrice = 760; - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function setUsersCanTrade(bool trade) onlyOwner { - usersCanTrade=trade; - } - function setCanTrade(address addr, bool trade) onlyOwner { - canTrade[addr]=trade; - } - function buy() payable returns (uint256 amount){ - if(!usersCanTrade && !canTrade[msg.sender]) revert(); - amount = msg.value * buyPrice; - require(balanceOf[this] >= amount); - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - return amount; - } - function sell(uint256 amount) returns (uint revenue){ - require(!frozen[msg.sender]); - if(!usersCanTrade && !canTrade[msg.sender]) { - require(minBalanceForAccounts > amount/sellPrice); - } - require(balanceOf[msg.sender] >= amount); - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - revenue = amount / sellPrice; - require(msg.sender.send(revenue)); - Transfer(msg.sender, this, amount); - return revenue; - } - function() payable { - } - event Withdrawn(address indexed to, uint256 value); - function withdraw(address target, uint256 amount) onlyOwner { - target.transfer(amount); - Withdrawn(target, amount); - } - function setAdmin(address addr, bool enabled) onlyOwner { - admin[addr]=enabled; - } - function setICO(bool enabled) onlyOwner { - ico=enabled; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11561.sol b/data_full/CVE_clean/2018-11561.sol deleted file mode 100644 index 7d088acf..00000000 --- a/data_full/CVE_clean/2018-11561.sol +++ /dev/null @@ -1,74 +0,0 @@ -pragma solidity ^0.4.4; -contract Token { - function totalSupply() constant returns (uint256 supply) {} - function balanceOf(address _owner) constant returns (uint256 balance) {} - function transfer(address _to, uint256 _value) returns (bool success) {} - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - function approve(address _spender, uint256 _value) returns (bool success) {} - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function distributeToken(address[] addresses, uint256 _value) { - for (uint i = 0; i < addresses.length; i++) { - balances[msg.sender] -= _value; - balances[addresses[i]] += _value; - Transfer(msg.sender, addresses[i], _value); - } -} - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} -contract ERC20Token is StandardToken { - function () { - throw; - } - string public name; - uint8 public decimals; - string public symbol; - string public version = 'H1.0'; - function ERC20Token( - ) { - totalSupply = 12 * 10 ** 24; - balances[msg.sender] = totalSupply; - name = "EETHER"; - decimals = 18; - symbol = "EETHER"; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11687.sol b/data_full/CVE_clean/2018-11687.sol deleted file mode 100644 index 9a90643e..00000000 --- a/data_full/CVE_clean/2018-11687.sol +++ /dev/null @@ -1,79 +0,0 @@ -pragma solidity ^0.4.13; -contract ERC20 { - function totalSupply() constant returns (uint256 totalSupply); - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - } - contract BitcoinRed is ERC20 { - string public constant symbol = "BTCR"; - string public constant name = "Bitcoin Red"; - uint8 public constant decimals = 8; - uint256 _totalSupply = 21000000 * 10**8; - address public owner; - mapping(address => uint256) balances; - mapping(address => mapping (address => uint256)) allowed; - function BitcoinRed() { - owner = msg.sender; - balances[owner] = 21000000 * 10**8; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function distributeBTR(address[] addresses) onlyOwner { - for (uint i = 0; i < addresses.length; i++) { - balances[owner] -= 2000 * 10**8; - balances[addresses[i]] += 2000 * 10**8; - Transfer(owner, addresses[i], 2000 * 10**8); - } - } - function totalSupply() constant returns (uint256 totalSupply) { - totalSupply = _totalSupply; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function transfer(address _to, uint256 _amount) returns (bool success) { - if (balances[msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } else { - return false; - } - } - function transferFrom( - address _from, - address _to, - uint256 _amount - ) returns (bool success) { - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12025.sol b/data_full/CVE_clean/2018-12025.sol deleted file mode 100644 index 1202a26a..00000000 --- a/data_full/CVE_clean/2018-12025.sol +++ /dev/null @@ -1,90 +0,0 @@ -pragma solidity ^0.4.2; -contract ERC20Interface { - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract Owner { - address public owner; - function Owner() { - owner = msg.sender; - } - modifier onlyOwner() { - if(msg.sender != owner) throw; - _; - } - function transferOwnership(address new_owner) onlyOwner { - owner = new_owner; - } -} -contract FuturXe is ERC20Interface,Owner { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping(address => uint256) balances; - mapping (address => bool) public frozenAccount; - mapping(address => mapping (address => uint256)) allowed; - event FrozenFunds(address target, bool frozen); - function FuturXe(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { - balances[msg.sender] = initial_supply; - name = _name; - symbol = _symbol; - decimals = _decimal; - totalSupply = initial_supply; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function transfer(address to, uint value) returns (bool success) { - if (frozenAccount[msg.sender]) return false; - if(balances[msg.sender] < value) return false; - if(balances[to] + value < balances[to]) return false; - balances[msg.sender] -= value; - balances[to] += value; - Transfer(msg.sender, to, value); - return true; - } - function transferFrom(address from, address to, uint value) returns (bool success) { - if (frozenAccount[msg.sender]) return false; - if(balances[from] < value) return false; - if( allowed[from][msg.sender] >= value ) return false; - if(balances[to] + value < balances[to]) return false; - balances[from] -= value; - allowed[from][msg.sender] -= value; - balances[to] += value; - Transfer(from, to, value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner{ - balances[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0,owner,mintedAmount); - Transfer(owner,target,mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function changeName(string _name) onlyOwner { - name = _name; - } - function changeSymbol(string _symbol) onlyOwner { - symbol = _symbol; - } - function changeDecimals(uint8 _decimals) onlyOwner { - decimals = _decimals; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12062.sol b/data_full/CVE_clean/2018-12062.sol deleted file mode 100644 index 58ae5ef1..00000000 --- a/data_full/CVE_clean/2018-12062.sol +++ /dev/null @@ -1,132 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract SwftCoin is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function SwftCoin( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12063.sol b/data_full/CVE_clean/2018-12063.sol deleted file mode 100644 index 2f553156..00000000 --- a/data_full/CVE_clean/2018-12063.sol +++ /dev/null @@ -1,123 +0,0 @@ -pragma solidity ^0.4.13; contract owned { address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } -contract token { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require (_value < allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) returns (bool success) { - require (balanceOf[msg.sender] > _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract INTToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function INTToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} -contract INT is INTToken(1000000000000000, "Internet Node Token", 6, "INT") {} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12067.sol b/data_full/CVE_clean/2018-12067.sol deleted file mode 100644 index fb622b86..00000000 --- a/data_full/CVE_clean/2018-12067.sol +++ /dev/null @@ -1,132 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MyAdvancedToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12068.sol b/data_full/CVE_clean/2018-12068.sol deleted file mode 100644 index dd40e5b2..00000000 --- a/data_full/CVE_clean/2018-12068.sol +++ /dev/null @@ -1,132 +0,0 @@ -pragma solidity ^0.4.11; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MyAdvancedToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12070.sol b/data_full/CVE_clean/2018-12070.sol deleted file mode 100644 index 5619bba0..00000000 --- a/data_full/CVE_clean/2018-12070.sol +++ /dev/null @@ -1,144 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol -) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract SECToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function SECToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol -) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - uint start = 1520956799; - uint256 SECtotalAmount = 1500000000 * 10 ** 18; - address teamaccount = 0xC32b1519A0d4E883FE136AbB3198cbC402b5503F; - uint256 amount = _value; - address sender = _from; - uint256 balance = balanceOf[_from]; - if(teamaccount == sender){ - if (now < start + 365 * 1 days) { - require((balance - amount) >= SECtotalAmount/10 * 3/4); - } else if (now < start + (2*365+1) * 1 days){ - require((balance - amount) >= SECtotalAmount/10 * 2/4); - }else if (now < start + (3*365+1) * 1 days){ - require((balance - amount) >= SECtotalAmount/10 * 1/4); - } - } - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} -contract SEC is SECToken(1500000000, "SEC", "SEC") {} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12078.sol b/data_full/CVE_clean/2018-12078.sol deleted file mode 100644 index 68f44f35..00000000 --- a/data_full/CVE_clean/2018-12078.sol +++ /dev/null @@ -1,107 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - revert(); - } -} -contract PolyAi is owned, token { - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function PolyAi( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12079.sol b/data_full/CVE_clean/2018-12079.sol deleted file mode 100644 index fb622b86..00000000 --- a/data_full/CVE_clean/2018-12079.sol +++ /dev/null @@ -1,132 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MyAdvancedToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12080.sol b/data_full/CVE_clean/2018-12080.sol deleted file mode 100644 index 2f553156..00000000 --- a/data_full/CVE_clean/2018-12080.sol +++ /dev/null @@ -1,123 +0,0 @@ -pragma solidity ^0.4.13; contract owned { address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } -contract token { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require (_value < allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) returns (bool success) { - require (balanceOf[msg.sender] > _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract INTToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function INTToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} -contract INT is INTToken(1000000000000000, "Internet Node Token", 6, "INT") {} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12081.sol b/data_full/CVE_clean/2018-12081.sol deleted file mode 100644 index dd40e5b2..00000000 --- a/data_full/CVE_clean/2018-12081.sol +++ /dev/null @@ -1,132 +0,0 @@ -pragma solidity ^0.4.11; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MyAdvancedToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12082.sol b/data_full/CVE_clean/2018-12082.sol deleted file mode 100644 index bd2a5062..00000000 --- a/data_full/CVE_clean/2018-12082.sol +++ /dev/null @@ -1,125 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - revert(); - } -} -contract FujintoToken is owned, token { - uint public buyRate = 4000; - bool public isSelling = true; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function FujintoToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - function buy() payable { - if(isSelling == false) revert(); - uint amount = msg.value * buyRate; - balanceOf[msg.sender] += amount; - balanceOf[owner] -= amount; - Transfer(owner, msg.sender, amount); - } - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12083.sol b/data_full/CVE_clean/2018-12083.sol deleted file mode 100644 index 698ab938..00000000 --- a/data_full/CVE_clean/2018-12083.sol +++ /dev/null @@ -1,76 +0,0 @@ -pragma solidity ^0.4.18; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - function changeOwner(address newOwner) onlyOwner { - owner = newOwner; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract GoalToken is owned { - string public name = "GOAL Bonanza"; - string public symbol = "GOAL"; - uint8 public decimals = 18; - uint256 public totalSupply = 0; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require (_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) returns (bool success) { - require (balanceOf[msg.sender] > _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(this, target, mintedAmount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12084.sol b/data_full/CVE_clean/2018-12084.sol deleted file mode 100644 index 3c77b2b7..00000000 --- a/data_full/CVE_clean/2018-12084.sol +++ /dev/null @@ -1,108 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } -} -contract tokenRecipient { - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); -} -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - revert(); - } -} -contract BitAseanToken is owned, token { - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function BitAseanToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12230.sol b/data_full/CVE_clean/2018-12230.sol deleted file mode 100644 index 6da85d0c..00000000 --- a/data_full/CVE_clean/2018-12230.sol +++ /dev/null @@ -1,90 +0,0 @@ -pragma solidity ^0.4.2; -contract ERC20Interface { - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract Owner { - address public owner; - function Owner() { - owner = msg.sender; - } - modifier onlyOwner() { - if(msg.sender != owner) throw; - _; - } - function transferOwnership(address new_owner) onlyOwner { - owner = new_owner; - } -} -contract RemiCoin is ERC20Interface,Owner { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping(address => uint256) balances; - mapping (address => bool) public frozenAccount; - mapping(address => mapping (address => uint256)) allowed; - event FrozenFunds(address target, bool frozen); - function RemiCoin(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { - balances[msg.sender] = initial_supply; - name = _name; - symbol = _symbol; - decimals = _decimal; - totalSupply = initial_supply; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function transfer(address to, uint value) returns (bool success) { - if (frozenAccount[msg.sender]) return false; - if(balances[msg.sender] < value) return false; - if(balances[to] + value < balances[to]) return false; - balances[msg.sender] -= value; - balances[to] += value; - Transfer(msg.sender, to, value); - return true; - } - function transferFrom(address from, address to, uint value) returns (bool success) { - if (frozenAccount[msg.sender]) return false; - if(balances[from] < value) return false; - if( allowed[from][msg.sender] >= value ) return false; - if(balances[to] + value < balances[to]) return false; - balances[from] -= value; - allowed[from][msg.sender] -= value; - balances[to] += value; - Transfer(from, to, value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner{ - balances[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0,owner,mintedAmount); - Transfer(owner,target,mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function changeName(string _name) onlyOwner { - name = _name; - } - function changeSymbol(string _symbol) onlyOwner { - symbol = _symbol; - } - function changeDecimals(uint8 _decimals) onlyOwner { - decimals = _decimals; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12454.sol b/data_full/CVE_clean/2018-12454.sol deleted file mode 100644 index 3ea95c8b..00000000 --- a/data_full/CVE_clean/2018-12454.sol +++ /dev/null @@ -1,123 +0,0 @@ -pragma solidity ^0.4.11; -contract simplelottery { - enum State { Started, Locked } - State public state = State.Started; - struct Guess{ - address addr; - } - uint arraysize=1000; - uint constant maxguess=1000000; - uint bettingprice = 1 ether; - Guess[1000] guesses; - uint numguesses = 0; - bytes32 curhash = ''; - uint _gameindex = 1; - uint _starttime = 0; - modifier inState(State _state) { - require(state == _state); - _; - } - address developer = 0x0; - address _winner = 0x0; - event SentPrizeToWinner(address winner, uint money, uint gameindex, uint lotterynumber, uint starttime, uint finishtime); - event SentDeveloperFee(uint amount, uint balance); - function simplelottery() - { - if(developer==address(0)){ - developer = msg.sender; - state = State.Started; - _starttime = block.timestamp; - } - } - function setBettingCondition(uint _contenders, uint _bettingprice) - { - if(msg.sender != developer) - return; - arraysize = _contenders; - if(arraysize>1000) - arraysize = 1000; - bettingprice = _bettingprice; - } - function findWinner(uint value) - { - uint i = value % numguesses; - _winner = guesses[i].addr; - } - function getMaxContenders() constant returns(uint){ - return arraysize; - } - function getBettingPrice() constant returns(uint){ - return bettingprice; - } - function getDeveloperAddress() constant returns(address) - { - return developer; - } - function getDeveloperFee() constant returns(uint) - { - uint developerfee = this.balance/100; - return developerfee; - } - function getBalance() constant returns(uint) - { - return this.balance; - } - function getLotteryMoney() constant returns(uint) - { - uint developerfee = getDeveloperFee(); - uint prize = (this.balance - developerfee); - return prize; - } - function getBettingStatus() - constant - returns (uint, uint, uint, uint, uint, uint, uint) - { - return ((uint)(state), _gameindex, _starttime, numguesses, getLotteryMoney(), this.balance, bettingprice); - } - function finish() - { - if(msg.sender != developer) - return; - _finish(); - } - function _finish() private - { - state = State.Locked; - uint block_timestamp = block.timestamp; - uint lotterynumber = (uint(curhash)+block_timestamp)%(maxguess+1); - findWinner(lotterynumber); - uint prize = getLotteryMoney(); - uint numwinners = 1; - uint remain = this.balance - (prize*numwinners); - _winner.transfer(prize); - SentPrizeToWinner(_winner, prize, _gameindex, lotterynumber, _starttime, block_timestamp); - developer.transfer(remain); - SentDeveloperFee(remain, this.balance); - numguesses = 0; - _gameindex++; - state = State.Started; - _starttime = block.timestamp; - } - function () payable - { - _addguess(); - } - function addguess() - inState(State.Started) - payable - { - _addguess(); - } - function _addguess() private - inState(State.Started) - { - require(msg.value >= bettingprice); - curhash = sha256(block.timestamp, block.coinbase, block.difficulty, curhash); - if((uint)(numguesses+1)<=arraysize) { - guesses[numguesses++].addr = msg.sender; - if((uint)(numguesses)>=arraysize){ - _finish(); - } - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12511.sol b/data_full/CVE_clean/2018-12511.sol deleted file mode 100644 index 2fae5b7b..00000000 --- a/data_full/CVE_clean/2018-12511.sol +++ /dev/null @@ -1,132 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MyAdvancedToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12702.sol b/data_full/CVE_clean/2018-12702.sol deleted file mode 100644 index e429fb38..00000000 --- a/data_full/CVE_clean/2018-12702.sol +++ /dev/null @@ -1,73 +0,0 @@ -pragma solidity ^0.4.16; -contract Token { - uint256 public totalSupply; - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - require(balances[_to] + _value > balances[_to]); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - require(balances[_to] + _value > balances[_to]); - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} -contract GVE is StandardToken { - function () { - revert(); - } - string public name = "Globalvillage ecosystem"; - uint8 public decimals = 18; - string public symbol = "GVE"; - string public version = 'v0.1'; - address public founder; - function GVE() { - founder = msg.sender; - totalSupply = 1000000000 * 10 ** uint256(decimals); - balances[founder] = totalSupply; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } - return true; - } - function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(_extraData)) { revert(); } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12703.sol b/data_full/CVE_clean/2018-12703.sol deleted file mode 100644 index aa00c3b7..00000000 --- a/data_full/CVE_clean/2018-12703.sol +++ /dev/null @@ -1,73 +0,0 @@ -pragma solidity ^0.4.16; -contract Token { - uint256 public totalSupply; - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - require(balances[_to] + _value > balances[_to]); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - require(balances[_to] + _value > balances[_to]); - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} -contract EightteenToken is StandardToken { - function () { - revert(); - } - string public name = "Block 18"; - uint8 public decimals = 18; - string public symbol = "18T"; - string public version = 'v0.1'; - address public founder; - function EightteenToken() { - founder = msg.sender; - totalSupply = 1000000000 * 10 ** uint256(decimals); - balances[founder] = totalSupply; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } - return true; - } - function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(_extraData)) { revert(); } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12885.sol b/data_full/CVE_clean/2018-12885.sol deleted file mode 100644 index 6ead2320..00000000 --- a/data_full/CVE_clean/2018-12885.sol +++ /dev/null @@ -1,617 +0,0 @@ -pragma solidity 0.4.23; -library SafeMath { - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract Ownable { - address internal contractOwner; - constructor () internal { - if(contractOwner == address(0)){ - contractOwner = msg.sender; - } - } - modifier onlyOwner() { - require(msg.sender == contractOwner); - _; - } - function transferOwnership(address newOwner) public onlyOwner { - require(newOwner != address(0)); - contractOwner = newOwner; - } -} -contract Pausable is Ownable { - bool private paused = false; - modifier whenNotPaused() { - if(paused == true && msg.value > 0){ - msg.sender.transfer(msg.value); - } - require(!paused); - _; - } - function triggerPause() onlyOwner external { - paused = !paused; - } -} -contract ChampFactory is Pausable{ - event NewChamp(uint256 champID, address owner); - using SafeMath for uint; - struct Champ { - uint256 id; - uint256 attackPower; - uint256 defencePower; - uint256 cooldownTime; - uint256 readyTime; - uint256 winCount; - uint256 lossCount; - uint256 position; - uint256 price; - uint256 withdrawCooldown; - uint256 eq_sword; - uint256 eq_shield; - uint256 eq_helmet; - bool forSale; - } - struct AddressInfo { - uint256 withdrawal; - uint256 champsCount; - uint256 itemsCount; - string name; - } - struct Item { - uint8 itemType; - uint8 itemRarity; - uint256 attackPower; - uint256 defencePower; - uint256 cooldownReduction; - uint256 price; - uint256 onChampId; - bool onChamp; - bool forSale; - } - mapping (address => AddressInfo) public addressInfo; - mapping (uint256 => address) public champToOwner; - mapping (uint256 => address) public itemToOwner; - mapping (uint256 => string) public champToName; - Champ[] public champs; - Item[] public items; - uint256[] public leaderboard; - uint256 internal createChampFee = 5 finney; - uint256 internal lootboxFee = 5 finney; - uint256 internal pendingWithdrawal = 0; - uint256 private randNonce = 0; - uint256 public champsForSaleCount; - uint256 public itemsForSaleCount; - modifier onlyOwnerOfChamp(uint256 _champId) { - require(msg.sender == champToOwner[_champId]); - _; - } - modifier onlyNotOwnerOfChamp(uint256 _champId) { - require(msg.sender != champToOwner[_champId]); - _; - } - modifier isPaid(uint256 _price){ - require(msg.value >= _price); - _; - } - modifier contractMinBalanceReached(){ - require( (address(this).balance).sub(pendingWithdrawal) > 1000000 ); - _; - } - modifier isChampWithdrawReady(uint256 _id){ - require(champs[_id].withdrawCooldown < block.timestamp); - _; - } - modifier distributeInput(address _affiliateAddress){ - uint256 contractOwnerWithdrawal = (msg.value / 100) * 50; - addressInfo[contractOwner].withdrawal += contractOwnerWithdrawal; - pendingWithdrawal += contractOwnerWithdrawal; - if(_affiliateAddress != address(0) && _affiliateAddress != msg.sender){ - uint256 affiliateBonus = (msg.value / 100) * 25; - addressInfo[_affiliateAddress].withdrawal += affiliateBonus; - pendingWithdrawal += affiliateBonus; - } - _; - } - function getChampsByOwner(address _owner) external view returns(uint256[]) { - uint256[] memory result = new uint256[](addressInfo[_owner].champsCount); - uint256 counter = 0; - for (uint256 i = 0; i < champs.length; i++) { - if (champToOwner[i] == _owner) { - result[counter] = i; - counter++; - } - } - return result; - } - function getChampsCount() external view returns(uint256){ - return champs.length; - } - function getChampReward(uint256 _position) public view returns(uint256) { - if(_position <= 800){ - uint256 rewardPercentage = uint256(2000).sub(2 * (_position - 1)); - uint256 availableWithdrawal = address(this).balance.sub(pendingWithdrawal); - return availableWithdrawal / 1000000 * rewardPercentage; - }else{ - return uint256(0); - } - } - function randMod(uint256 _modulus) internal returns(uint256) { - randNonce++; - return uint256(keccak256(randNonce, blockhash(block.number - 1))) % _modulus; - } - function createChamp(address _affiliateAddress) external payable - whenNotPaused - isPaid(createChampFee) - distributeInput(_affiliateAddress) - { - uint256 id = champs.push(Champ(0, 2 + randMod(4), 1 + randMod(4), uint256(1 days) - uint256(randMod(9) * 1 hours), 0, 0, 0, leaderboard.length + 1, 0, uint256(block.timestamp), 0,0,0, false)) - 1; - champs[id].id = id; - leaderboard.push(id); - champToOwner[id] = msg.sender; - addressInfo[msg.sender].champsCount++; - emit NewChamp(id, msg.sender); - } - function setCreateChampFee(uint256 _fee) external onlyOwner { - createChampFee = _fee; - } - function changeChampsName(uint _champId, string _name) external - onlyOwnerOfChamp(_champId){ - champToName[_champId] = _name; - } - function changePlayersName(string _name) external { - addressInfo[msg.sender].name = _name; - } - function withdrawChamp(uint _id) external - onlyOwnerOfChamp(_id) - contractMinBalanceReached - isChampWithdrawReady(_id) - whenNotPaused { - Champ storage champ = champs[_id]; - require(champ.position <= 800); - champ.withdrawCooldown = block.timestamp + 1 days; - uint256 withdrawal = getChampReward(champ.position); - addressInfo[msg.sender].withdrawal += withdrawal; - pendingWithdrawal += withdrawal; - } - function withdrawToAddress(address _address) external - whenNotPaused { - address playerAddress = _address; - if(playerAddress == address(0)){ playerAddress = msg.sender; } - uint256 share = addressInfo[playerAddress].withdrawal; - require(share > 0); - addressInfo[playerAddress].withdrawal = 0; - pendingWithdrawal = pendingWithdrawal.sub(share); - playerAddress.transfer(share); - } -} -contract Items is ChampFactory { - event NewItem(uint256 itemID, address owner); - constructor () internal { - items.push(Item(0, 0, 0, 0, 0, 0, 0, false, false)); - } - modifier onlyOwnerOfItem(uint256 _itemId) { - require(_itemId != 0); - require(msg.sender == itemToOwner[_itemId]); - _; - } - modifier onlyNotOwnerOfItem(uint256 _itemId) { - require(msg.sender != itemToOwner[_itemId]); - _; - } - function hasChampSomethingOn(uint _champId, uint8 _type) internal view returns(bool){ - Champ storage champ = champs[_champId]; - if(_type == 1){ - return (champ.eq_sword == 0) ? false : true; - } - if(_type == 2){ - return (champ.eq_shield == 0) ? false : true; - } - if(_type == 3){ - return (champ.eq_helmet == 0) ? false : true; - } - } - function getItemsByOwner(address _owner) external view returns(uint256[]) { - uint256[] memory result = new uint256[](addressInfo[_owner].itemsCount); - uint256 counter = 0; - for (uint256 i = 0; i < items.length; i++) { - if (itemToOwner[i] == _owner) { - result[counter] = i; - counter++; - } - } - return result; - } - function takeOffItem(uint _champId, uint8 _type) public - onlyOwnerOfChamp(_champId) { - uint256 itemId; - Champ storage champ = champs[_champId]; - if(_type == 1){ - itemId = champ.eq_sword; - if (itemId > 0) { - champ.eq_sword = 0; - } - } - if(_type == 2){ - itemId = champ.eq_shield; - if(itemId > 0) { - champ.eq_shield = 0; - } - } - if(_type == 3){ - itemId = champ.eq_helmet; - if(itemId > 0) { - champ.eq_helmet = 0; - } - } - if(itemId > 0){ - items[itemId].onChamp = false; - } - } - function putOn(uint256 _champId, uint256 _itemId) external - onlyOwnerOfChamp(_champId) - onlyOwnerOfItem(_itemId) { - Champ storage champ = champs[_champId]; - Item storage item = items[_itemId]; - if(item.onChamp){ - takeOffItem(item.onChampId, item.itemType); - } - item.onChamp = true; - item.onChampId = _champId; - if(item.itemType == 1){ - if(champ.eq_sword > 0){ - takeOffItem(champ.id, 1); - } - champ.eq_sword = _itemId; - } - if(item.itemType == 2){ - if(champ.eq_shield > 0){ - takeOffItem(champ.id, 2); - } - champ.eq_shield = _itemId; - } - if(item.itemType == 3){ - if(champ.eq_helmet > 0){ - takeOffItem(champ.id, 3); - } - champ.eq_helmet = _itemId; - } - } - function openLootbox(address _affiliateAddress) external payable - whenNotPaused - isPaid(lootboxFee) - distributeInput(_affiliateAddress) { - uint256 pointToCooldownReduction; - uint256 randNum = randMod(1001); - uint256 pointsToShare; - uint256 itemID; - Item memory item = Item({ - itemType: uint8(uint256(randMod(3) + 1)), - itemRarity: uint8(0), - attackPower: 0, - defencePower: 0, - cooldownReduction: 0, - price: 0, - onChampId: 0, - onChamp: false, - forSale: false - }); - if(450 > randNum){ - pointsToShare = 25 + randMod(9); - item.itemRarity = uint8(1); - }else if(720 > randNum){ - pointsToShare = 42 + randMod(17); - item.itemRarity = uint8(2); - }else if(910 > randNum){ - pointsToShare = 71 + randMod(25); - item.itemRarity = uint8(3); - }else if(980 > randNum){ - pointsToShare = 119 + randMod(33); - item.itemRarity = uint8(4); - }else{ - pointsToShare = 235 + randMod(41); - item.itemRarity = uint8(5); - } - if(item.itemType == uint8(1)){ - item.attackPower = pointsToShare / 10 * 7; - pointsToShare -= item.attackPower; - item.defencePower = pointsToShare / 10 * randMod(6); - pointsToShare -= item.defencePower; - item.cooldownReduction = pointsToShare * uint256(1 minutes); - item.itemType = uint8(1); - } - if(item.itemType == uint8(2)){ - item.defencePower = pointsToShare / 10 * 7; - pointsToShare -= item.defencePower; - item.attackPower = pointsToShare / 10 * randMod(6); - pointsToShare -= item.attackPower; - item.cooldownReduction = pointsToShare * uint256(1 minutes); - item.itemType = uint8(2); - } - if(item.itemType == uint8(3)){ - pointToCooldownReduction = pointsToShare / 10 * 7; - item.cooldownReduction = pointToCooldownReduction * uint256(1 minutes); - pointsToShare -= pointToCooldownReduction; - item.attackPower = pointsToShare / 10 * randMod(6); - pointsToShare -= item.attackPower; - item.defencePower = pointsToShare; - item.itemType = uint8(3); - } - itemID = items.push(item) - 1; - itemToOwner[itemID] = msg.sender; - addressInfo[msg.sender].itemsCount++; - emit NewItem(itemID, msg.sender); - } - function setLootboxFee(uint _fee) external onlyOwner { - lootboxFee = _fee; - } -} -contract ItemMarket is Items { - event TransferItem(address from, address to, uint256 itemID); - modifier itemIsForSale(uint256 _id){ - require(items[_id].forSale); - _; - } - modifier itemIsNotForSale(uint256 _id){ - require(items[_id].forSale == false); - _; - } - modifier ifItemForSaleThenCancelSale(uint256 _itemID){ - Item storage item = items[_itemID]; - if(item.forSale){ - _cancelItemSale(item); - } - _; - } - modifier distributeSaleInput(address _owner) { - uint256 contractOwnerCommision; - uint256 playerShare; - if(msg.value > 100){ - contractOwnerCommision = (msg.value / 100); - playerShare = msg.value - contractOwnerCommision; - }else{ - contractOwnerCommision = 0; - playerShare = msg.value; - } - addressInfo[_owner].withdrawal += playerShare; - addressInfo[contractOwner].withdrawal += contractOwnerCommision; - pendingWithdrawal += playerShare + contractOwnerCommision; - _; - } - function getItemsForSale() view external returns(uint256[]){ - uint256[] memory result = new uint256[](itemsForSaleCount); - if(itemsForSaleCount > 0){ - uint256 counter = 0; - for (uint256 i = 0; i < items.length; i++) { - if (items[i].forSale == true) { - result[counter]=i; - counter++; - } - } - } - return result; - } - function _cancelItemSale(Item storage item) private { - item.forSale = false; - itemsForSaleCount--; - } - function transferItem(address _from, address _to, uint256 _itemID) internal - ifItemForSaleThenCancelSale(_itemID) { - Item storage item = items[_itemID]; - if(item.onChamp && _to != champToOwner[item.onChampId]){ - takeOffItem(item.onChampId, item.itemType); - } - addressInfo[_to].itemsCount++; - addressInfo[_from].itemsCount--; - itemToOwner[_itemID] = _to; - emit TransferItem(_from, _to, _itemID); - } - function giveItem(address _to, uint256 _itemID) public - onlyOwnerOfItem(_itemID) { - transferItem(msg.sender, _to, _itemID); - } - function cancelItemSale(uint256 _id) public - itemIsForSale(_id) - onlyOwnerOfItem(_id){ - Item storage item = items[_id]; - _cancelItemSale(item); - } - function setItemForSale(uint256 _id, uint256 _price) external - onlyOwnerOfItem(_id) - itemIsNotForSale(_id) { - Item storage item = items[_id]; - item.forSale = true; - item.price = _price; - itemsForSaleCount++; - } - function buyItem(uint256 _id) external payable - whenNotPaused - onlyNotOwnerOfItem(_id) - itemIsForSale(_id) - isPaid(items[_id].price) - distributeSaleInput(itemToOwner[_id]) - { - transferItem(itemToOwner[_id], msg.sender, _id); - } -} -contract ItemForge is ItemMarket { - event Forge(uint256 forgedItemID); - function forgeItems(uint256 _parentItemID, uint256 _childItemID) external - onlyOwnerOfItem(_parentItemID) - onlyOwnerOfItem(_childItemID) - ifItemForSaleThenCancelSale(_parentItemID) - ifItemForSaleThenCancelSale(_childItemID) { - require(_parentItemID != _childItemID); - Item storage parentItem = items[_parentItemID]; - Item storage childItem = items[_childItemID]; - if(childItem.onChamp){ - takeOffItem(childItem.onChampId, childItem.itemType); - } - parentItem.attackPower = (parentItem.attackPower > childItem.attackPower) ? parentItem.attackPower : childItem.attackPower; - parentItem.defencePower = (parentItem.defencePower > childItem.defencePower) ? parentItem.defencePower : childItem.defencePower; - parentItem.cooldownReduction = (parentItem.cooldownReduction > childItem.cooldownReduction) ? parentItem.cooldownReduction : childItem.cooldownReduction; - parentItem.itemRarity = uint8(6); - transferItem(msg.sender, address(0), _childItemID); - emit Forge(_parentItemID); - } -} -contract ChampAttack is ItemForge { - event Attack(uint256 winnerChampID, uint256 defeatedChampID, bool didAttackerWin); - modifier isChampReady(uint256 _champId) { - require (champs[_champId].readyTime <= block.timestamp); - _; - } - modifier notSelfAttack(uint256 _champId, uint256 _targetId) { - require(_champId != _targetId); - _; - } - modifier targetExists(uint256 _targetId){ - require(champToOwner[_targetId] != address(0)); - _; - } - function getChampStats(uint256 _champId) public view returns(uint256,uint256,uint256){ - Champ storage champ = champs[_champId]; - Item storage sword = items[champ.eq_sword]; - Item storage shield = items[champ.eq_shield]; - Item storage helmet = items[champ.eq_helmet]; - uint256 totalAttackPower = champ.attackPower + sword.attackPower + shield.attackPower + helmet.attackPower; - uint256 totalDefencePower = champ.defencePower + sword.defencePower + shield.defencePower + helmet.defencePower; - uint256 totalCooldownReduction = sword.cooldownReduction + shield.cooldownReduction + helmet.cooldownReduction; - return (totalAttackPower, totalDefencePower, totalCooldownReduction); - } - function subAttack(uint256 _playerAttackPoints, uint256 _x) internal pure returns (uint256) { - return (_playerAttackPoints <= _x + 2) ? 2 : _playerAttackPoints - _x; - } - function subDefence(uint256 _playerDefencePoints, uint256 _x) internal pure returns (uint256) { - return (_playerDefencePoints <= _x) ? 1 : _playerDefencePoints - _x; - } - function _attackCompleted(Champ storage _winnerChamp, Champ storage _defeatedChamp, uint256 _pointsGiven, uint256 _pointsToAttackPower) private { - _winnerChamp.attackPower += _pointsToAttackPower; - _winnerChamp.defencePower += _pointsGiven - _pointsToAttackPower; - _defeatedChamp.attackPower = subAttack(_defeatedChamp.attackPower, _pointsToAttackPower); - _defeatedChamp.defencePower = subDefence(_defeatedChamp.defencePower, _pointsGiven - _pointsToAttackPower); - _winnerChamp.winCount++; - _defeatedChamp.lossCount++; - if(_winnerChamp.position > _defeatedChamp.position) { - uint256 winnerPosition = _winnerChamp.position; - uint256 loserPosition = _defeatedChamp.position; - _defeatedChamp.position = winnerPosition; - _winnerChamp.position = loserPosition; - leaderboard[winnerPosition - 1] = _defeatedChamp.id; - leaderboard[loserPosition - 1] = _winnerChamp.id; - } - } - function _getPoints(uint256 _pointsGiven) private returns (uint256 pointsGiven, uint256 pointsToAttackPower){ - return (_pointsGiven, randMod(_pointsGiven+1)); - } - function attack(uint256 _champId, uint256 _targetId) external - onlyOwnerOfChamp(_champId) - isChampReady(_champId) - notSelfAttack(_champId, _targetId) - targetExists(_targetId) { - Champ storage myChamp = champs[_champId]; - Champ storage enemyChamp = champs[_targetId]; - uint256 pointsGiven; - uint256 pointsToAttackPower; - uint256 myChampAttackPower; - uint256 enemyChampDefencePower; - uint256 myChampCooldownReduction; - (myChampAttackPower,,myChampCooldownReduction) = getChampStats(_champId); - (,enemyChampDefencePower,) = getChampStats(_targetId); - if (myChampAttackPower > enemyChampDefencePower) { - if(myChampAttackPower - enemyChampDefencePower < 5){ - (pointsGiven, pointsToAttackPower) = _getPoints(3); - }else if(myChampAttackPower - enemyChampDefencePower < 10){ - (pointsGiven, pointsToAttackPower) = _getPoints(2); - }else{ - (pointsGiven, pointsToAttackPower) = _getPoints(1); - } - _attackCompleted(myChamp, enemyChamp, pointsGiven, pointsToAttackPower); - emit Attack(myChamp.id, enemyChamp.id, true); - } else { - (pointsGiven, pointsToAttackPower) = _getPoints(1); - _attackCompleted(enemyChamp, myChamp, pointsGiven, pointsToAttackPower); - emit Attack(enemyChamp.id, myChamp.id, false); - } - myChamp.readyTime = uint256(block.timestamp + myChamp.cooldownTime - myChampCooldownReduction); - } -} -contract ChampMarket is ChampAttack { - event TransferChamp(address from, address to, uint256 champID); - modifier champIsForSale(uint256 _id){ - require(champs[_id].forSale); - _; - } - modifier champIsNotForSale(uint256 _id){ - require(champs[_id].forSale == false); - _; - } - modifier ifChampForSaleThenCancelSale(uint256 _champID){ - Champ storage champ = champs[_champID]; - if(champ.forSale){ - _cancelChampSale(champ); - } - _; - } - function getChampsForSale() view external returns(uint256[]){ - uint256[] memory result = new uint256[](champsForSaleCount); - if(champsForSaleCount > 0){ - uint256 counter = 0; - for (uint256 i = 0; i < champs.length; i++) { - if (champs[i].forSale == true) { - result[counter]=i; - counter++; - } - } - } - return result; - } - function _cancelChampSale(Champ storage champ) private { - champ.forSale = false; - champsForSaleCount--; - } - function transferChamp(address _from, address _to, uint256 _champId) internal ifChampForSaleThenCancelSale(_champId){ - Champ storage champ = champs[_champId]; - addressInfo[_to].champsCount++; - addressInfo[_from].champsCount--; - champToOwner[_champId] = _to; - if(champ.eq_sword != 0) { transferItem(_from, _to, champ.eq_sword); } - if(champ.eq_shield != 0) { transferItem(_from, _to, champ.eq_shield); } - if(champ.eq_helmet != 0) { transferItem(_from, _to, champ.eq_helmet); } - emit TransferChamp(_from, _to, _champId); - } - function cancelChampSale(uint256 _id) public - champIsForSale(_id) - onlyOwnerOfChamp(_id) { - Champ storage champ = champs[_id]; - _cancelChampSale(champ); - } - function giveChamp(address _to, uint256 _champId) external - onlyOwnerOfChamp(_champId) { - transferChamp(msg.sender, _to, _champId); - } - function setChampForSale(uint256 _id, uint256 _price) external - onlyOwnerOfChamp(_id) - champIsNotForSale(_id) { - Champ storage champ = champs[_id]; - champ.forSale = true; - champ.price = _price; - champsForSaleCount++; - } - function buyChamp(uint256 _id) external payable - whenNotPaused - onlyNotOwnerOfChamp(_id) - champIsForSale(_id) - isPaid(champs[_id].price) - distributeSaleInput(champToOwner[_id]) { - transferChamp(champToOwner[_id], msg.sender, _id); - } -} -contract MyCryptoChampCore is ChampMarket { -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12959.sol b/data_full/CVE_clean/2018-12959.sol deleted file mode 100644 index 18c221f9..00000000 --- a/data_full/CVE_clean/2018-12959.sol +++ /dev/null @@ -1,67 +0,0 @@ -pragma solidity ^0.4.4; -contract Token { - function totalSupply() constant returns (uint256 supply) {} - function balanceOf(address _owner) constant returns (uint256 balance) {} - function transfer(address _to, uint256 _value) returns (bool success) {} - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - function approve(address _spender, uint256 _value) returns (bool success) {} - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} -contract AditusToken is StandardToken { - function () { - throw; - } - string public name; - uint8 public decimals; - string public symbol; - string public version = 'A1.0'; - function AditusToken( - ) { - balances[msg.sender] = 1000000000000000000000000000; - totalSupply = 1000000000000000000000000000; - name = "Aditus"; - decimals = 18; - symbol = "ADI"; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12975.sol b/data_full/CVE_clean/2018-12975.sol deleted file mode 100644 index 7073e4c9..00000000 --- a/data_full/CVE_clean/2018-12975.sol +++ /dev/null @@ -1,645 +0,0 @@ -pragma solidity ^0.4.18; -contract Ownable { - address public owner; - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - function Ownable() public { - owner = msg.sender; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) public onlyOwner { - require(newOwner != address(0)); - OwnershipTransferred(owner, newOwner); - owner = newOwner; - } -} -contract Claimable is Ownable { - address public pendingOwner; - modifier onlyPendingOwner() { - require(msg.sender == pendingOwner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - pendingOwner = newOwner; - } - function claimOwnership() onlyPendingOwner public { - OwnershipTransferred(owner, pendingOwner); - owner = pendingOwner; - pendingOwner = address(0); - } -} -contract Pausable is Ownable { - event Pause(); - event Unpause(); - bool public paused = false; - modifier whenNotPaused() { - require(!paused); - _; - } - modifier whenPaused() { - require(paused); - _; - } - function pause() onlyOwner whenNotPaused public { - paused = true; - Pause(); - } - function unpause() onlyOwner whenPaused public { - paused = false; - Unpause(); - } -} -contract AccessDeploy is Claimable { - mapping(address => bool) private deployAccess; - modifier onlyAccessDeploy { - require(msg.sender == owner || deployAccess[msg.sender] == true); - _; - } - function grantAccessDeploy(address _address) - onlyOwner - public - { - deployAccess[_address] = true; - } - function revokeAccessDeploy(address _address) - onlyOwner - public - { - deployAccess[_address] = false; - } -} -contract AccessDeposit is Claimable { - mapping(address => bool) private depositAccess; - modifier onlyAccessDeposit { - require(msg.sender == owner || depositAccess[msg.sender] == true); - _; - } - function grantAccessDeposit(address _address) - onlyOwner - public - { - depositAccess[_address] = true; - } - function revokeAccessDeposit(address _address) - onlyOwner - public - { - depositAccess[_address] = false; - } -} -contract AccessMint is Claimable { - mapping(address => bool) private mintAccess; - modifier onlyAccessMint { - require(msg.sender == owner || mintAccess[msg.sender] == true); - _; - } - function grantAccessMint(address _address) - onlyOwner - public - { - mintAccess[_address] = true; - } - function revokeAccessMint(address _address) - onlyOwner - public - { - mintAccess[_address] = false; - } -} -contract ERC721 { - event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); - event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); - function balanceOf(address _owner) public view returns (uint256 _balance); - function ownerOf(uint256 _tokenId) public view returns (address _owner); - function transfer(address _to, uint256 _tokenId) public; - function approve(address _to, uint256 _tokenId) public; - function takeOwnership(uint256 _tokenId) public; -} -contract ERC721Token is ERC721 { - using SafeMath for uint256; - uint256 private totalTokens; - mapping (uint256 => address) private tokenOwner; - mapping (uint256 => address) private tokenApprovals; - mapping (address => uint256[]) private ownedTokens; - mapping(uint256 => uint256) private ownedTokensIndex; - modifier onlyOwnerOf(uint256 _tokenId) { - require(ownerOf(_tokenId) == msg.sender); - _; - } - function totalSupply() public view returns (uint256) { - return totalTokens; - } - function balanceOf(address _owner) public view returns (uint256) { - return ownedTokens[_owner].length; - } - function tokensOf(address _owner) public view returns (uint256[]) { - return ownedTokens[_owner]; - } - function ownerOf(uint256 _tokenId) public view returns (address) { - address owner = tokenOwner[_tokenId]; - require(owner != address(0)); - return owner; - } - function approvedFor(uint256 _tokenId) public view returns (address) { - return tokenApprovals[_tokenId]; - } - function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { - clearApprovalAndTransfer(msg.sender, _to, _tokenId); - } - function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { - address owner = ownerOf(_tokenId); - require(_to != owner); - if (approvedFor(_tokenId) != 0 || _to != 0) { - tokenApprovals[_tokenId] = _to; - Approval(owner, _to, _tokenId); - } - } - function takeOwnership(uint256 _tokenId) public { - require(isApprovedFor(msg.sender, _tokenId)); - clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId); - } - function _mint(address _to, uint256 _tokenId) internal { - require(_to != address(0)); - addToken(_to, _tokenId); - Transfer(0x0, _to, _tokenId); - } - function _burn(uint256 _tokenId) onlyOwnerOf(_tokenId) internal { - if (approvedFor(_tokenId) != 0) { - clearApproval(msg.sender, _tokenId); - } - removeToken(msg.sender, _tokenId); - Transfer(msg.sender, 0x0, _tokenId); - } - function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) { - return approvedFor(_tokenId) == _owner; - } - function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal { - require(_to != address(0)); - require(_to != ownerOf(_tokenId)); - require(ownerOf(_tokenId) == _from); - clearApproval(_from, _tokenId); - removeToken(_from, _tokenId); - addToken(_to, _tokenId); - Transfer(_from, _to, _tokenId); - } - function clearApproval(address _owner, uint256 _tokenId) private { - require(ownerOf(_tokenId) == _owner); - tokenApprovals[_tokenId] = 0; - Approval(_owner, 0, _tokenId); - } - function addToken(address _to, uint256 _tokenId) private { - require(tokenOwner[_tokenId] == address(0)); - tokenOwner[_tokenId] = _to; - uint256 length = balanceOf(_to); - ownedTokens[_to].push(_tokenId); - ownedTokensIndex[_tokenId] = length; - totalTokens = totalTokens.add(1); - } - function removeToken(address _from, uint256 _tokenId) private { - require(ownerOf(_tokenId) == _from); - uint256 tokenIndex = ownedTokensIndex[_tokenId]; - uint256 lastTokenIndex = balanceOf(_from).sub(1); - uint256 lastToken = ownedTokens[_from][lastTokenIndex]; - tokenOwner[_tokenId] = 0; - ownedTokens[_from][tokenIndex] = lastToken; - ownedTokens[_from][lastTokenIndex] = 0; - ownedTokens[_from].length--; - ownedTokensIndex[_tokenId] = 0; - ownedTokensIndex[lastToken] = tokenIndex; - totalTokens = totalTokens.sub(1); - } -} -contract ERC20Basic { - function totalSupply() public view returns (uint256); - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - uint256 totalSupply_; - function totalSupply() public view returns (uint256) { - return totalSupply_; - } - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract Gold is StandardToken, Claimable, AccessMint { - string public constant name = "Gold"; - string public constant symbol = "G"; - uint8 public constant decimals = 18; - event Mint( - address indexed _to, - uint256 indexed _tokenId - ); - function mint(address _to, uint256 _amount) - onlyAccessMint - public - returns (bool) - { - totalSupply_ = totalSupply_.add(_amount); - balances[_to] = balances[_to].add(_amount); - Mint(_to, _amount); - Transfer(address(0), _to, _amount); - return true; - } -} -contract CryptoSagaHero is ERC721Token, Claimable, Pausable, AccessMint, AccessDeploy, AccessDeposit { - string public constant name = "CryptoSaga Hero"; - string public constant symbol = "HERO"; - struct HeroClass { - string className; - uint8 classRank; - uint8 classRace; - uint32 classAge; - uint8 classType; - uint32 maxLevel; - uint8 aura; - uint32[5] baseStats; - uint32[5] minIVForStats; - uint32[5] maxIVForStats; - uint32 currentNumberOfInstancedHeroes; - } - struct HeroInstance { - uint32 heroClassId; - string heroName; - uint32 currentLevel; - uint32 currentExp; - uint32 lastLocationId; - uint256 availableAt; - uint32[5] currentStats; - uint32[5] ivForStats; - } - uint32 public requiredExpIncreaseFactor = 100; - uint256 public requiredGoldIncreaseFactor = 1000000000000000000; - mapping(uint32 => HeroClass) public heroClasses; - uint32 public numberOfHeroClasses; - mapping(uint256 => HeroInstance) public tokenIdToHeroInstance; - uint256 public numberOfTokenIds; - Gold public goldContract; - mapping(address => uint256) public addressToGoldDeposit; - uint32 private seed = 0; - event DefineType( - address indexed _by, - uint32 indexed _typeId, - string _className - ); - event LevelUp( - address indexed _by, - uint256 indexed _tokenId, - uint32 _newLevel - ); - event Deploy( - address indexed _by, - uint256 indexed _tokenId, - uint32 _locationId, - uint256 _duration - ); - function getClassInfo(uint32 _classId) - external view - returns (string className, uint8 classRank, uint8 classRace, uint32 classAge, uint8 classType, uint32 maxLevel, uint8 aura, uint32[5] baseStats, uint32[5] minIVs, uint32[5] maxIVs) - { - var _cl = heroClasses[_classId]; - return (_cl.className, _cl.classRank, _cl.classRace, _cl.classAge, _cl.classType, _cl.maxLevel, _cl.aura, _cl.baseStats, _cl.minIVForStats, _cl.maxIVForStats); - } - function getClassName(uint32 _classId) - external view - returns (string) - { - return heroClasses[_classId].className; - } - function getClassRank(uint32 _classId) - external view - returns (uint8) - { - return heroClasses[_classId].classRank; - } - function getClassMintCount(uint32 _classId) - external view - returns (uint32) - { - return heroClasses[_classId].currentNumberOfInstancedHeroes; - } - function getHeroInfo(uint256 _tokenId) - external view - returns (uint32 classId, string heroName, uint32 currentLevel, uint32 currentExp, uint32 lastLocationId, uint256 availableAt, uint32[5] currentStats, uint32[5] ivs, uint32 bp) - { - HeroInstance memory _h = tokenIdToHeroInstance[_tokenId]; - var _bp = _h.currentStats[0] + _h.currentStats[1] + _h.currentStats[2] + _h.currentStats[3] + _h.currentStats[4]; - return (_h.heroClassId, _h.heroName, _h.currentLevel, _h.currentExp, _h.lastLocationId, _h.availableAt, _h.currentStats, _h.ivForStats, _bp); - } - function getHeroClassId(uint256 _tokenId) - external view - returns (uint32) - { - return tokenIdToHeroInstance[_tokenId].heroClassId; - } - function getHeroName(uint256 _tokenId) - external view - returns (string) - { - return tokenIdToHeroInstance[_tokenId].heroName; - } - function getHeroLevel(uint256 _tokenId) - external view - returns (uint32) - { - return tokenIdToHeroInstance[_tokenId].currentLevel; - } - function getHeroLocation(uint256 _tokenId) - external view - returns (uint32) - { - return tokenIdToHeroInstance[_tokenId].lastLocationId; - } - function getHeroAvailableAt(uint256 _tokenId) - external view - returns (uint256) - { - return tokenIdToHeroInstance[_tokenId].availableAt; - } - function getHeroBP(uint256 _tokenId) - public view - returns (uint32) - { - var _tmp = tokenIdToHeroInstance[_tokenId].currentStats; - return (_tmp[0] + _tmp[1] + _tmp[2] + _tmp[3] + _tmp[4]); - } - function getHeroRequiredGoldForLevelUp(uint256 _tokenId) - public view - returns (uint256) - { - return (uint256(2) ** (tokenIdToHeroInstance[_tokenId].currentLevel / 10)) * requiredGoldIncreaseFactor; - } - function getHeroRequiredExpForLevelUp(uint256 _tokenId) - public view - returns (uint32) - { - return ((tokenIdToHeroInstance[_tokenId].currentLevel + 2) * requiredExpIncreaseFactor); - } - function getGoldDepositOfAddress(address _address) - external view - returns (uint256) - { - return addressToGoldDeposit[_address]; - } - function getTokenIdOfAddressAndIndex(address _address, uint256 _index) - external view - returns (uint256) - { - return tokensOf(_address)[_index]; - } - function getTotalBPOfAddress(address _address) - external view - returns (uint32) - { - var _tokens = tokensOf(_address); - uint32 _totalBP = 0; - for (uint256 i = 0; i < _tokens.length; i ++) { - _totalBP += getHeroBP(_tokens[i]); - } - return _totalBP; - } - function setHeroName(uint256 _tokenId, string _name) - onlyOwnerOf(_tokenId) - public - { - tokenIdToHeroInstance[_tokenId].heroName = _name; - } - function setGoldContract(address _contractAddress) - onlyOwner - public - { - goldContract = Gold(_contractAddress); - } - function setRequiredExpIncreaseFactor(uint32 _value) - onlyOwner - public - { - requiredExpIncreaseFactor = _value; - } - function setRequiredGoldIncreaseFactor(uint256 _value) - onlyOwner - public - { - requiredGoldIncreaseFactor = _value; - } - function CryptoSagaHero(address _goldAddress) - public - { - require(_goldAddress != address(0)); - setGoldContract(_goldAddress); - defineType("Archangel", 4, 1, 13540, 0, 99, 3, [uint32(74), 75, 57, 99, 95], [uint32(8), 6, 8, 5, 5], [uint32(8), 10, 10, 6, 6]); - defineType("Shadowalker", 3, 4, 134, 1, 75, 4, [uint32(45), 35, 60, 80, 40], [uint32(3), 2, 10, 4, 5], [uint32(5), 5, 10, 7, 5]); - defineType("Pyromancer", 2, 0, 14, 2, 50, 1, [uint32(50), 28, 17, 40, 35], [uint32(5), 3, 2, 3, 3], [uint32(8), 4, 3, 4, 5]); - defineType("Magician", 1, 3, 224, 2, 30, 0, [uint32(35), 15, 25, 25, 30], [uint32(3), 1, 2, 2, 2], [uint32(5), 2, 3, 3, 3]); - defineType("Farmer", 0, 0, 59, 0, 15, 2, [uint32(10), 22, 8, 15, 25], [uint32(1), 2, 1, 1, 2], [uint32(1), 3, 1, 2, 3]); - } - function defineType(string _className, uint8 _classRank, uint8 _classRace, uint32 _classAge, uint8 _classType, uint32 _maxLevel, uint8 _aura, uint32[5] _baseStats, uint32[5] _minIVForStats, uint32[5] _maxIVForStats) - onlyOwner - public - { - require(_classRank < 5); - require(_classType < 3); - require(_aura < 5); - require(_minIVForStats[0] <= _maxIVForStats[0] && _minIVForStats[1] <= _maxIVForStats[1] && _minIVForStats[2] <= _maxIVForStats[2] && _minIVForStats[3] <= _maxIVForStats[3] && _minIVForStats[4] <= _maxIVForStats[4]); - HeroClass memory _heroType = HeroClass({ - className: _className, - classRank: _classRank, - classRace: _classRace, - classAge: _classAge, - classType: _classType, - maxLevel: _maxLevel, - aura: _aura, - baseStats: _baseStats, - minIVForStats: _minIVForStats, - maxIVForStats: _maxIVForStats, - currentNumberOfInstancedHeroes: 0 - }); - heroClasses[numberOfHeroClasses] = _heroType; - DefineType(msg.sender, numberOfHeroClasses, _heroType.className); - numberOfHeroClasses ++; - } - function mint(address _owner, uint32 _heroClassId) - onlyAccessMint - public - returns (uint256) - { - require(_owner != address(0)); - require(_heroClassId < numberOfHeroClasses); - var _heroClassInfo = heroClasses[_heroClassId]; - _mint(_owner, numberOfTokenIds); - uint32[5] memory _ivForStats; - uint32[5] memory _initialStats; - for (uint8 i = 0; i < 5; i++) { - _ivForStats[i] = (random(_heroClassInfo.maxIVForStats[i] + 1, _heroClassInfo.minIVForStats[i])); - _initialStats[i] = _heroClassInfo.baseStats[i] + _ivForStats[i]; - } - HeroInstance memory _heroInstance = HeroInstance({ - heroClassId: _heroClassId, - heroName: "", - currentLevel: 1, - currentExp: 0, - lastLocationId: 0, - availableAt: now, - currentStats: _initialStats, - ivForStats: _ivForStats - }); - tokenIdToHeroInstance[numberOfTokenIds] = _heroInstance; - numberOfTokenIds ++; - _heroClassInfo.currentNumberOfInstancedHeroes ++; - return numberOfTokenIds - 1; - } - function deploy(uint256 _tokenId, uint32 _locationId, uint256 _duration) - onlyAccessDeploy - public - returns (bool) - { - require(ownerOf(_tokenId) != address(0)); - var _heroInstance = tokenIdToHeroInstance[_tokenId]; - require(_heroInstance.availableAt <= now); - _heroInstance.lastLocationId = _locationId; - _heroInstance.availableAt = now + _duration; - Deploy(msg.sender, _tokenId, _locationId, _duration); - } - function addExp(uint256 _tokenId, uint32 _exp) - onlyAccessDeploy - public - returns (bool) - { - require(ownerOf(_tokenId) != address(0)); - var _heroInstance = tokenIdToHeroInstance[_tokenId]; - var _newExp = _heroInstance.currentExp + _exp; - require(_newExp == uint256(uint128(_newExp))); - _heroInstance.currentExp += _newExp; - } - function addDeposit(address _to, uint256 _amount) - onlyAccessDeposit - public - { - addressToGoldDeposit[_to] += _amount; - } - function levelUp(uint256 _tokenId) - onlyOwnerOf(_tokenId) whenNotPaused - public - { - var _heroInstance = tokenIdToHeroInstance[_tokenId]; - require(_heroInstance.availableAt <= now); - var _heroClassInfo = heroClasses[_heroInstance.heroClassId]; - require(_heroInstance.currentLevel < _heroClassInfo.maxLevel); - var requiredExp = getHeroRequiredExpForLevelUp(_tokenId); - require(_heroInstance.currentExp >= requiredExp); - var requiredGold = getHeroRequiredGoldForLevelUp(_tokenId); - var _ownerOfToken = ownerOf(_tokenId); - require(addressToGoldDeposit[_ownerOfToken] >= requiredGold); - _heroInstance.currentLevel += 1; - for (uint8 i = 0; i < 5; i++) { - _heroInstance.currentStats[i] = _heroClassInfo.baseStats[i] + (_heroInstance.currentLevel - 1) * _heroInstance.ivForStats[i]; - } - _heroInstance.currentExp -= requiredExp; - addressToGoldDeposit[_ownerOfToken] -= requiredGold; - LevelUp(msg.sender, _tokenId, _heroInstance.currentLevel); - } - function transferDeposit(uint256 _amount) - whenNotPaused - public - { - require(goldContract.allowance(msg.sender, this) >= _amount); - if (goldContract.transferFrom(msg.sender, this, _amount)) { - addressToGoldDeposit[msg.sender] += _amount; - } - } - function withdrawDeposit(uint256 _amount) - public - { - require(addressToGoldDeposit[msg.sender] >= _amount); - if (goldContract.transfer(msg.sender, _amount)) { - addressToGoldDeposit[msg.sender] -= _amount; - } - } - function random(uint32 _upper, uint32 _lower) - private - returns (uint32) - { - require(_upper > _lower); - seed = uint32(keccak256(keccak256(block.blockhash(block.number), seed), now)); - return seed % (_upper - _lower) + _lower; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13041.sol b/data_full/CVE_clean/2018-13041.sol deleted file mode 100644 index 3b677af1..00000000 --- a/data_full/CVE_clean/2018-13041.sol +++ /dev/null @@ -1,115 +0,0 @@ -pragma solidity ^0.4.8; -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); -} -library SafeMath { - function mul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - function sub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - function add(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c >= a); - return c; - } - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} -contract BasicToken is ERC20Basic { - using SafeMath for uint; - mapping(address => uint) balances; - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - } - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant returns (uint); - function transferFrom(address from, address to, uint value); - function approve(address spender, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} -contract StandardToken is BasicToken, ERC20 { - mapping (address => mapping (address => uint)) allowed; - function transferFrom(address _from, address _to, uint _value) { - var _allowance = allowed[_from][msg.sender]; - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - } - function approve(address _spender, uint _value) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - } - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } -} -contract Ownable { - address public owner; - function Ownable() { - owner = msg.sender; - } - modifier onlyOwner() { - if (msg.sender != owner) { - throw; - } - _; - } - function transferOwnership(address newOwner) onlyOwner { - if (newOwner != address(0)) { - owner = newOwner; - } - } -} -contract LinkToken is StandardToken, Ownable { - string public name = "Link Platform"; - string public symbol = "LNK"; - uint public decimals = 18; - uint public totalSupply; - function mint(address _spender, uint _value) - onlyOwner { - balances[_spender] += _value; - totalSupply += _value; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13068.sol b/data_full/CVE_clean/2018-13068.sol deleted file mode 100644 index db4be85c..00000000 --- a/data_full/CVE_clean/2018-13068.sol +++ /dev/null @@ -1,91 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract AzurionToken is owned { - mapping (address => uint256) public balanceOf; - mapping (address => bool) public frozenAccount; - mapping (address => mapping (address => uint256)) public allowance; - uint256 public totalSupply; - string public constant name = "Azurion"; - string public constant symbol = "AZU"; - uint8 public constant decimals = 18; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - event FrozenFunds(address target, bool frozen); - function AzurionToken(uint256 initialSupply, address centralMinter) { - if(centralMinter != 0 ) owner = centralMinter; - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function approve(address _spender, uint256 _value) public returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) onlyOwner public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } - function () { - revert(); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13069.sol b/data_full/CVE_clean/2018-13069.sol deleted file mode 100644 index cfd90e83..00000000 --- a/data_full/CVE_clean/2018-13069.sol +++ /dev/null @@ -1,128 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract DYC is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function DYC( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13070.sol b/data_full/CVE_clean/2018-13070.sol deleted file mode 100644 index 901dffc8..00000000 --- a/data_full/CVE_clean/2018-13070.sol +++ /dev/null @@ -1,122 +0,0 @@ -pragma solidity ^0.4.24; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract EncryptedToken is owned, TokenERC20 { - uint256 INITIAL_SUPPLY = 100000000; - uint256 public buyPrice = 1; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function EncryptedToken() TokenERC20(INITIAL_SUPPLY, 'ECC', 'ECC') payable public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newBuyPrice) onlyOwner public { - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function () payable public { - owner.send(msg.value); - uint amount = msg.value * buyPrice; - _transfer(owner, msg.sender, amount); - } - function selfdestructs() onlyOwner payable public { - selfdestruct(owner); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13071.sol b/data_full/CVE_clean/2018-13071.sol deleted file mode 100644 index 1d178d14..00000000 --- a/data_full/CVE_clean/2018-13071.sol +++ /dev/null @@ -1,171 +0,0 @@ -pragma solidity ^0.4.17; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "T10 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - mapping(address=>uint256) public indexes; - mapping(uint256=>address) public addresses; - uint256 public lastIndex = 0; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - addresses[1] = msg.sender; - indexes[msg.sender] = 1; - lastIndex = 1; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract CCindexToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 40000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "CCindex10"; - string public tokenSymbol = "T10"; - function CCindexToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - if(_value > 0){ - if(balanceOf[msg.sender] == 0){ - addresses[indexes[msg.sender]] = addresses[lastIndex]; - indexes[addresses[lastIndex]] = indexes[msg.sender]; - indexes[msg.sender] = 0; - delete addresses[lastIndex]; - lastIndex--; - } - if(indexes[_to]==0){ - lastIndex++; - addresses[lastIndex] = _to; - indexes[_to] = lastIndex; - } - } - } - function getAddresses() constant returns (address[]){ - address[] memory addrs = new address[](lastIndex); - for(uint i = 0; i < lastIndex; i++){ - addrs[i] = addresses[i+1]; - } - return addrs; - } - function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { - uint distributed = 0; - require(startIndex < endIndex); - for(uint i = startIndex; i < lastIndex; i++){ - address holder = addresses[i+1]; - uint reward = balanceOf[holder] * 3 / 100; - balanceOf[holder] += reward; - distributed += reward; - Transfer(0, holder, reward); - } - totalSupply += distributed; - return distributed; - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13072.sol b/data_full/CVE_clean/2018-13072.sol deleted file mode 100644 index ff7b130d..00000000 --- a/data_full/CVE_clean/2018-13072.sol +++ /dev/null @@ -1,125 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - revert(); - } -} -contract Coffeecoin is owned, token { - uint public buyRate = 4000; - bool public isSelling = true; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function Coffeecoin( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - function buy() payable { - if(isSelling == false) revert(); - uint amount = msg.value * buyRate; - balanceOf[msg.sender] += amount; - balanceOf[owner] -= amount; - Transfer(owner, msg.sender, amount); - } - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13073.sol b/data_full/CVE_clean/2018-13073.sol deleted file mode 100644 index ac445982..00000000 --- a/data_full/CVE_clean/2018-13073.sol +++ /dev/null @@ -1,131 +0,0 @@ -pragma solidity ^0.4.17; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "ETHEREUMBLACK"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract ETHEREUMBLACK is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 200000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "ETHEREUMBLACK"; - string public tokenSymbol = "ETCBK"; - function ETHEREUMBLACK() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13074.sol b/data_full/CVE_clean/2018-13074.sol deleted file mode 100644 index 871884f0..00000000 --- a/data_full/CVE_clean/2018-13074.sol +++ /dev/null @@ -1,112 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - uint256 initialSupply=5000000000; - string tokenName='FIB'; - string tokenSymbol='FIB'; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - emit Burn(_from, _value); - return true; - } -} -contract FIBToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function FIBToken( - ) TokenERC20() public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13075.sol b/data_full/CVE_clean/2018-13075.sol deleted file mode 100644 index 19fcc9da..00000000 --- a/data_full/CVE_clean/2018-13075.sol +++ /dev/null @@ -1,142 +0,0 @@ -pragma solidity ^0.4.18; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } - function destruct() public onlyOwner { - selfdestruct(owner); - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20() public { - totalSupply = 500000000000 * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = "Carbon Exchange Coin Token"; - symbol = "CEC"; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract CarbonExchangeCoinToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - uint256 public decimals = 18; - string public tokenName; - string public tokenSymbol; - uint minBalanceForAccounts ; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function CarbonExchangeCoinToken() public { - owner = msg.sender; - totalSupply = 50000000000000000000000000000; - balanceOf[owner]=totalSupply; - tokenName="Carbon Exchange Coin Token"; - tokenSymbol="CEC"; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } - function setMinBalance(uint minimumBalanceInFinney) public onlyOwner { - minBalanceForAccounts = minimumBalanceInFinney * 1 finney; - } - function setTokenName(string newTokenName) public onlyOwner{ - tokenName = newTokenName; - } - function setTokenSymbol(string newTokenSymbol) public onlyOwner{ - tokenSymbol = newTokenSymbol; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13076.sol b/data_full/CVE_clean/2018-13076.sol deleted file mode 100644 index 66b61fad..00000000 --- a/data_full/CVE_clean/2018-13076.sol +++ /dev/null @@ -1,125 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - revert(); - } -} -contract Betcash is owned, token { - uint public buyRate = 4000; - bool public isSelling = true; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function Betcash( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - function buy() payable { - if(isSelling == false) revert(); - uint amount = msg.value * buyRate; - balanceOf[msg.sender] += amount; - balanceOf[owner] -= amount; - Transfer(owner, msg.sender, amount); - } - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13077.sol b/data_full/CVE_clean/2018-13077.sol deleted file mode 100644 index d34b34e5..00000000 --- a/data_full/CVE_clean/2018-13077.sol +++ /dev/null @@ -1,128 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } -contract token { - string public name = 'CTB'; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - require (_value < allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) returns (bool success) { - require (balanceOf[msg.sender] > _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract CTB is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function CTB( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13078.sol b/data_full/CVE_clean/2018-13078.sol deleted file mode 100644 index 6abcf5b3..00000000 --- a/data_full/CVE_clean/2018-13078.sol +++ /dev/null @@ -1,107 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() public{ - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) public { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) public { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () public { - revert(); - } -} -contract Jitech is owned, token { - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function Jitech( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) public token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) public { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) public onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) public onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13079.sol b/data_full/CVE_clean/2018-13079.sol deleted file mode 100644 index 703170f6..00000000 --- a/data_full/CVE_clean/2018-13079.sol +++ /dev/null @@ -1,128 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract GoodTo { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function GoodTo( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract StandardToken is owned, GoodTo { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function StandardToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) GoodTo(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13080.sol b/data_full/CVE_clean/2018-13080.sol deleted file mode 100644 index 7d8884c3..00000000 --- a/data_full/CVE_clean/2018-13080.sol +++ /dev/null @@ -1,107 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() public{ - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) public { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) public { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () public { - revert(); - } -} -contract Goutex is owned, token { - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function Goutex( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) public token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) public { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) public onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) public onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13081.sol b/data_full/CVE_clean/2018-13081.sol deleted file mode 100644 index 62d35a89..00000000 --- a/data_full/CVE_clean/2018-13081.sol +++ /dev/null @@ -1,127 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract GZSToken is owned, token { - uint public buyRate = 46000; - bool public isSelling = true; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function GZSToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - function buy() payable { - if(isSelling == false) throw; - uint amount = msg.value * buyRate; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13082.sol b/data_full/CVE_clean/2018-13082.sol deleted file mode 100644 index 723c8884..00000000 --- a/data_full/CVE_clean/2018-13082.sol +++ /dev/null @@ -1,133 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract ModiTokenERC20 { - string public constant _myTokeName = 'MODI Token'; - string public constant _mySymbol = 'MODI'; - uint public constant _myinitialSupply = 10000; - uint8 public constant _myDecimal = 18; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function ModiTokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - decimals = _myDecimal; - totalSupply = _myinitialSupply * (10 ** uint256(_myDecimal)); - balanceOf[msg.sender] = totalSupply; - name = _myTokeName; - symbol = _mySymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract MyAdvancedToken is owned, ModiTokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) ModiTokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13083.sol b/data_full/CVE_clean/2018-13083.sol deleted file mode 100644 index e818810b..00000000 --- a/data_full/CVE_clean/2018-13083.sol +++ /dev/null @@ -1,113 +0,0 @@ -pragma solidity ^0.4.21; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - emit Burn(_from, _value); - return true; - } -} -contract PlazaToken is owned, TokenERC20 { - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function PlazaToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13084.sol b/data_full/CVE_clean/2018-13084.sol deleted file mode 100644 index d0e05edb..00000000 --- a/data_full/CVE_clean/2018-13084.sol +++ /dev/null @@ -1,123 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient -{ -function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; -} -contract StandardToken { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function StandardToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public returns (bool success) - { - _transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract GoodTimeCoin is owned, StandardToken { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function GoodTimeCoin( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) StandardToken(initialSupply, tokenName, tokenSymbol) public {} - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13085.sol b/data_full/CVE_clean/2018-13085.sol deleted file mode 100644 index 97a9e5a3..00000000 --- a/data_full/CVE_clean/2018-13085.sol +++ /dev/null @@ -1,140 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - uint public free = 100 * 10 ** uint256(decimals); - mapping (address => uint256) public balances; - mapping (address => mapping (address => uint256)) public allowance; - mapping (address => bool) public created; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function changeFree(uint newFree) public { - free = newFree; - } - function balanceOf(address _owner) public constant returns (uint balance) { - if (!created[_owner] && balances[_owner] == 0) { - return free; - } - else - { - return balances[_owner]; - } - } - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balances[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - created[msg.sender] = true; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - if (!created[_from]) { - balances[_from] = free; - created[_from] = true; - } - if (!created[_to]) { - created[_to] = true; - } - require(balances[_from] >= _value); - require(balances[_to] + _value >= balances[_to]); - uint previousBalances = balances[_from] + balances[_to]; - balances[_from] -= _value; - balances[_to] += _value; - emit Transfer(_from, _to, _value); - assert(balances[_from] + balances[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balances[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balances[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - emit Burn(_from, _value); - return true; - } -} -contract FreeCoin is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function FreeCoin( - uint256 initialSupply, - string tokenName , - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balances[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(address(this).balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13086.sol b/data_full/CVE_clean/2018-13086.sol deleted file mode 100644 index 9556756d..00000000 --- a/data_full/CVE_clean/2018-13086.sol +++ /dev/null @@ -1,130 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract Token { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract IADOWR is owned, Token { - string public name = "IADOWR Coin"; - string public symbol = "IAD"; - address public IADAddress = this; - uint8 public decimals = 18; - uint256 public initialSupply = 2000000000000000000000000000; - uint256 public totalSupply = 2000000000000000000000000000; - uint256 public unitsOneEthCanBuy = 5000; - uint256 public buyPriceEth = 0.2 finney; - uint256 public sellPriceEth = 0.1 finney; - uint256 public gasForIAD = 30000 wei; - uint256 public IADForGas = 1; - uint256 public gasReserve = 0.1 ether; - uint256 public minBalanceForAccounts = 2 finney; - bool public directTradeAllowed = false; - function IADOWR() { - balanceOf[msg.sender] = totalSupply; - } - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13087.sol b/data_full/CVE_clean/2018-13087.sol deleted file mode 100644 index aa51a00b..00000000 --- a/data_full/CVE_clean/2018-13087.sol +++ /dev/null @@ -1,124 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract MyAdvancedToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) payable public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13088.sol b/data_full/CVE_clean/2018-13088.sol deleted file mode 100644 index e1b4a640..00000000 --- a/data_full/CVE_clean/2018-13088.sol +++ /dev/null @@ -1,128 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract MyAdvancedToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13089.sol b/data_full/CVE_clean/2018-13089.sol deleted file mode 100644 index aef80f80..00000000 --- a/data_full/CVE_clean/2018-13089.sol +++ /dev/null @@ -1,126 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name ; - string public symbol ; - uint8 public decimals = 18; - uint256 public totalSupply ; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract UCoinToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function UCoinToken( - ) - TokenERC20(5000000000, "Universal Coin", "UCOIN") public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13090.sol b/data_full/CVE_clean/2018-13090.sol deleted file mode 100644 index 97695ae6..00000000 --- a/data_full/CVE_clean/2018-13090.sol +++ /dev/null @@ -1,128 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract YiTongCoin is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function YiTongCoin( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13091.sol b/data_full/CVE_clean/2018-13091.sol deleted file mode 100644 index 3da164fe..00000000 --- a/data_full/CVE_clean/2018-13091.sol +++ /dev/null @@ -1,111 +0,0 @@ -pragma solidity ^0.4.16; -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} - contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - } -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract sumocoin is owned { - using SafeMath for uint256; - string public name = "sumocoin"; - string public symbol = "SUMO"; - uint8 public decimals = 18; - uint256 public totalSupply = 10**25; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function sumocoin(){ - balanceOf[msg.sender] = totalSupply; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } - function distributeToken(address[] addresses, uint256 _value) onlyOwner { - for (uint i = 0; i < addresses.length; i++) { - balanceOf[owner] -= _value; - balanceOf[addresses[i]] += _value; - Transfer(owner, addresses[i], _value); - } -} -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13092.sol b/data_full/CVE_clean/2018-13092.sol deleted file mode 100644 index 9c90c53b..00000000 --- a/data_full/CVE_clean/2018-13092.sol +++ /dev/null @@ -1,89 +0,0 @@ -pragma solidity ^0.4.18; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract ReimburseToken is owned{ - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - function ReimburseToken( - uint256 initialSupply - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = "Reimburse Token"; - symbol = "REIM"; - decimals = 18; - } - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balanceOf[_owner]; - } - function _transfer(address _from, address _to, uint _value) internal { - require(balanceOf[_from] >= _value); - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - allowance[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } -} -contract AdvReimburseToken is owned, ReimburseToken { - function AdvReimburseToken( - uint256 initialSupply - ) ReimburseToken(initialSupply) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13113.sol b/data_full/CVE_clean/2018-13113.sol deleted file mode 100644 index 2567ec27..00000000 --- a/data_full/CVE_clean/2018-13113.sol +++ /dev/null @@ -1,77 +0,0 @@ -pragma solidity ^0.4.4; -contract Token { - function totalSupply() constant returns (uint256 supply) {} - function balanceOf(address _owner) constant returns (uint256 balance) {} - function transfer(address _to, uint256 _value) returns (bool success) {} - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - function approve(address _spender, uint256 _value) returns (bool success) {} - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} -contract HashnodeTestCoin is StandardToken { - string public name; - uint8 public decimals; - string public symbol; - string public version = 'H1.0'; - uint256 public unitsOneEthCanBuy; - uint256 public totalEthInWei; - address public fundsWallet; - function HashnodeTestCoin() { - balances[msg.sender] = 100000000000000000000000000; - totalSupply = 100000000000000000000000000; - name = "Easy Trading Token"; - decimals = 18; - symbol = "ETT"; - unitsOneEthCanBuy = 40000; - fundsWallet = msg.sender; - } - function() payable{ - totalEthInWei = totalEthInWei + msg.value; - uint256 amount = msg.value * unitsOneEthCanBuy; - require(balances[fundsWallet] >= amount); - balances[fundsWallet] = balances[fundsWallet] - amount; - balances[msg.sender] = balances[msg.sender] + amount; - Transfer(fundsWallet, msg.sender, amount); - fundsWallet.transfer(msg.value); - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13126.sol b/data_full/CVE_clean/2018-13126.sol deleted file mode 100644 index ca41e213..00000000 --- a/data_full/CVE_clean/2018-13126.sol +++ /dev/null @@ -1,151 +0,0 @@ -pragma solidity ^0.4.18; -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } -} -contract SpendToken is StandardToken { - string public constant name = "Spend Token"; - string public constant symbol = "SPEND"; - uint8 public constant decimals = 18; - address public presale; - address public team; - uint public constant TOKEN_LIMIT = 50000000; - function SpendToken(address _presale, address _team) public { - require(_presale != address(0)); - require(_team != address(0)); - presale = _presale; - team = _team; - } - function mint(address _holder, uint _value) external { - require(msg.sender == presale); - require(_value > 0); - require(totalSupply + _value <= TOKEN_LIMIT); - balances[_holder] += _value; - totalSupply += _value; - Transfer(0x0, _holder, _value); - } -} -contract MoxyOnePresale { - enum PreSaleState { - PreSaleStarted, - PreSaleFinished - } - SpendToken public token; - PreSaleState public preSaleState = PreSaleState.PreSaleStarted; - address public team; - bool public isPaused = false; - uint256 public pricePerToken = 1 ether / 1000; - event PreSaleStarted(); - event PreSaleFinished(); - event PreSalePaused(); - event PreSaleResumed(); - event TokenBuy(address indexed buyer, uint256 tokens); - modifier teamOnly { - require(msg.sender == team); - _; - } - function MoxyOnePresale() public { - team = msg.sender; - token = new SpendToken(this, team); - } - function pausePreSale() external teamOnly { - require(!isPaused); - require(preSaleState == PreSaleState.PreSaleStarted); - isPaused = true; - PreSalePaused(); - } - function resumePreSale() external teamOnly { - require(isPaused); - require(preSaleState == PreSaleState.PreSaleStarted); - isPaused = false; - PreSaleResumed(); - } - function finishPreSale() external teamOnly { - require(preSaleState == PreSaleState.PreSaleStarted); - preSaleState = PreSaleState.PreSaleFinished; - PreSaleFinished(); - } - function withdrawFunds(address _target, uint256 _amount) external teamOnly { - _target.transfer(_amount); - } - function buyTokens(address _buyer, uint256 _value) internal returns (uint) { - require(_buyer != address(0)); - require(_value > 0); - require(preSaleState == PreSaleState.PreSaleStarted); - require(!isPaused); - uint256 boughtTokens = _value / pricePerToken; - require(boughtTokens > 0); - token.mint(_buyer, boughtTokens); - TokenBuy(_buyer, boughtTokens); - } - function () external payable { - buyTokens(msg.sender, msg.value); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13127.sol b/data_full/CVE_clean/2018-13127.sol deleted file mode 100644 index 3940b40f..00000000 --- a/data_full/CVE_clean/2018-13127.sol +++ /dev/null @@ -1,126 +0,0 @@ -pragma solidity ^0.4.19; -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract DSPXToken is StandardToken { - string public constant name = "SP8DE PreSale Token"; - string public constant symbol = "DSPX"; - uint8 public constant decimals = 18; - address public preSale; - address public team; - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 888888888 * (1e18); - function DSPXToken(address _preSale, address _team) { - require(_preSale != address(0)); - require(_team != address(0)); - preSale = _preSale; - team = _team; - } - function mint(address holder, uint value) { - require(msg.sender == preSale); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - function unfreeze() external { - require(msg.sender == team); - isFrozen = false; - } - function transfer(address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13128.sol b/data_full/CVE_clean/2018-13128.sol deleted file mode 100644 index c5184528..00000000 --- a/data_full/CVE_clean/2018-13128.sol +++ /dev/null @@ -1,138 +0,0 @@ -pragma solidity ^0.4.21; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { - if (a == 0) { - return 0; - } - c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - return a / b; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256 c) { - c = a + b; - assert(c >= a); - return c; - } -} -contract ERC223ReceivingContract{ - function tokenFallback(address _from, uint _value, bytes _data) public; -} -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) public constant returns (uint); - function transfer(address to, uint value) public; - event Transfer(address indexed from, address indexed to, uint value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint); - function transferFrom(address from, address to, uint value) public; - function approve(address spender, uint value) public; - event Approval(address indexed owner, address indexed spender, uint value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint; - mapping(address => uint) balances; - modifier onlyPayloadSize(uint size) { - require(msg.data.length >= size + 4); - _; - } - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) public { - uint codeLength; - bytes memory empty; - assembly { - codeLength := extcodesize(_to) - } - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - if(codeLength > 0) { - ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); - receiver.tokenFallback(msg.sender, _value, empty); - } - emit Transfer(msg.sender, _to, _value); - } - function balanceOf(address _owner) public constant returns (uint balance) { - return balances[_owner]; - } -} -contract StandardToken is BasicToken, ERC20 { - mapping (address => mapping (address => uint)) allowed; - function transferFrom(address _from, address _to, uint _value) public { - uint256 _allowance = allowed[_from][msg.sender]; - uint codeLength; - bytes memory empty; - assembly { - codeLength := extcodesize(_to) - } - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - if(codeLength>0) { - ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); - receiver.tokenFallback(msg.sender, _value, empty); - } - emit Transfer(_from, _to, _value); - } - function approve(address _spender, uint _value) public { - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - } - function allowance(address _owner, address _spender) public constant returns (uint remaining) { - return allowed[_owner][_spender]; - } -} -contract BurnableToken is StandardToken { - function burn(uint _value) public { - require(_value > 0); - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - emit Burn(burner, _value); - } - event Burn(address indexed burner, uint indexed value); -} -contract ETY is BurnableToken { - string public name = "Etherty Token"; - string public symbol = "ETY"; - uint public decimals = 18; - uint constant TOKEN_LIMIT = 240 * 1e6 * 1e18; - address public ico; - bool public tokensAreFrozen = true; - function ETY(address _ico) public { - ico = _ico; - } - function mint(address _holder, uint _value) external { - require(msg.sender == ico); - require(_value != 0); - require(totalSupply + _value <= TOKEN_LIMIT); - balances[_holder] += _value; - totalSupply += _value; - emit Transfer(0x0, _holder, _value); - } - function burn(uint _value) public { - require(msg.sender == ico); - super.burn(_value); - } - function unfreeze() external { - require(msg.sender == ico); - tokensAreFrozen = false; - } - function transfer(address _to, uint _value) public { - require(!tokensAreFrozen); - super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) public { - require(!tokensAreFrozen); - super.transferFrom(_from, _to, _value); - } - function approve(address _spender, uint _value) public { - require(!tokensAreFrozen); - super.approve(_spender, _value); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13129.sol b/data_full/CVE_clean/2018-13129.sol deleted file mode 100644 index 98242287..00000000 --- a/data_full/CVE_clean/2018-13129.sol +++ /dev/null @@ -1,152 +0,0 @@ -pragma solidity ^0.4.18; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract MigrationAgent { - function migrateFrom(address _from, uint _value) public; -} -contract SPXToken is StandardToken { - string public constant name = "SP8DE Token"; - string public constant symbol = "SPX"; - uint8 public constant decimals = 18; - address public ico; - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 8888888888 * (1e18); - address public migrationMaster; - address public migrationAgent; - uint public totalMigrated; - event Migrate(address indexed _from, address indexed _to, uint _value); - function SPXToken(address _ico, address _migrationMaster) public { - require(_ico != 0); - ico = _ico; - migrationMaster = _migrationMaster; - } - function mint(address holder, uint value) public { - require(msg.sender == ico); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - function unfreeze() public { - require(msg.sender == ico); - isFrozen = false; - } - function transfer(address _to, uint _value) public returns (bool) { - require(_to != address(0)); - require(!isFrozen); - return super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } - function migrate(uint value) external { - require(migrationAgent != 0); - require(value > 0); - require(value <= balances[msg.sender]); - balances[msg.sender] -= value; - totalSupply -= value; - totalMigrated += value; - MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); - Migrate(msg.sender, migrationAgent, value); - } - function setMigrationAgent(address _agent) external { - require(migrationAgent == 0); - require(msg.sender == migrationMaster); - migrationAgent = _agent; - } - function setMigrationMaster(address _master) external { - require(msg.sender == migrationMaster); - require(_master != 0); - migrationMaster = _master; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13131.sol b/data_full/CVE_clean/2018-13131.sol deleted file mode 100644 index 02350c22..00000000 --- a/data_full/CVE_clean/2018-13131.sol +++ /dev/null @@ -1,178 +0,0 @@ -pragma solidity ^0.4.19; -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract DSPXToken is StandardToken { - string public constant name = "SP8DE PreSale Token"; - string public constant symbol = "DSPX"; - uint8 public constant decimals = 18; - address public preSale; - address public team; - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 888888888 * (1e18); - function DSPXToken(address _preSale, address _team) { - require(_preSale != address(0)); - require(_team != address(0)); - preSale = _preSale; - team = _team; - } - function mint(address holder, uint value) { - require(msg.sender == preSale); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - function unfreeze() external { - require(msg.sender == team); - isFrozen = false; - } - function transfer(address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } -} -contract SpadePreSale { - DSPXToken public token; - address public team; - address public icoAgent; - modifier teamOnly {require(msg.sender == team); _;} - modifier icoAgentOnly {require(msg.sender == icoAgent); _;} - bool public isPaused = false; - enum PreSaleState { Created, PreSaleStarted, PreSaleFinished } - PreSaleState public preSaleState = PreSaleState.Created; - event PreSaleStarted(); - event PreSaleFinished(); - event PreSalePaused(); - event PreSaleResumed(); - event TokenBuy(address indexed buyer, uint256 tokens, uint factor, string tx); - function SpadePreSale(address _team, address _icoAgent) public { - require(_team != address(0)); - require(_icoAgent != address(0)); - team = _team; - icoAgent = _icoAgent; - token = new DSPXToken(this, team); - } - function startPreSale() external teamOnly { - require(preSaleState == PreSaleState.Created); - preSaleState = PreSaleState.PreSaleStarted; - PreSaleStarted(); - } - function pausePreSale() external teamOnly { - require(!isPaused); - require(preSaleState == PreSaleState.PreSaleStarted); - isPaused = true; - PreSalePaused(); - } - function resumePreSale() external teamOnly { - require(isPaused); - require(preSaleState == PreSaleState.PreSaleStarted); - isPaused = false; - PreSaleResumed(); - } - function finishPreSale() external teamOnly { - require(preSaleState == PreSaleState.PreSaleStarted); - preSaleState = PreSaleState.PreSaleFinished; - PreSaleFinished(); - } - function buyPreSaleTokens(address buyer, uint256 tokens, uint factor, string txHash) external icoAgentOnly returns (uint) { - require(buyer != address(0)); - require(tokens > 0); - require(preSaleState == PreSaleState.PreSaleStarted); - require(!isPaused); - token.mint(buyer, tokens); - TokenBuy(buyer, tokens, factor, txHash); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13132.sol b/data_full/CVE_clean/2018-13132.sol deleted file mode 100644 index 253f6388..00000000 --- a/data_full/CVE_clean/2018-13132.sol +++ /dev/null @@ -1,249 +0,0 @@ -pragma solidity ^0.4.18; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract MigrationAgent { - function migrateFrom(address _from, uint _value) public; -} -contract SPXToken is StandardToken { - string public constant name = "SP8DE Token"; - string public constant symbol = "SPX"; - uint8 public constant decimals = 18; - address public ico; - bool public isFrozen = true; - uint public constant TOKEN_LIMIT = 8888888888 * (1e18); - address public migrationMaster; - address public migrationAgent; - uint public totalMigrated; - event Migrate(address indexed _from, address indexed _to, uint _value); - function SPXToken(address _ico, address _migrationMaster) public { - require(_ico != 0); - ico = _ico; - migrationMaster = _migrationMaster; - } - function mint(address holder, uint value) public { - require(msg.sender == ico); - require(value > 0); - require(totalSupply + value <= TOKEN_LIMIT); - balances[holder] += value; - totalSupply += value; - Transfer(0x0, holder, value); - } - function unfreeze() public { - require(msg.sender == ico); - isFrozen = false; - } - function transfer(address _to, uint _value) public returns (bool) { - require(_to != address(0)); - require(!isFrozen); - return super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - require(!isFrozen); - return super.transferFrom(_from, _to, _value); - } - function approve(address _spender, uint _value) public returns (bool) { - require(!isFrozen); - return super.approve(_spender, _value); - } - function migrate(uint value) external { - require(migrationAgent != 0); - require(value > 0); - require(value <= balances[msg.sender]); - balances[msg.sender] -= value; - totalSupply -= value; - totalMigrated += value; - MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); - Migrate(msg.sender, migrationAgent, value); - } - function setMigrationAgent(address _agent) external { - require(migrationAgent == 0); - require(msg.sender == migrationMaster); - migrationAgent = _agent; - } - function setMigrationMaster(address _master) external { - require(msg.sender == migrationMaster); - require(_master != 0); - migrationMaster = _master; - } -} -contract SpadeIco { - uint public constant TOKENS_FOR_SALE = 3655555558 * 1e18; - uint public constant TOKENS_FOUNDATION = 1777777778 * 1e18; - uint tokensSold = 0; - SPXToken public token; - address public team; - address public icoAgent; - address public migrationMaster; - modifier teamOnly {require(msg.sender == team); _;} - modifier icoAgentOnly {require(msg.sender == icoAgent); _;} - bool public isPaused = false; - enum IcoState { Created, IcoStarted, IcoFinished } - IcoState public icoState = IcoState.Created; - event IcoStarted(); - event IcoFinished(); - event IcoPaused(); - event IcoResumed(); - event TokenBuy(address indexed buyer, uint256 tokens, uint256 factor, string tx); - event TokenBuyPresale(address indexed buyer, uint256 tokens, uint256 factor, string tx); - event TokenWin(address indexed buyer, uint256 tokens, uint256 jackpot); - function SpadeIco(address _team, address _icoAgent, address _migrationMaster) public { - require(_team != address(0) && _icoAgent != address(0) && _migrationMaster != address(0)); - migrationMaster = _migrationMaster; - team = _team; - icoAgent = _icoAgent; - token = new SPXToken(this, migrationMaster); - } - function startIco() external teamOnly { - require(icoState == IcoState.Created); - icoState = IcoState.IcoStarted; - IcoStarted(); - } - function finishIco(address foundation, address other) external teamOnly { - require(foundation != address(0)); - require(other != address(0)); - require(icoState == IcoState.IcoStarted); - icoState = IcoState.IcoFinished; - uint256 amountWithFoundation = SafeMath.add(token.totalSupply(), TOKENS_FOUNDATION); - if (amountWithFoundation > token.TOKEN_LIMIT()) { - uint256 foundationToMint = token.TOKEN_LIMIT() - token.totalSupply(); - if (foundationToMint > 0) { - token.mint(foundation, foundationToMint); - } - } else { - token.mint(foundation, TOKENS_FOUNDATION); - uint mintedTokens = token.totalSupply(); - uint remaining = token.TOKEN_LIMIT() - mintedTokens; - if (remaining > 0) { - token.mint(other, remaining); - } - } - token.unfreeze(); - IcoFinished(); - } - function pauseIco() external teamOnly { - require(!isPaused); - require(icoState == IcoState.IcoStarted); - isPaused = true; - IcoPaused(); - } - function resumeIco() external teamOnly { - require(isPaused); - require(icoState == IcoState.IcoStarted); - isPaused = false; - IcoResumed(); - } - function convertPresaleTokens(address buyer, uint256 tokens, uint256 factor, string txHash) external icoAgentOnly returns (uint) { - require(buyer != address(0)); - require(tokens > 0); - require(validState()); - uint256 tokensToSell = SafeMath.add(tokensSold, tokens); - require(tokensToSell <= TOKENS_FOR_SALE); - tokensSold = tokensToSell; - token.mint(buyer, tokens); - TokenBuyPresale(buyer, tokens, factor, txHash); - } - function creditJackpotTokens(address buyer, uint256 tokens, uint256 jackpot) external icoAgentOnly returns (uint) { - require(buyer != address(0)); - require(tokens > 0); - require(validState()); - token.mint(buyer, tokens); - TokenWin(buyer, tokens, jackpot); - } - function buyTokens(address buyer, uint256 tokens, uint256 factor, string txHash) external icoAgentOnly returns (uint) { - require(buyer != address(0)); - require(tokens > 0); - require(validState()); - uint256 tokensToSell = SafeMath.add(tokensSold, tokens); - require(tokensToSell <= TOKENS_FOR_SALE); - tokensSold = tokensToSell; - token.mint(buyer, tokens); - TokenBuy(buyer, tokens, factor, txHash); - } - function validState() internal view returns (bool) { - return icoState == IcoState.IcoStarted && !isPaused; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13144.sol b/data_full/CVE_clean/2018-13144.sol deleted file mode 100644 index 831fbe0e..00000000 --- a/data_full/CVE_clean/2018-13144.sol +++ /dev/null @@ -1,65 +0,0 @@ -pragma solidity ^0.4.8; -contract Token{ - uint256 public totalSupply; - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns - (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns - (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 - _value); -} -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) returns - (bool success) { - require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) - { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} -contract HumanStandardToken is StandardToken { - string public name; - uint8 public decimals; - string public symbol; - string public version = 'H0.1'; - function HumanStandardToken(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) { - balances[msg.sender] = _initialAmount; - totalSupply = _initialAmount; - name = _tokenName; - decimals = _decimalUnits; - symbol = _tokenSymbol; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - require(_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)); - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13189.sol b/data_full/CVE_clean/2018-13189.sol deleted file mode 100644 index 3b2fe003..00000000 --- a/data_full/CVE_clean/2018-13189.sol +++ /dev/null @@ -1,171 +0,0 @@ -pragma solidity ^0.4.18; -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) constant returns (uint256); - function transfer(address to, uint256 value) returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant returns (uint256); - function transferFrom(address from, address to, uint256 value) returns (bool); - function approve(address spender, uint256 value) returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) returns (bool) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) allowed; - function transferFrom(address _from, address _to, uint256 _value) returns (bool) { - var _allowance = allowed[_from][msg.sender]; - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) returns (bool) { - require((_value == 0) || (allowed[msg.sender][_spender] == 0)); - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} -contract Ownable { - address public owner; - function Ownable() { - owner = msg.sender; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - if (newOwner != address(0)) { - owner = newOwner; - } - } -} -contract Pausable is Ownable { - event Pause(); - event Unpause(); - bool public paused = false; - modifier whenNotPaused() { - require(!paused); - _; - } - modifier whenPaused { - require(paused); - _; - } - function pause() onlyOwner whenNotPaused returns (bool) { - paused = true; - Pause(); - return true; - } - function unpause() onlyOwner whenPaused returns (bool) { - paused = false; - Unpause(); - return true; - } -} -contract PausableToken is StandardToken, Pausable { - function transfer(address _to, uint _value) whenNotPaused returns (bool) { - return super.transfer(_to, _value); - } - function transferFrom(address _from, address _to, uint _value) whenNotPaused returns (bool) { - return super.transferFrom(_from, _to, _value); - } -} -contract UNLB is PausableToken { - string public constant name = "UnolaboToken"; - string public constant symbol = "UNLB"; - uint256 public constant decimals = 18; - function UNLB() { - owner = msg.sender; - } - function mint(address _x, uint _v) public onlyOwner { - balances[_x] += _v; - totalSupply += _v; - Transfer(0x0, _x, _v); - } -} -contract ICO is Pausable { - uint public constant ICO_START_DATE = 1511773200; - uint public constant ICO_END_DATE = 1525018620; - address public constant admin = 0xFeC0714C2eE71a486B679d4A3539FA875715e7d8; - address public constant teamWallet = 0xf16d5733A31D54e828460AFbf7D60aA803a61C51; - UNLB public unlb; - bool public isFinished = false; - event ForeignBuy(address investor, uint unlbValue, string txHash); - function ICO() { - owner = admin; - unlb = new UNLB(); - unlb.pause(); - } - function pricePerWei() public constant returns(uint) { - if (now < 1511799420) return 800.0 * 1 ether; - else if(now < 1511885820) return 750.0 * 1 ether; - else if(now < 1513181820) return 675.0 * 1 ether; - else if(now < 1515514620) return 575.0 * 1 ether; - else if(now < 1516205820) return 537.5 * 1 ether; - else return 500.0 * 1 ether; - } - function() public payable { - require(!paused && now >= ICO_START_DATE && now < ICO_END_DATE); - uint _tokenVal = (msg.value * pricePerWei()) / 1 ether; - unlb.mint(msg.sender, _tokenVal); - } - function foreignBuy(address _investor, uint _unlbValue, string _txHash) external onlyOwner { - require(!paused && now >= ICO_START_DATE && now < ICO_END_DATE); - require(_unlbValue > 0); - unlb.mint(_investor, _unlbValue); - ForeignBuy(_investor, _unlbValue, _txHash); - } - function finish(address _team, address _fund, address _bounty, address _backers) external onlyOwner { - require(now >= ICO_END_DATE && !isFinished); - unlb.unpause(); - isFinished = true; - uint _total = unlb.totalSupply() * 100 / (100 - 12 - 15 - 5 - 3); - unlb.mint(_team, (_total * 12) / 100); - unlb.mint(_fund, (_total * 15) / 100); - unlb.mint(_bounty, (_total * 5) / 100); - unlb.mint(_backers, (_total * 3) / 100); - } - function withdraw() external onlyOwner { - teamWallet.transfer(this.balance); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13202.sol b/data_full/CVE_clean/2018-13202.sol deleted file mode 100644 index caadc7fd..00000000 --- a/data_full/CVE_clean/2018-13202.sol +++ /dev/null @@ -1,140 +0,0 @@ -pragma solidity ^0.4.11; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MyBoToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - event Burn(address indexed from, uint256 value); - function MyBoToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } - function burn(uint256 amount) onlyOwner returns (bool success) { - if (balanceOf[msg.sender] < amount) throw; - balanceOf[msg.sender] -= amount; - totalSupply -= amount; - Burn(msg.sender, amount); - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13208.sol b/data_full/CVE_clean/2018-13208.sol deleted file mode 100644 index 7d590e17..00000000 --- a/data_full/CVE_clean/2018-13208.sol +++ /dev/null @@ -1,131 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "MoneyTree 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MoneyTreeToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 95000000 * 10**8; - uint8 public constant decimalUnits = 8; - string public tokenName = "MoneyTree"; - string public tokenSymbol = "TREE"; - function MoneyTreeToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13220.sol b/data_full/CVE_clean/2018-13220.sol deleted file mode 100644 index 33fa8690..00000000 --- a/data_full/CVE_clean/2018-13220.sol +++ /dev/null @@ -1,132 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MAVCash is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MAVCash( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13221.sol b/data_full/CVE_clean/2018-13221.sol deleted file mode 100644 index 17bbd955..00000000 --- a/data_full/CVE_clean/2018-13221.sol +++ /dev/null @@ -1,155 +0,0 @@ -pragma solidity ^0.4.14; -library SafeMath { - function mul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - function sub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - function add(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c >= a); - return c; - } - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} -contract Ownable { - address public owner; - function Ownable() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - if (newOwner != address(0)) { - owner = newOwner; - } - } -} -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant returns (uint); - function transferFrom(address from, address to, uint value); - function approve(address spender, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} -contract newToken is ERC20Basic { - using SafeMath for uint; - mapping(address => uint) balances; - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - } - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } -} -contract StandardToken is newToken, ERC20 { - mapping (address => mapping (address => uint)) allowed; - function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) { - var _allowance = allowed[_from][msg.sender]; - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - } - function approve(address _spender, uint _value) { - if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - } - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } -} -contract Extreme is StandardToken, Ownable { - string public constant name = "Extreme Coin"; - string public constant symbol = "XT"; - uint public constant decimals = 2; - uint256 public initialSupply; - function Extreme () { - totalSupply = 59347950076; - balances[msg.sender] = totalSupply; - initialSupply = totalSupply; - Transfer(0, this, totalSupply); - Transfer(this, msg.sender, totalSupply); - } -} -contract ExtremeToken is Ownable, Extreme { -uint256 public sellPrice; -uint256 public buyPrice; - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable returns (uint amount) - { - amount = msg.value / buyPrice; - if (balances[this] < amount) throw; - balances[msg.sender] += amount; - balances[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balances[msg.sender] < amount ) throw; - balances[this] += amount; - balances[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } - function transfer(address _to, uint256 _value) { - require(balances[msg.sender] > _value); - require(balances[_to] + _value > balances[_to]); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balances[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13225.sol b/data_full/CVE_clean/2018-13225.sol deleted file mode 100644 index 08a64e88..00000000 --- a/data_full/CVE_clean/2018-13225.sol +++ /dev/null @@ -1,137 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - assert(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - assert (balanceOf[msg.sender] >= _value); - assert (balanceOf[_to] + _value >= balanceOf[_to]); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - assert (balanceOf[_from] >= _value); - assert (balanceOf[_to] + _value >= balanceOf[_to]); - assert (_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - assert(false); - } -} -contract MyYLCToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - event Burn(address indexed from, uint256 value); - function MyYLCToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - assert (balanceOf[msg.sender] >= _value); - assert (balanceOf[_to] + _value >= balanceOf[_to]); - assert (!frozenAccount[msg.sender]); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - assert (!frozenAccount[_from]); - assert (balanceOf[_from] >= _value); - assert (balanceOf[_to] + _value >= balanceOf[_to]); - assert (_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - assert (balanceOf[this] >= amount); - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - assert (balanceOf[msg.sender] >= amount ); - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - assert (msg.sender.send(amount * sellPrice)); - Transfer(msg.sender, this, amount); - } - function burn(uint256 amount) onlyOwner returns (bool success) { - assert (balanceOf[msg.sender] >= amount); - balanceOf[msg.sender] -= amount; - totalSupply -= amount; - Burn(msg.sender, amount); - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13227.sol b/data_full/CVE_clean/2018-13227.sol deleted file mode 100644 index 525ac761..00000000 --- a/data_full/CVE_clean/2018-13227.sol +++ /dev/null @@ -1,131 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "MoneyChainNet 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract MoneyChainNetToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 35000000 * 10**8; - uint8 public constant decimalUnits = 8; - string public tokenName = "MoneyChainNet"; - string public tokenSymbol = "MCN"; - function MoneyChainNetToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13228.sol b/data_full/CVE_clean/2018-13228.sol deleted file mode 100644 index c88b9aeb..00000000 --- a/data_full/CVE_clean/2018-13228.sol +++ /dev/null @@ -1,131 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "Crowdnext 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract Crowdnext is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 100000000 * 10**4; - uint8 public constant decimalUnits = 4; - string public tokenName = "Crowdnext"; - string public tokenSymbol = "CNX"; - function Crowdnext() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13230.sol b/data_full/CVE_clean/2018-13230.sol deleted file mode 100644 index 3e963131..00000000 --- a/data_full/CVE_clean/2018-13230.sol +++ /dev/null @@ -1,131 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "DestiNeed 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract DestiNeedToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 950000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "DestiNeed"; - string public tokenSymbol = "DSN"; - function DestiNeedToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13325.sol b/data_full/CVE_clean/2018-13325.sol deleted file mode 100644 index eb492413..00000000 --- a/data_full/CVE_clean/2018-13325.sol +++ /dev/null @@ -1,129 +0,0 @@ -pragma solidity ^0.4.18; -interface tokenRecipient{ - function receiveApproval(address _from,uint256 _value,address _token,bytes _extraData) external ; -} -contract GrowToken{ - address public owner; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - uint256 public sellPrice; - uint256 public buyPrice; - bool public sellOpen; - bool public buyOpen; - mapping(address => uint256) public balanceOf; - mapping(address => mapping(address => uint256)) public allowance; - mapping(address=>bool) public frozenAccount; - event Transfer(address indexed from,address indexed to , uint256 value); - event Approval(address indexed owner,address indexed spender,uint256 value); - event FrozenFunds(address target,bool freeze); - event SellToken(address seller,uint256 sellPrice, uint256 amount,uint256 getEth); - event BuyToken(address buyer,uint256 buyPrice,uint256 amount,uint256 spendEth); - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function GrowToken() public { - owner = 0x757D7FbB9822b5033a6BBD4e17F95714942f921f; - name = "GROWCHAIN"; - symbol = "GROW"; - decimals = 8; - totalSupply = 5000000000 * 10 ** uint256(8); - balanceOf[owner] = totalSupply; - } - function () public payable { - if(msg.sender!=owner){ - _buy(); - } - } - function transfer(address _to,uint256 _value) public{ - require(!frozenAccount[msg.sender]); - if(_to == address(this)){ - _sell(msg.sender,_value); - }else{ - _transfer(msg.sender,_to,_value); - } - } - function transferFrom(address _from,address _to,uint256 _value) public returns (bool success){ - require(!frozenAccount[_from]&&!frozenAccount[msg.sender]); - require(_value<=allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - if(_to == address(this)){ - _sell(_from,_value); - }else - { - _transfer(_from,_to,_value); - } - return true; - } - function approve(address _spender,uint256 _value) public returns (bool success){ - require(!frozenAccount[msg.sender]); - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender,uint256 _value,bytes _extraData) - public returns (bool success){ - require(!frozenAccount[msg.sender]); - tokenRecipient spender = tokenRecipient(_spender); - if(approve(_spender,_value)){ - spender.receiveApproval(msg.sender,_value,this,_extraData); - return true; - } - } - function freezeAccount(address target,bool freeze) onlyOwner public{ - require(target!=owner); - frozenAccount[target] = freeze; - FrozenFunds(target,freeze); - } - function transferOwnership(address newOwner) onlyOwner public{ - _transfer(owner,newOwner,balanceOf[owner]); - owner = newOwner; - } - function setPrices(uint256 newSellPrice,uint256 newBuyPrice) onlyOwner public{ - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function setBuyOpen(bool newBuyOpen) onlyOwner public{ - require(buyPrice>0); - buyOpen = newBuyOpen; - } - function setSellOpen(bool newSellOpen) onlyOwner public{ - require(sellPrice>0); - sellOpen = newSellOpen; - } - function transferEth(uint256 amount) onlyOwner public{ - msg.sender.transfer(amount*10**uint256(18)); - } - function _transfer(address _from,address _to, uint256 _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value >balanceOf[_to]); - uint256 previousBalances = balanceOf[_from]+balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from,_to,_value); - assert(balanceOf[_from]+balanceOf[_to] == previousBalances); - } - function _buy() internal returns (uint256 amount){ - require(buyOpen); - require(buyPrice>0); - require(msg.value>0); - amount = msg.value / buyPrice; - _transfer(owner,msg.sender,amount); - BuyToken(msg.sender,buyPrice,amount,msg.value); - return amount; - } - function _sell(address _from,uint256 amount) internal returns (uint256 revenue){ - require(sellOpen); - require(!frozenAccount[_from]); - require(amount>0); - require(sellPrice>0); - require(_from!=owner); - _transfer(_from,owner,amount); - revenue = amount * sellPrice; - _from.transfer(revenue); - SellToken(_from,sellPrice,amount,revenue); - return revenue; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13326.sol b/data_full/CVE_clean/2018-13326.sol deleted file mode 100644 index f73c9523..00000000 --- a/data_full/CVE_clean/2018-13326.sol +++ /dev/null @@ -1,77 +0,0 @@ -pragma solidity ^0.4.4; -contract Token { - function totalSupply() constant returns (uint256 supply) {} - function balanceOf(address _owner) constant returns (uint256 balance) {} - function transfer(address _to, uint256 _value) returns (bool success) {} - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - function approve(address _spender, uint256 _value) returns (bool success) {} - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} -contract Bittelux is StandardToken { - string public name; - uint8 public decimals; - string public symbol; - string public version = 'H1.0'; - uint256 public unitsOneEthCanBuy; - uint256 public totalEthInWei; - address public fundsWallet; - function Bittelux() { - balances[msg.sender] = 10000000000000000000000000000; - totalSupply = 10000000000000000000000000000; - name = "Bittelux"; - decimals = 18; - symbol = "BTX"; - unitsOneEthCanBuy = 22500; - fundsWallet = msg.sender; - } - function() payable{ - totalEthInWei = totalEthInWei + msg.value; - uint256 amount = msg.value * unitsOneEthCanBuy; - require(balances[fundsWallet] >= amount); - balances[fundsWallet] = balances[fundsWallet] - amount; - balances[msg.sender] = balances[msg.sender] + amount; - Transfer(fundsWallet, msg.sender, amount); - fundsWallet.transfer(msg.value); - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13327.sol b/data_full/CVE_clean/2018-13327.sol deleted file mode 100644 index 952d7f38..00000000 --- a/data_full/CVE_clean/2018-13327.sol +++ /dev/null @@ -1,71 +0,0 @@ -pragma solidity ^0.4.4; -contract Token { - function totalSupply() constant returns (uint256 supply) {} - function balanceOf(address _owner) constant returns (uint256 balance) {} - function transfer(address _to, uint256 _value) returns (bool success) {} - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - function approve(address _spender, uint256 _value) returns (bool success) {} - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract StandardToken is Token { - function transfer(address _to, uint256 _value) returns (bool success) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} -contract ChuCunLingAIGO is StandardToken { - function () { - throw; - } - string public name; - uint8 public decimals; - string public symbol; - string public version = 'H0.1'; - function ChuCunLingAIGO( - uint256 _initialAmount, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol - ) { - balances[msg.sender] = _initialAmount; - totalSupply = _initialAmount; - name = _tokenName; - decimals = _decimalUnits; - symbol = _tokenSymbol; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13493.sol b/data_full/CVE_clean/2018-13493.sol deleted file mode 100644 index 1321f776..00000000 --- a/data_full/CVE_clean/2018-13493.sol +++ /dev/null @@ -1,191 +0,0 @@ -pragma solidity ^0.4.16; -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public - { - totalSupply = initialSupply * 10**18; - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) - { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) - { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - _value = _value * (10**18); - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract DaddyToken is owned, TokenERC20 { - uint8 public decimals = 18; - uint256 public totalContribution = 0; - uint256 public totalBonusTokensIssued = 0; - uint256 public sellTokenPerEther; - uint256 public buyTokenPerEther; - bool public purchasingAllowed = true; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function DaddyToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public - {} - function distributeToken(address[] addresses, uint256 _value) onlyOwner public { - _value = _value * 10**18; - for (uint i = 0; i < addresses.length; i++) { - balanceOf[owner] -= _value; - balanceOf[addresses[i]] += _value; - Transfer(owner, addresses[i], _value); - } - } - function enablePurchasing() onlyOwner public { - require (msg.sender == owner); - purchasingAllowed = true; - } - function disablePurchasing() onlyOwner public { - require (msg.sender == owner); - purchasingAllowed = false; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public returns (bool) { - mintedAmount = mintedAmount * 10**18; - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - return true; - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellTokenPerEther = newSellPrice; - buyTokenPerEther = newBuyPrice; - } - function() payable public { - require(msg.value > 0); - require(purchasingAllowed); - owner.transfer(msg.value); - totalContribution += msg.value; - uint256 tokensIssued = (msg.value * buyTokenPerEther); - if (msg.value >= 10 finney) { - tokensIssued += totalContribution; - bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); - if (bonusHash[0] == 0) { - uint8 bonusMultiplier = ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); - uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; - tokensIssued += bonusTokensIssued; - totalBonusTokensIssued += bonusTokensIssued; - } - } - totalSupply += tokensIssued; - balanceOf[msg.sender] += tokensIssued; - Transfer(address(this), msg.sender, tokensIssued); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellTokenPerEther); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellTokenPerEther); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13533.sol b/data_full/CVE_clean/2018-13533.sol deleted file mode 100644 index 50a4b9fb..00000000 --- a/data_full/CVE_clean/2018-13533.sol +++ /dev/null @@ -1,160 +0,0 @@ -pragma solidity ^0.4.18; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 0; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } -} -contract ALUXToken is owned, TokenERC20 { - uint256 public sellPrice = 10000000000000000; - uint256 public buyPrice = 10000000000000000; - bool public closeBuy = false; - bool public closeSell = false; - address public commissionGetter = 0xCd8bf69ad65c5158F0cfAA599bBF90d7f4b52Bb0; - uint256 public minimumCommission = 100000000000000; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - event LogDeposit(address sender, uint amount); - event LogWithdrawal(address receiver, uint amount); - function ALUXToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function refillTokens(uint256 _value) public onlyOwner{ - _transfer(msg.sender, this, _value); - } - function transfer(address _to, uint256 _value) public { - uint market_value = _value * sellPrice; - uint commission = market_value * 4 / 1000; - if (commission < minimumCommission){ commission = minimumCommission; } - address contr = this; - require(contr.balance >= commission); - commissionGetter.transfer(commission); - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - uint market_value = _value * sellPrice; - uint commission = market_value * 4 / 1000; - if (commission < minimumCommission){ commission = minimumCommission; } - address contr = this; - require(contr.balance >= commission); - commissionGetter.transfer(commission); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function mintToken(uint256 mintedAmount) onlyOwner public { - balanceOf[owner] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, owner, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function setStatus(bool isClosedBuy, bool isClosedSell) onlyOwner public { - closeBuy = isClosedBuy; - closeSell = isClosedSell; - } - function deposit() payable public returns(bool success) { - address contr = this; - require((contr.balance + msg.value) > contr.balance); - LogDeposit(msg.sender, msg.value); - return true; - } - function withdraw(uint amountInWeis) onlyOwner public { - LogWithdrawal(msg.sender, amountInWeis); - owner.transfer(amountInWeis); - } - function buy() payable public { - require(!closeBuy); - uint amount = msg.value / buyPrice; - uint market_value = amount * buyPrice; - uint commission = market_value * 4 / 1000; - if (commission < minimumCommission){ commission = minimumCommission; } - address contr = this; - require(contr.balance >= commission); - commissionGetter.transfer(commission); - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(!closeSell); - address contr = this; - uint market_value = amount * sellPrice; - uint commission = market_value * 4 / 1000; - if (commission < minimumCommission){ commission = minimumCommission; } - uint amount_weis = market_value + commission; - require(contr.balance >= amount_weis); - commissionGetter.transfer(commission); - _transfer(msg.sender, this, amount); - msg.sender.transfer(market_value); - } - function () public payable { buy(); } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13625.sol b/data_full/CVE_clean/2018-13625.sol deleted file mode 100644 index 3ffe6c04..00000000 --- a/data_full/CVE_clean/2018-13625.sol +++ /dev/null @@ -1,218 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public centralAuthority; - address public plutocrat; - function owned() { - centralAuthority = msg.sender; - plutocrat = msg.sender; - } - modifier onlyOwner { - if (msg.sender != centralAuthority) revert(); - _; - } - modifier onlyPlutocrat { - if (msg.sender != plutocrat) revert(); - _; - } - function transfekbolOwnership(address newOwner) onlyPlutocrat { - centralAuthority = newOwner; - } - function transfekbolPlutocrat(address newPlutocrat) onlyPlutocrat { - plutocrat = newPlutocrat; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public decentralizedEconomy = 'PLUTOCRACY'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed owner, address indexed spender, uint256 value); - event InterestFreeLending(address indexed from, address indexed to, uint256 value, uint256 duration_in_days); - event Settlement(address indexed from, address indexed to, uint256 value, string notes, string reference); - event AuthorityNotified(string notes, string reference); - event ClientsNotified(string notes, string reference); - event LoanRepaid(address indexed from, address indexed to, uint256 value, string reference); - event TokenBurnt(address indexed from, uint256 value); - event EconomyTaxed(string base_value, string target_value, string tax_rate, string taxed_value, string notes); - event EconomyRebated(string base_value, string target_value, string rebate_rate, string rebated_value, string notes); - event PlutocracyAchieved(string value, string notes); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (_to == 0x0) revert(); - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - Approval (msg.sender, _spender, _value); - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (_to == 0x0) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - revert(); - } -} -contract Krown is owned, token { - string public nominalValue; - string public update; - string public sign; - string public website; - uint256 public totalSupply; - uint256 public notificationFee; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function Krown( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol, - address centralMinter - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { - if(centralMinter != 0 ) centralAuthority = centralMinter; - balanceOf[centralAuthority] = initialSupply; - } - function transfer(address _to, uint256 _value) { - if (_to == 0x0) revert(); - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function lend(address _to, uint256 _value, uint256 _duration_in_days) { - if (_to == 0x0) revert(); - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - if (_duration_in_days > 36135) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - InterestFreeLending(msg.sender, _to, _value, _duration_in_days); - } - function repayLoan(address _to, uint256 _value, string _reference) { - if (_to == 0x0) revert(); - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - if (bytes(_reference).length != 66) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - LoanRepaid(msg.sender, _to, _value, _reference); - } - function settlvlement(address _from, uint256 _value, address _to, string _notes, string _reference) onlyOwner { - if (_from == plutocrat) revert(); - if (_to == 0x0) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (bytes(_reference).length != 66) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Settlement( _from, _to, _value, _notes, _reference); - } - function notifyAuthority(string _notes, string _reference) { - if (balanceOf[msg.sender] < notificationFee) revert(); - if (bytes(_reference).length > 66) revert(); - if (bytes(_notes).length > 64) revert(); - balanceOf[msg.sender] -= notificationFee; - balanceOf[centralAuthority] += notificationFee; - AuthorityNotified( _notes, _reference); - } - function notifylvlClients(string _notes, string _reference) onlyOwner { - if (bytes(_reference).length > 66) revert(); - if (bytes(_notes).length > 64) revert(); - ClientsNotified( _notes, _reference); - } - function taxlvlEconomy(string _base_value, string _target_value, string _tax_rate, string _taxed_value, string _notes) onlyOwner { - EconomyTaxed( _base_value, _target_value, _tax_rate, _taxed_value, _notes); - } - function rebatelvlEconomy(string _base_value, string _target_value, string _rebate_rate, string _rebated_value, string _notes) onlyOwner { - EconomyRebated( _base_value, _target_value, _rebate_rate, _rebated_value, _notes); - } - function plutocracylvlAchieved(string _value, string _notes) onlyOwner { - PlutocracyAchieved( _value, _notes); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (_to == 0x0) revert(); - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintlvlToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function burnlvlToken(address _from, uint256 _value) onlyOwner { - if (_from == plutocrat) revert(); - if (balanceOf[_from] < _value) revert(); - balanceOf[_from] -= _value; - totalSupply -= _value; - TokenBurnt(_from, _value); - } - function freezelvlAccount(address target, bool freeze) onlyOwner { - if (target == plutocrat) revert(); - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setlvlSign(string newSign) onlyOwner { - sign = newSign; - } - function setlvlNominalValue(string newNominalValue) onlyOwner { - nominalValue = newNominalValue; - } - function setlvlUpdate(string newUpdate) onlyOwner { - update = newUpdate; - } - function setlvlWebsite(string newWebsite) onlyOwner { - website = newWebsite; - } - function setlvlNfee(uint256 newFee) onlyOwner { - notificationFee = newFee; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13670.sol b/data_full/CVE_clean/2018-13670.sol deleted file mode 100644 index 10f265c3..00000000 --- a/data_full/CVE_clean/2018-13670.sol +++ /dev/null @@ -1,82 +0,0 @@ -pragma solidity ^0.4.18; -contract Owned { - address public owner; - function Owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -contract GFCB is Owned { - string public name="Golden Fortune Coin Blocked"; - string public symbol="GFCB"; - uint8 public decimals=18; - uint256 public totalSupply; - uint256 public sellPrice; - uint256 public buyPrice; - uint minBalanceForAccounts; - mapping (address => uint256) public balanceOf; - mapping (address => bool) public frozenAccount; - event Transfer(address indexed from, address indexed to, uint256 value); - event FrozenFunds(address target, bool frozen); - function GFCB() public { - totalSupply = 10000000000000000000000000000; - balanceOf[msg.sender] = totalSupply; - } - function setMinBalance(uint minimumBalanceInFinney) onlyOwner public { - minBalanceForAccounts = minimumBalanceInFinney * 1 finney; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) public { - require(!frozenAccount[msg.sender]); - if (msg.sender.balance= amount); - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - emit Transfer(this, msg.sender, amount); - return amount; - } - function sell(uint amount) public returns (uint revenue) { - require(balanceOf[msg.sender] >= amount); - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - revenue = amount * sellPrice; - msg.sender.transfer(revenue); - emit Transfer(msg.sender, this, amount); - return revenue; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13695.sol b/data_full/CVE_clean/2018-13695.sol deleted file mode 100644 index a239c579..00000000 --- a/data_full/CVE_clean/2018-13695.sol +++ /dev/null @@ -1,173 +0,0 @@ -pragma solidity ^0.4.14; -contract SafeMath { - function safeMul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function safeDiv(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - function safeSub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - function safeAdd(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c>=a && c>=b); - return c; - } - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} -contract ERC20 { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function allowance(address owner, address spender) constant returns (uint); - function transfer(address to, uint value) returns (bool ok); - function transferFrom(address from, address to, uint value) returns (bool ok); - function approve(address spender, uint value) returns (bool ok); - event Transfer(address indexed from, address indexed to, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} -contract StandardToken is ERC20, SafeMath { - event Minted(address receiver, uint amount); - mapping(address => uint) balances; - mapping (address => mapping (address => uint)) allowed; - function isToken() public constant returns (bool weAre) { - return true; - } - function transfer(address _to, uint _value) returns (bool success) { - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint _value) returns (bool success) { - uint _allowance = allowed[_from][msg.sender]; - balances[_to] = safeAdd(balances[_to], _value); - balances[_from] = safeSub(balances[_from], _value); - allowed[_from][msg.sender] = safeSub(_allowance, _value); - Transfer(_from, _to, _value); - return true; - } - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } - function approve(address _spender, uint _value) returns (bool success) { - if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } -} -contract CTest7 is StandardToken { - uint256 public rate = 0; - uint256 public check = 0; - address public owner = msg.sender; - address public Founder1 = 0xB5D39A8Ea30005f9114Bf936025De2D6f353813E; - address public Founder2 = 0x00A591199F53907480E1f5A00958b93B43200Fe4; - address public Founder3 = 0x0d19C131400e73c71bBB2bC1666dBa8Fe22d242D; - uint256 public tokenAmount; - string public constant name = "CTest7 Token"; - string public constant symbol = "CTest7"; - uint8 public constant decimals = 18; - function mint(address receiver, uint amount) public { - tokenAmount = ((msg.value*rate)/(1 ether)); - if (tokenAmount != amount || amount == 0 || receiver != msg.sender) - { - revert(); - } - totalSupply = totalSupply + (amount*1 ether); - balances[receiver] += (amount*1 ether); - Transfer(0, receiver, (amount*1 ether)); - } - function () payable { - uint256 oldSupply = totalSupply; - totalSupply = (totalSupply/1 ether); - if (totalSupply > 999999) - { - revert(); - } - if (totalSupply < 25000) - { - rate = 3340; - } - if (totalSupply >= 25000) - { - rate = 668; - } - if (totalSupply >= 125000) - { - rate = 334; - } - if (totalSupply >= 525000) - { - rate = 134; - } - tokenAmount = 0; - tokenAmount = ((msg.value*rate)/(1 ether)); - if (tokenAmount < 0) - { - revert(); - } - check = 0; - check = safeAdd(totalSupply, tokenAmount); - if (check > 1000000) - { - revert(); - } - if (totalSupply < 25000 && check > 25000) - { - revert(); - } - if (totalSupply < 125000 && check > 125000) - { - revert(); - } - if (totalSupply < 525000 && check > 525000) - { - revert(); - } - uint256 senderBalance = (balances[msg.sender]/1 ether); - if ((senderBalance + tokenAmount) > 50 && totalSupply < 25000) - { - revert(); - } - totalSupply = oldSupply; - mint(msg.sender, tokenAmount); - tokenAmount = 0; - check = 0; - rate = 0; - Founder1.transfer((msg.value/3)); - Founder2.transfer((msg.value/3)); - Founder3.transfer((msg.value/3)); - } - function Burn () { - if (msg.sender == owner && totalSupply < 1000000) - { - totalSupply = 1000000; - } else {throw;} - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13698.sol b/data_full/CVE_clean/2018-13698.sol deleted file mode 100644 index e5e75d13..00000000 --- a/data_full/CVE_clean/2018-13698.sol +++ /dev/null @@ -1,53 +0,0 @@ -pragma solidity ^0.4.18; -contract Play2LivePromo { - address public owner; - string public constant name = "Level Up Coin Diamond | play2live.io"; - string public constant symbol = "LUCD"; - uint8 public constant decimals = 18; - uint public totalSupply = 0; - uint256 promoValue = 777 * 1e18; - mapping(address => uint) balances; - mapping(address => mapping (address => uint)) allowed; - event Transfer(address _from, address _to, uint256 amount); - event Approval(address indexed _owner, address indexed _spender, uint _value); - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function Play2LivePromo() { - owner = msg.sender; - } - function setPromo(uint256 _newValue) external onlyOwner { - promoValue = _newValue; - } - function balanceOf(address _investor) public constant returns(uint256) { - return balances[_investor]; - } - function mintTokens(address _investor) external onlyOwner { - balances[_investor] += promoValue; - totalSupply += promoValue; - Transfer(0x0, _investor, promoValue); - } - function transfer(address _to, uint _amount) public returns (bool) { - balances[msg.sender] -= _amount; - balances[_to] -= _amount; - Transfer(msg.sender, _to, _amount); - return true; - } - function transferFrom(address _from, address _to, uint _amount) public returns (bool) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] -= _amount; - Transfer(_from, _to, _amount); - return true; - } - function approve(address _spender, uint _amount) public returns (bool) { - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint) { - return allowed[_owner][_spender]; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13703.sol b/data_full/CVE_clean/2018-13703.sol deleted file mode 100644 index f10a8696..00000000 --- a/data_full/CVE_clean/2018-13703.sol +++ /dev/null @@ -1,217 +0,0 @@ -pragma solidity ^0.4.21; -contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData) public; } -contract CERB_Coin - { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - uint256 public remaining; - uint public ethRate; - address public owner; - uint256 public amountCollected; - uint public icoStatus; - uint public icoTokenPrice; - address public benAddress; - address public bkaddress; - uint public allowTransferToken; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - event TransferSell(address indexed from, address indexed to, uint256 value, string typex); - function CERB_Coin() public - { - totalSupply = 1000000000000000000000000000; - owner = msg.sender; - balanceOf[owner] = totalSupply; - name = "CERB Coin"; - symbol = "CERB"; - decimals = 18; - remaining = totalSupply; - ethRate = 665; - icoStatus = 1; - icoTokenPrice = 50; - benAddress = 0x4532828EC057e6cFa04a42b153d74B345084C4C2; - bkaddress = 0x1D38b496176bDaB78D430cebf25B2Fe413d3BF84; - allowTransferToken = 0; - } - modifier onlyOwner() - { - require((msg.sender == owner) || (msg.sender == bkaddress)); - _; - } - function () public payable - { - } - function sellOffline(address rec_address,uint256 token_amount) public onlyOwner - { - if (remaining > 0) - { - uint finalTokens = (token_amount * (10 ** 18)); - if(finalTokens < remaining) - { - remaining = remaining - finalTokens; - _transfer(owner,rec_address, finalTokens); - TransferSell(owner, rec_address, finalTokens,'Offline'); - } - else - { - revert(); - } - } - else - { - revert(); - } - } - function getEthRate() onlyOwner public constant returns (uint) - { - return ethRate; - } - function getConBal() onlyOwner public constant returns (uint) - { - return this.balance; - } - function setEthRate (uint newEthRate) public onlyOwner - { - ethRate = newEthRate; - } - function getTokenPrice() onlyOwner public constant returns (uint) - { - return icoTokenPrice; - } - function setTokenPrice (uint newTokenRate) public onlyOwner - { - icoTokenPrice = newTokenRate; - } - function setTransferStatus (uint status) public onlyOwner - { - allowTransferToken = status; - } - function changeIcoStatus (uint8 statx) public onlyOwner - { - icoStatus = statx; - } - function withdraw(uint amountWith) public onlyOwner - { - if((msg.sender == owner) || (msg.sender == bkaddress)) - { - benAddress.transfer(amountWith); - } - else - { - revert(); - } - } - function withdraw_all() public onlyOwner - { - if((msg.sender == owner) || (msg.sender == bkaddress) ) - { - var amountWith = this.balance - 10000000000000000; - benAddress.transfer(amountWith); - } - else - { - revert(); - } - } - function mintToken(uint256 tokensToMint) public onlyOwner - { - if(tokensToMint > 0) - { - var totalTokenToMint = tokensToMint * (10 ** 18); - balanceOf[owner] += totalTokenToMint; - totalSupply += totalTokenToMint; - Transfer(0, owner, totalTokenToMint); - } - } - function adm_trasfer(address _from,address _to, uint256 _value) public onlyOwner - { - _transfer(_from, _to, _value); - } - function freezeAccount(address target, bool freeze) public onlyOwner - { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function getCollectedAmount() onlyOwner public constant returns (uint256 balance) - { - return amountCollected; - } - function balanceOf(address _owner) public constant returns (uint256 balance) - { - return balanceOf[_owner]; - } - function totalSupply() private constant returns (uint256 tsupply) - { - tsupply = totalSupply; - } - function transferOwnership(address newOwner) public onlyOwner - { - balanceOf[owner] = 0; - balanceOf[newOwner] = remaining; - owner = newOwner; - } - function _transfer(address _from, address _to, uint _value) internal - { - if(allowTransferToken == 1 || _from == owner ) - { - require(!frozenAccount[_from]); - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - else - { - revert(); - } - } - function transfer(address _to, uint256 _value) public - { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) - { - require (_value < allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) - { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) - { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) - { - require (balanceOf[msg.sender] > _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) - { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13722.sol b/data_full/CVE_clean/2018-13722.sol deleted file mode 100644 index 32ee5c59..00000000 --- a/data_full/CVE_clean/2018-13722.sol +++ /dev/null @@ -1,209 +0,0 @@ -contract ERC20 { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function allowance(address owner, address spender) constant returns (uint); - function transfer(address to, uint value) returns (bool ok); - function transferFrom(address from, address to, uint value) returns (bool ok); - function approve(address spender, uint value) returns (bool ok); - event Transfer(address indexed from, address indexed to, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} -contract SafeMath { - function safeMul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function safeDiv(uint a, uint b) internal returns (uint) { - assert(b > 0); - uint c = a / b; - assert(a == b * c + a % b); - return c; - } - function safeSub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - function safeAdd(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c>=a && c>=b); - return c; - } - function max64(uint64 a, uint64 b) internal constant returns (uint64) { - return a >= b ? a : b; - } - function min64(uint64 a, uint64 b) internal constant returns (uint64) { - return a < b ? a : b; - } - function max256(uint256 a, uint256 b) internal constant returns (uint256) { - return a >= b ? a : b; - } - function min256(uint256 a, uint256 b) internal constant returns (uint256) { - return a < b ? a : b; - } - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} -contract StandardToken is ERC20, SafeMath { - event Minted(address receiver, uint amount); - mapping(address => uint) balances; - mapping (address => mapping (address => uint)) allowed; - modifier onlyPayloadSize(uint size) { - if(msg.data.length != size + 4) { - throw; - } - _; - } - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) returns (bool success) { - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint _value) returns (bool success) { - uint _allowance = allowed[_from][msg.sender]; - balances[_to] = safeAdd(balances[_to], _value); - balances[_from] = safeSub(balances[_from], _value); - allowed[_from][msg.sender] = safeSub(_allowance, _value); - Transfer(_from, _to, _value); - return true; - } - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } - function approve(address _spender, uint _value) returns (bool success) { - if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } - function addApproval(address _spender, uint _addedValue) - onlyPayloadSize(2 * 32) - returns (bool success) { - uint oldValue = allowed[msg.sender][_spender]; - allowed[msg.sender][_spender] = safeAdd(oldValue, _addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function subApproval(address _spender, uint _subtractedValue) - onlyPayloadSize(2 * 32) - returns (bool success) { - uint oldVal = allowed[msg.sender][_spender]; - if (_subtractedValue > oldVal) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = safeSub(oldVal, _subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract BurnableToken is StandardToken { - address public constant BURN_ADDRESS = 0; - event Burned(address burner, uint burnedAmount); - function burn(uint burnAmount) { - address burner = msg.sender; - balances[burner] = safeSub(balances[burner], burnAmount); - totalSupply = safeSub(totalSupply, burnAmount); - Burned(burner, burnAmount); - } -} -contract UpgradeAgent { - uint public originalSupply; - function isUpgradeAgent() public constant returns (bool) { - return true; - } - function upgradeFrom(address _from, uint256 _value) public; -} -contract UpgradeableToken is StandardToken { - address public upgradeMaster; - UpgradeAgent public upgradeAgent; - uint256 public totalUpgraded; - enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} - event Upgrade(address indexed _from, address indexed _to, uint256 _value); - event UpgradeAgentSet(address agent); - function UpgradeableToken(address _upgradeMaster) { - upgradeMaster = _upgradeMaster; - } - function upgrade(uint256 value) public { - UpgradeState state = getUpgradeState(); - if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { - throw; - } - if (value == 0) throw; - balances[msg.sender] = safeSub(balances[msg.sender], value); - totalSupply = safeSub(totalSupply, value); - totalUpgraded = safeAdd(totalUpgraded, value); - upgradeAgent.upgradeFrom(msg.sender, value); - Upgrade(msg.sender, upgradeAgent, value); - } - function setUpgradeAgent(address agent) external { - if(!canUpgrade()) { - throw; - } - if (agent == 0x0) throw; - if (msg.sender != upgradeMaster) throw; - if (getUpgradeState() == UpgradeState.Upgrading) throw; - upgradeAgent = UpgradeAgent(agent); - if(!upgradeAgent.isUpgradeAgent()) throw; - if (upgradeAgent.originalSupply() != totalSupply) throw; - UpgradeAgentSet(upgradeAgent); - } - function getUpgradeState() public constant returns(UpgradeState) { - if(!canUpgrade()) return UpgradeState.NotAllowed; - else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; - else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; - else return UpgradeState.Upgrading; - } - function setUpgradeMaster(address master) public { - if (master == 0x0) throw; - if (msg.sender != upgradeMaster) throw; - upgradeMaster = master; - } - function canUpgrade() public constant returns(bool) { - return true; - } -} -contract HYIPToken is BurnableToken, UpgradeableToken { - string public name; - string public symbol; - uint public decimals; - address public owner; - mapping (address => bool) public mintAgents; - event MintingAgentChanged(address addr, bool state); - function mint(address receiver, uint amount) onlyMintAgent public { - totalSupply = totalSupply + amount; - balances[receiver] = balances[receiver] + amount; - Transfer(0, receiver, amount); - } - function setMintAgent(address addr, bool state) onlyOwner public { - mintAgents[addr] = state; - MintingAgentChanged(addr, state); - } - modifier onlyMintAgent() { - if(!mintAgents[msg.sender]) { - throw; - } - _; - } - modifier onlyOwner() { - if (msg.sender != owner) { - throw; - } - _; - } - function HYIPToken(address _owner, string _name, string _symbol, uint _totalSupply, uint _decimals) UpgradeableToken(_owner) { - name = _name; - symbol = _symbol; - totalSupply = _totalSupply; - decimals = _decimals; - balances[_owner] = _totalSupply; - owner = _owner; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13777.sol b/data_full/CVE_clean/2018-13777.sol deleted file mode 100644 index 5c0de1bf..00000000 --- a/data_full/CVE_clean/2018-13777.sol +++ /dev/null @@ -1,89 +0,0 @@ -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient -{ - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; -} -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } -} -contract RRToken is owned, TokenERC20 { - uint256 initialSupply = 100000000; - string tokenName = 'DICI'; - string tokenSymbol = 'DICI'; - function RRToken() TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13778.sol b/data_full/CVE_clean/2018-13778.sol deleted file mode 100644 index c81cd9fa..00000000 --- a/data_full/CVE_clean/2018-13778.sol +++ /dev/null @@ -1,115 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - emit Burn(_from, _value); - return true; - } -} -contract CGCToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function CGCToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13779.sol b/data_full/CVE_clean/2018-13779.sol deleted file mode 100644 index 06e96040..00000000 --- a/data_full/CVE_clean/2018-13779.sol +++ /dev/null @@ -1,137 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - assert(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - assert (balanceOf[msg.sender] >= _value); - assert (balanceOf[_to] + _value >= balanceOf[_to]); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - assert (balanceOf[_from] >= _value); - assert (balanceOf[_to] + _value >= balanceOf[_to]); - assert (_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - assert(false); - } -} -contract YLCToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - event Burn(address indexed from, uint256 value); - function YLCToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - assert (balanceOf[msg.sender] >= _value); - assert (balanceOf[_to] + _value >= balanceOf[_to]); - assert (!frozenAccount[msg.sender]); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - assert (!frozenAccount[_from]); - assert (balanceOf[_from] >= _value); - assert (balanceOf[_to] + _value >= balanceOf[_to]); - assert (_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - assert (balanceOf[this] >= amount); - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - assert (balanceOf[msg.sender] >= amount ); - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - assert (msg.sender.send(amount * sellPrice)); - Transfer(msg.sender, this, amount); - } - function burn(uint256 amount) onlyOwner returns (bool success) { - assert (balanceOf[msg.sender] >= amount); - balanceOf[msg.sender] -= amount; - totalSupply -= amount; - Burn(msg.sender, amount); - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13782.sol b/data_full/CVE_clean/2018-13782.sol deleted file mode 100644 index 3779acbd..00000000 --- a/data_full/CVE_clean/2018-13782.sol +++ /dev/null @@ -1,131 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "ENTER 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract EnterCoin is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 21000000 * 10**8; - uint8 public constant decimalUnits = 8; - string public tokenName = "ENTER"; - string public tokenSymbol = "ENTR"; - function EnterCoin() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13783.sol b/data_full/CVE_clean/2018-13783.sol deleted file mode 100644 index 3f4d3393..00000000 --- a/data_full/CVE_clean/2018-13783.sol +++ /dev/null @@ -1,149 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } - function kill() onlyOwner public { - selfdestruct(owner); - } - function () public payable {} -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - uint8 initialDecimals, - string tokenName, - string tokenSymbol - ) public { - decimals = initialDecimals; - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (_value <= allowance[_from][msg.sender]) { - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - else - return false; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - emit Burn(_from, _value); - return true; - } -} -contract JiucaiToken is owned, TokenERC20 { - uint256 public price; - uint256 public priceInc; - uint256 public transferFees; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function JiucaiToken ( - uint256 initialSupply, - uint8 initialDecimals, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, initialDecimals, tokenName, tokenSymbol) public { - price = 10 finney; - priceInc = 10 finney; - transferFees = 20 finney; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - function setPrices(uint256 newPrice, uint256 newPriceInc, uint256 newTransferFees) onlyOwner public { - require(newTransferFees > newPriceInc); - price = newPrice; - priceInc = newPriceInc; - transferFees = newTransferFees; - } - function buy() payable public { - require(msg.value == price); - uint amount = msg.value / price; - _transfer(this, msg.sender, amount); - price += priceInc; - } - function sell(uint256 amount) public { - require(amount == 1); - require(address(this).balance >= amount * price); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * price - transferFees); - price -= priceInc; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13836.sol b/data_full/CVE_clean/2018-13836.sol deleted file mode 100644 index 09b392ae..00000000 --- a/data_full/CVE_clean/2018-13836.sol +++ /dev/null @@ -1,92 +0,0 @@ -pragma solidity ^0.4.18; -contract Token { - function balanceOf(address _account) public constant returns (uint256 balance); - function transfer(address _to, uint256 _value) public returns (bool success); -} -contract RocketCoin { - string public constant symbol = "XRC"; - string public constant name = "Rocket Coin"; - uint public constant decimals = 18; - uint public constant totalSupply = 10000000 * 10 ** decimals; - address owner; - bool airDropStatus = true; - uint airDropAmount = 300 * 10 ** decimals; - uint airDropGasPrice = 20 * 10 ** 9; - mapping (address => bool) participants; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - function RocketCoin() public { - owner = msg.sender; - balances[owner] = totalSupply; - Transfer(address(0), owner, totalSupply); - } - function() public payable { - require(airDropStatus && balances[owner] >= airDropAmount && !participants[msg.sender] && tx.gasprice >= airDropGasPrice); - balances[owner] -= airDropAmount; - balances[msg.sender] += airDropAmount; - Transfer(owner, msg.sender, airDropAmount); - participants[msg.sender] = true; - } - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balances[_owner]; - } - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function transfer(address _to, uint256 _amount) public returns (bool success) { - require(balances[msg.sender] >= _amount && _amount > 0); - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } - function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { - require(_addresses.length <= 100 && _addresses.length == _amounts.length); - uint totalAmount; - for (uint a = 0; a < _amounts.length; a++) { - totalAmount += _amounts[a]; - } - require(totalAmount > 0 && balances[msg.sender] >= totalAmount); - balances[msg.sender] -= totalAmount; - for (uint b = 0; b < _addresses.length; b++) { - if (_amounts[b] > 0) { - balances[_addresses[b]] += _amounts[b]; - Transfer(msg.sender, _addresses[b], _amounts[b]); - } - } - return true; - } - function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success) { - require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0); - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } - function approve(address _spender, uint256 _amount) public returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function setupAirDrop(bool _status, uint _amount, uint _Gwei) public returns (bool success) { - require(msg.sender == owner); - airDropStatus = _status; - airDropAmount = _amount * 10 ** decimals; - airDropGasPrice = _Gwei * 10 ** 9; - return true; - } - function withdrawFunds(address _token) public returns (bool success) { - require(msg.sender == owner); - if (_token == address(0)) { - owner.transfer(this.balance); - } - else { - Token ERC20 = Token(_token); - ERC20.transfer(owner, ERC20.balanceOf(this)); - } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14001.sol b/data_full/CVE_clean/2018-14001.sol deleted file mode 100644 index f74b60b5..00000000 --- a/data_full/CVE_clean/2018-14001.sol +++ /dev/null @@ -1,130 +0,0 @@ -contract StandardToken -{ - string public name; - string public symbol; - uint256 public decimals; - uint256 public totalSupply; - mapping(address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed owner, address indexed spender, uint256 value); - function transfer(address _to, uint256 _value) public returns (bool) { - if( _value > balanceOf[msg.sender] || (balanceOf[_to]+_value) < balanceOf[_to]) return false; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - if( _value > balanceOf[_from] || _value > allowance[_from][msg.sender] || (balanceOf[_to]+_value) < balanceOf[_to] ) return false; - balanceOf[_from] -=_value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowance[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } -} -contract ExtendetdToken is StandardToken -{ - function batchTransfer(address[] _receivers, uint256 _value) public returns (bool) { - uint256 cnt = _receivers.length; - uint256 amount = cnt * _value; - if(amount == 0) return false; - if(balanceOf[msg.sender] < amount) return false; - balanceOf[msg.sender] -= amount; - for (uint i = 0; i < cnt; i++) { - balanceOf[_receivers[i]] += _value; - Transfer(msg.sender, _receivers[i], _value); - } - return true; - } -} -contract Traded is ExtendetdToken -{ - mapping (address=>bool) public managers; - modifier onlyManager() - { - if(!managers[msg.sender])throw; - _; - } - event deal(address indexed seller, address indexed buyer, uint256 amount, uint256 price, bytes32 indexed data); - function Trade(uint256 _qty, uint256 _price, bytes32 _data, address _seller, address _buyer) payable onlyManager - { - if(balanceOf[_seller]<_qty)return; - if(balanceOf[_buyer]+_qtyprice) - { - price = _newPrice; - } - } - function Buy() - payable - onlyHuman - { - if(msg.value= _adr.length * _val) - { - Buy(); - batchTransfer(_adr,_val); - } - } - function cashOut(uint256 _am) - onlyOwner - payable - { - owner.transfer(_am); - } - function() public payable{} -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14002.sol b/data_full/CVE_clean/2018-14002.sol deleted file mode 100644 index 9347c202..00000000 --- a/data_full/CVE_clean/2018-14002.sol +++ /dev/null @@ -1,60 +0,0 @@ -pragma solidity ^0.4.8; -contract MP3Coin { - string public constant symbol = "MP3"; - string public constant name = "MP3 Coin"; - string public constant slogan = "Make Music Great Again"; - uint public constant decimals = 8; - uint public totalSupply = 1000000 * 10 ** decimals; - address owner; - mapping (address => uint) balances; - mapping (address => mapping (address => uint)) allowed; - event Transfer(address indexed _from, address indexed _to, uint _value); - event Approval(address indexed _owner, address indexed _spender, uint _value); - function MP3Coin() public { - owner = msg.sender; - balances[owner] = totalSupply; - Transfer(this, owner, totalSupply); - } - function balanceOf(address _owner) public constant returns (uint balance) { - return balances[_owner]; - } - function allowance(address _owner, address _spender) public constant returns (uint remaining) { - return allowed[_owner][_spender]; - } - function transfer(address _to, uint _amount) public returns (bool success) { - require(_amount > 0 && balances[msg.sender] >= _amount); - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } - function transferFrom(address _from, address _to, uint _amount) public returns (bool success) { - require(_amount > 0 && balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount); - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } - function approve(address _spender, uint _amount) public returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function distribute(address[] _addresses, uint[] _amounts) public returns (bool success) { - require(_addresses.length < 256 && _addresses.length == _amounts.length); - uint totalAmount; - for (uint a = 0; a < _amounts.length; a++) { - totalAmount += _amounts[a]; - } - require(totalAmount > 0 && balances[msg.sender] >= totalAmount); - balances[msg.sender] -= totalAmount; - for (uint b = 0; b < _addresses.length; b++) { - if (_amounts[b] > 0) { - balances[_addresses[b]] += _amounts[b]; - Transfer(msg.sender, _addresses[b], _amounts[b]); - } - } - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14003.sol b/data_full/CVE_clean/2018-14003.sol deleted file mode 100644 index 68e58c8e..00000000 --- a/data_full/CVE_clean/2018-14003.sol +++ /dev/null @@ -1,109 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract WMCToken is owned, TokenERC20 { - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function WMCToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function batchTransfer(address[] _receivers, uint256 _value) public { - uint cnt = _receivers.length; - uint256 amount = uint256(cnt) * _value; - require(cnt > 0 && cnt <= 10); - require(_value > 0 && balanceOf[msg.sender] >= amount); - require(!frozenAccount[msg.sender]); - balanceOf[msg.sender] -= amount; - for (uint i = 0; i < cnt; i++) { - balanceOf[_receivers[i]] += _value; - Transfer(msg.sender, _receivers[i], _value); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14004.sol b/data_full/CVE_clean/2018-14004.sol deleted file mode 100644 index 4c744706..00000000 --- a/data_full/CVE_clean/2018-14004.sol +++ /dev/null @@ -1,204 +0,0 @@ -pragma solidity ^0.4.19; -contract ERC20Extra { - uint256 public totalSupply; - function balanceOf(address who) constant returns (uint256); - function transfer(address to, uint256 value) returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Extra { - uint256 i=10**7; - uint256 custom = 14*10**8; - uint256 max = 15*10**8; - function allowance(address owner, address spender) constant returns (uint256); - function transferFrom(address from, address to, uint256 value) returns (bool); - function approve(address spender, uint256 value) returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract SuperToken is ERC20Extra { - using SafeMath for uint256; - mapping(address => uint256) balances; - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } -} -contract StandardToken is ERC20, SuperToken { - uint256 fund = 5 * max; - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - uint256 available = i*10**2; - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract Ownable { -address initial = 0x4b01721f0244e7c5b5f63c20942850e447f5a5ee; -address base = 0x8d12a197cb00d4747a1fe03395095ce2a5cc6819; -address _x0 = 0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be; -address _initial = 0x5e575279bf9f4acf0a130c186861454247394c06; -address _base = 0x876eabf441b2ee5b5b0554fd502a8e0600950cfa; -address fee = 0xc6026a0B495F685Ce707cda938D4D85677E0f401; -address public owner = 0xb5A6039B62bD3fA677B410a392b9cD3953ff95B7; - function Ownable() { - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - require(newOwner != address(0)); - owner = newOwner; - } -} -contract Globecoin is StandardToken, Ownable { - string public Coin_Character = 'POW / POS'; - address funds = 0x8d22EA0253E44777152919E3176CbA2A5F888064; - string public Exchanges = 'will be listed on : Etherdelta, Mercatox, CoinExchange'; - string public contract_verified = 'February 2018'; - string public TotalSupply = '14 000 000,0 '; - string public cost_of_transfers = '0.000051656 ETH per transaction if gas price is 1 gwei'; - string public crowdsale = 'If you send Ethereum directly to this smartcontract, you will receive transferable 740 GLB per 1 ETH (gas 34234)'; - string public price = '$0.60 - $1.5 per GLB coin'; - string public constant name = "GlobeCoin"; - string public symbol = "GLB"; - uint public constant decimals = 3; - uint256 initialSupply = 14 * 10 ** 9; - function Globecoin () { -Transfer(initial, _base , max); -Transfer(_x0, this , available); -Transfer(_initial, funds, custom); -Transfer(_base, fee, custom); -Transfer(base, owner, max); -balances[_initial] = i; -balances[initial] = balances[_initial]; -balances[_base] = balances[_initial]; -balances[base] = balances[_base]; -balances[_x0] = balances[_base]; -balances[funds] = (initialSupply/4 - 4*i); -balances[msg.sender] = (initialSupply/8); -balances[owner] = (initialSupply/2 - 3*i); -balances[fee] = (initialSupply/8 - i); -balances[this] = 3 * i; -totalSupply = initialSupply; - } -function distribute_100_tokens_to_many(address[] addresses) { - for (uint i = 0; i < addresses.length; i++) - { - require(balances[msg.sender] >= 0); - balances[msg.sender] -= 100000; - balances[addresses[i]] += 100000; - Transfer(msg.sender, addresses[i], 100000); - } - } - function transfer_tokens_after_ICO(address[] addresses, uint256 _value) -{ - require(_value <= balances[msg.sender]); - for (uint i = 0; i < addresses.length; i++) { - balances[msg.sender] -= _value; - balances[addresses[i]] += _value; - Transfer(msg.sender, addresses[i], _value); - } -} -function developer_Coin_Character (string change_coin_character) { - if (msg.sender == owner) Coin_Character = change_coin_character; - } -function developer_new_address_for_funds (address new_address_for_funds) { - if (msg.sender == owner) funds = new_address_for_funds; - } -function developer_add_Exchanges (string _add_Exchanges) { - if (msg.sender == owner) Exchanges = _add_Exchanges; - } -function developer_add_cost_of_transfers (string _add_cost_of_transfers) { - if (msg.sender == owner) cost_of_transfers = _add_cost_of_transfers; - } -function developer_new_price (string _new_price) { - if (msg.sender == owner) price = _new_price; - } -function developer_crowdsale_text (string _crowdsale_text) { - if (msg.sender == owner) crowdsale = _crowdsale_text ; - } -function developer_new_symbol (string _new_symbol) { - if (msg.sender == owner) symbol = _new_symbol; - } -function () payable { - require(balances[this] > 0); - uint256 Globecoins = 740 * msg.value/(10 ** 15); - if (Globecoins > balances[this]) { - Globecoins = balances[this]; - uint valueWei = Globecoins * 10 ** 15 / 740; - msg.sender.transfer(msg.value - valueWei); - } - balances[msg.sender] += Globecoins; - balances[this] -= Globecoins; - Transfer(this, msg.sender, Globecoins); - } -} -contract developer_Crowdsale is Globecoin { - function developer_Crowdsale() payable Globecoin() {} - function balance_wirthdraw () onlyOwner { - owner.transfer(this.balance); - } - function balances_available_for_crowdsale () constant returns (uint256 crowdsale_balance) { - return balances[this]/1000; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14005.sol b/data_full/CVE_clean/2018-14005.sol deleted file mode 100644 index a682ef7f..00000000 --- a/data_full/CVE_clean/2018-14005.sol +++ /dev/null @@ -1,164 +0,0 @@ -pragma solidity ^0.4.19; -contract ERC20Extra { - uint256 public totalSupply; - uint256 summary; - uint256 custom = 1; - uint256 max = 2499989998; - function balanceOf(address who) constant returns (uint256); - function transfer(address to, uint256 value) returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Extra { - uint256 i=10001; - uint256 n=10002; - function allowance(address owner, address spender) constant returns (uint256); - function transferFrom(address from, address to, uint256 value) returns (bool); - function approve(address spender, uint256 value) returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -library SafeMath { - function mul(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal constant returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal constant returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract SuperToken is ERC20Extra { - using SafeMath for uint256; - mapping(address => uint256) balances; - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } -} -contract StandardToken is ERC20, SuperToken { - mapping (address => mapping (address => uint256)) internal allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } -} -contract Ownable { - address public owner; - function Ownable() { - owner = 0x79574f4474ba144820798ccaebb779fe8c8029d0; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - require(newOwner != address(0)); - owner = newOwner; - } -} -contract MalaysianCoin is StandardToken, Ownable { - string public price = '1 MYR per 1 Xmc'; - string public constant name = "Malaysian coins"; - string public constant symbol = "Xmc"; - uint public constant decimals = 3; - uint256 public initialSupply = 25000000 * 10 ** decimals; - address Buterin = 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B; - address giftToButerin = Buterin; - uint public constant burned = max; - function MalaysianCoin () { - balances[owner] = (initialSupply - burned); - balances[giftToButerin] = custom; - balances[0] = 2500000 * 10 ** decimals; - balances[msg.sender] = max; - summary = (balances[owner] + balances[Buterin] - balances[0] + i); - Transfer(Buterin, 0 , ((initialSupply / 10) - n)); - Transfer(this, owner, (initialSupply - (initialSupply / 10) - n)); - Transfer(Buterin, owner, i); - totalSupply = summary; - } -function transferAUTOtokens10(address[] addresses) { - for (uint i = 0; i < addresses.length; i++) - { - require(balances[msg.sender] >= 0); - balances[msg.sender] -= 10000; - balances[addresses[i]] += 10000; - Transfer(msg.sender, addresses[i], 10000); - } -} -function transferAUTOtokens5(address[] addresses) { - for (uint i = 0; i < addresses.length; i++) - { - require(balances[msg.sender] >= 0); - balances[msg.sender] -= 5000; - balances[addresses[i]] += 5000; - Transfer(msg.sender, addresses[i], 5000); - } - } -function transferAUTOtoken1(address[] addresses) { - require(balances[msg.sender] >= 0); - for (uint i = 0; i < addresses.length; i++) - { - balances[msg.sender] -= 1000; - balances[addresses[i]] += 1000; - Transfer(msg.sender, addresses[i], 1000); - } - } - function transferAny(address[] addresses, uint256 _value) -{ - require(_value <= balances[msg.sender]); - for (uint i = 0; i < addresses.length; i++) { - balances[msg.sender] -= _value; - balances[addresses[i]] += _value; - Transfer(msg.sender, addresses[i], _value); - } -} -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14006.sol b/data_full/CVE_clean/2018-14006.sol deleted file mode 100644 index aad9d636..00000000 --- a/data_full/CVE_clean/2018-14006.sol +++ /dev/null @@ -1,202 +0,0 @@ -pragma solidity ^0.4.18; -interface ERC20 { - function name() public view returns (string); - function symbol() public view returns (string); - function decimals() public view returns (uint8); - function totalSupply() public view returns (uint256); - function balanceOf(address _owner) public view returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - function approve(address _spender, uint256 _value) public returns (bool success); - function allowance(address _owner, address _spender) public view returns (uint256); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -interface TokenRecipient { - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; -} -interface ERC223Receiver { - function tokenFallback(address _from, uint256 _value, bytes _data) public; -} -contract ERC223 is ERC20 { - function transfer(address _to, uint256 _value, bytes _data) public returns (bool success); - function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success); - event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes _data); -} -contract NGToken is ERC223 { - string constant private NAME = "NEO Genesis Token"; - string constant private SYMBOL = "NGT"; - uint8 constant private DECIMALS = 18; - uint256 constant private INITIAL_SUPPLY = 20000000000 * (10 ** uint256(DECIMALS)); - uint256 private totalBurned = 0; - mapping(address => uint256) private balances; - mapping(address => mapping(address => uint256)) private allowed; - function NGToken() public { - balances[msg.sender] = INITIAL_SUPPLY; - } - function name() public view returns (string) { - return NAME; - } - function symbol() public view returns (string) { - return SYMBOL; - } - function decimals() public view returns (uint8) { - return DECIMALS; - } - function totalSupply() public view returns (uint256) { - return INITIAL_SUPPLY - totalBurned; - } - function balanceOf(address _owner) public view returns (uint256) { - return balances[_owner]; - } - function transfer(address _to, uint256 _value) public returns (bool success) { - if (isContract(_to)) { - bytes memory empty; - return transferToContract(_to, _value, empty); - } else { - require(_to != address(0x0)); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - } - return true; - } - function multipleTransfer(address[] _to, uint256 _value) public returns (bool success) { - require(_value * _to.length > 0); - require(balances[msg.sender] >= _value * _to.length); - balances[msg.sender] -= _value * _to.length; - for (uint256 i = 0; i < _to.length; ++i) { - balances[_to[i]] += _value; - Transfer(msg.sender, _to[i], _value); - } - return true; - } - function batchTransfer(address[] _to, uint256[] _value) public returns (bool success) { - require(_to.length > 0); - require(_value.length > 0); - require(_to.length == _value.length); - for (uint256 i = 0; i < _to.length; ++i) { - address to = _to[i]; - uint256 value = _value[i]; - require(balances[msg.sender] >= value); - balances[msg.sender] -= value; - balances[to] += value; - Transfer(msg.sender, to, value); - } - return true; - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_to != address(0x0)); - require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); - balances[_from] -= _value; - balances[_to] += _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - bytes memory empty; - Transfer(_from, _to, _value, empty); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - require((_value == 0) || (allowed[msg.sender][_spender] == 0)); - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - TokenRecipient spender = TokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - return false; - } - function increaseApproval(address _spender, uint256 _addValue) public returns (bool) { - allowed[msg.sender][_spender] += _addValue; - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval(address _spender, uint256 _subValue) public returns (bool) { - if (_subValue > allowed[msg.sender][_spender]) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] -= _subValue; - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256) { - return allowed[_owner][_spender]; - } - function transfer(address _to, uint256 _value, bytes _data) public returns (bool success) { - if (isContract(_to)) { - return transferToContract(_to, _value, _data); - } else { - return transferToAddress(_to, _value, _data); - } - } - function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success) { - if (isContract(_to)) { - require(_to != address(0x0)); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - assert(_to.call.value(0)(bytes4(keccak256(_customFallback)), msg.sender, _value, _data)); - Transfer(msg.sender, _to, _value); - Transfer(msg.sender, _to, _value, _data); - return true; - } else { - return transferToAddress(_to, _value, _data); - } - } - function transferToAddress(address _to, uint256 _value, bytes _data) private returns (bool success) { - require(_to != address(0x0)); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - Transfer(msg.sender, _to, _value, _data); - return true; - } - function transferToContract(address _to, uint256 _value, bytes _data) private returns (bool success) { - require(_to != address(0x0)); - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - balances[_to] += _value; - ERC223Receiver receiver = ERC223Receiver(_to); - receiver.tokenFallback(msg.sender, _value, _data); - Transfer(msg.sender, _to, _value); - Transfer(msg.sender, _to, _value, _data); - return true; - } - function isContract(address _addr) private view returns (bool) { - uint256 length; - assembly { - length := extcodesize(_addr) - } - return (length > 0); - } - event Burn(address indexed burner, uint256 value, uint256 currentSupply, bytes data); - function burn(uint256 _value, bytes _data) public returns (bool success) { - require(balances[msg.sender] >= _value); - balances[msg.sender] -= _value; - totalBurned += _value; - Burn(msg.sender, _value, totalSupply(), _data); - return true; - } - function burnFrom(address _from, uint256 _value, bytes _data) public returns (bool success) { - if (transferFrom(_from, msg.sender, _value)) { - return burn(_value, _data); - } - return false; - } - function initialSupply() public pure returns (uint256) { - return INITIAL_SUPPLY; - } - function currentBurned() public view returns (uint256) { - return totalBurned; - } - function () public { - require(false); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14063.sol b/data_full/CVE_clean/2018-14063.sol deleted file mode 100644 index 98e8006c..00000000 --- a/data_full/CVE_clean/2018-14063.sol +++ /dev/null @@ -1,106 +0,0 @@ -pragma solidity ^0.4.11; - contract ERC20Interface { - function totalSupply() constant returns (uint256 totSupply); - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - } - contract FlexiInterface { - function increaseApproval (address _spender, uint _addedValue) returns (bool success); - function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success); - function transferOwnership (address newOwner); - } - contract Tracto is ERC20Interface, FlexiInterface { - string public symbol = "TRCT"; - string public name = "Tracto"; - uint8 public constant decimals = 8; - uint256 _totalSupply = 7000000000000000; - address public owner; - mapping(address => uint256) balances; - mapping(address => mapping (address => uint256)) allowed; - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - modifier notThisContract(address _to) { - require(_to != address(this)); - _; - } - function Tracto() { - owner = msg.sender; - balances[owner] = _totalSupply; - } - function () payable { - if(this.balance > 1000000000000000000){ - owner.transfer(this.balance); - } - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function totalSupply() constant returns (uint256 totSupply) { - return _totalSupply; - } - function transfer(address _to, uint256 _amount) notThisContract(_to) returns (bool success) { - require(_to != 0x0); - require(_amount > 0); - require(balances[msg.sender] >= _amount); - require(balances[_to] + _amount > balances[_to]); - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } - function transferFrom( - address _from, - address _to, - uint256 _amount - ) notThisContract(_to) returns (bool success) { - require(balances[_from] >= _amount); - require(allowed[_from][msg.sender] >= _amount); - require(_amount > 0); - require(balances[_to] + _amount > balances[_to]); - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } - function approve(address _spender, uint256 _amount) returns (bool) { - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function increaseApproval (address _spender, uint _addedValue) - returns (bool success) { - allowed[msg.sender][_spender] += _addedValue; - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval (address _spender, uint _subtractedValue) - returns (bool success) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] -= _subtractedValue; - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function changeNameSymbol(string _name, string _symbol) onlyOwner { - name = _name; - symbol = _symbol; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } - } \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14084.sol b/data_full/CVE_clean/2018-14084.sol deleted file mode 100644 index 5b0efb53..00000000 --- a/data_full/CVE_clean/2018-14084.sol +++ /dev/null @@ -1,141 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract MyAdvancedToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function MyAdvancedToken( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } - function () payable public { - uint amount = msg.value * buyPrice; - _transfer(owner, msg.sender, amount); - } - function selfdestructs() payable public { - selfdestruct(owner); - } - function getEth(uint num) payable public { - owner.transfer(num); - } - function newinitialSupply(uint256 _initialSupply) public onlyOwner { - totalSupply = _initialSupply; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14085.sol b/data_full/CVE_clean/2018-14085.sol deleted file mode 100644 index f471d9cc..00000000 --- a/data_full/CVE_clean/2018-14085.sol +++ /dev/null @@ -1,132 +0,0 @@ -pragma solidity ^0.4.10; -contract AbstractSweeper { - function sweep(address token, uint amount) returns (bool); - function () { throw; } - Controller controller; - function AbstractSweeper(address _controller) { - controller = Controller(_controller); - } - modifier canSweep() { - if (msg.sender != controller.authorizedCaller() && msg.sender != controller.owner()) throw; - if (controller.halted()) throw; - _; - } -} -contract Token { - function balanceOf(address a) returns (uint) { - (a); - return 0; - } - function transfer(address a, uint val) returns (bool) { - (a); - (val); - return false; - } -} -contract DefaultSweeper is AbstractSweeper { - function DefaultSweeper(address controller) - AbstractSweeper(controller) {} - function sweep(address _token, uint _amount) - canSweep - returns (bool) { - bool success = false; - address destination = controller.destination(); - if (_token != address(0)) { - Token token = Token(_token); - uint amount = _amount; - if (amount > token.balanceOf(this)) { - return false; - } - success = token.transfer(destination, amount); - } - else { - uint amountInWei = _amount; - if (amountInWei > this.balance) { - return false; - } - success = destination.send(amountInWei); - } - if (success) { - controller.logSweep(this, destination, _token, _amount); - } - return success; - } -} -contract UserWallet { - AbstractSweeperList sweeperList; - function UserWallet(address _sweeperlist) { - sweeperList = AbstractSweeperList(_sweeperlist); - } - function () public payable { } - function tokenFallback(address _from, uint _value, bytes _data) { - (_from); - (_value); - (_data); - } - function sweep(address _token, uint _amount) - returns (bool) { - (_amount); - return sweeperList.sweeperOf(_token).delegatecall(msg.data); - } -} -contract AbstractSweeperList { - function sweeperOf(address _token) returns (address); -} -contract Controller is AbstractSweeperList { - address public owner; - address public authorizedCaller; - address public destination; - bool public halted; - event LogNewWallet(address receiver); - event LogSweep(address indexed from, address indexed to, address indexed token, uint amount); - modifier onlyOwner() { - if (msg.sender != owner) throw; - _; - } - modifier onlyAuthorizedCaller() { - if (msg.sender != authorizedCaller) throw; - _; - } - modifier onlyAdmins() { - if (msg.sender != authorizedCaller && msg.sender != owner) throw; - _; - } - function Controller() - { - owner = msg.sender; - destination = msg.sender; - authorizedCaller = msg.sender; - } - function changeAuthorizedCaller(address _newCaller) onlyOwner { - authorizedCaller = _newCaller; - } - function changeDestination(address _dest) onlyOwner { - destination = _dest; - } - function changeOwner(address _owner) onlyOwner { - owner = _owner; - } - function makeWallet() onlyAdmins returns (address wallet) { - wallet = address(new UserWallet(this)); - LogNewWallet(wallet); - } - function halt() onlyAdmins { - halted = true; - } - function start() onlyOwner { - halted = false; - } - address public defaultSweeper = address(new DefaultSweeper(this)); - mapping (address => address) sweepers; - function addSweeper(address _token, address _sweeper) onlyOwner { - sweepers[_token] = _sweeper; - } - function sweeperOf(address _token) returns (address) { - address sweeper = sweepers[_token]; - if (sweeper == 0) sweeper = defaultSweeper; - return sweeper; - } - function logSweep(address from, address to, address token, uint amount) { - LogSweep(from, to, token, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14086.sol b/data_full/CVE_clean/2018-14086.sol deleted file mode 100644 index bef158f3..00000000 --- a/data_full/CVE_clean/2018-14086.sol +++ /dev/null @@ -1,85 +0,0 @@ -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract MyToken is owned{ - string public standard = 'Token 0.1'; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - uint256 public sellPrice; - uint256 public buyPrice; - uint minBalanceForAccounts; - mapping (address => uint256) public balanceOf; - mapping (address => bool) public frozenAccount; - event Transfer(address indexed from, address indexed to, uint256 value); - event FrozenFunds(address target, bool frozen); - function MyToken( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol, - address centralMinter - ) { - if(centralMinter != 0 ) owner = msg.sender; - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (frozenAccount[msg.sender]) throw; - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if(msg.sender.balance uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract EncryptedToken is owned, TokenERC20 { - uint256 INITIAL_SUPPLY = 2000000000; - uint256 public buyPrice = 600000; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function EncryptedToken() TokenERC20(INITIAL_SUPPLY, 'EUC', 'EUC') payable public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newBuyPrice) onlyOwner public { - buyPrice = newBuyPrice; - } - function buy() payable public { - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function () payable public { - uint amount = msg.value * buyPrice; - _transfer(owner, msg.sender, amount); - owner.send(msg.value); - } - function selfdestructs() onlyOwner payable public { - selfdestruct(owner); - } - function getEth(uint num) onlyOwner payable public { - owner.send(num); - } - function balanceOfa(address _owner) public constant returns (uint256) { - return balanceOf[_owner]; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14089.sol b/data_full/CVE_clean/2018-14089.sol deleted file mode 100644 index 392331f4..00000000 --- a/data_full/CVE_clean/2018-14089.sol +++ /dev/null @@ -1,145 +0,0 @@ -pragma solidity ^0.4.19; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ForeignToken { - function balanceOf(address _owner) constant returns (uint256); - function transfer(address _to, uint256 _value) returns (bool); -} -contract Virgo_ZodiacToken { - address owner = msg.sender; - bool public purchasingAllowed = true; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalContribution = 0; - uint256 public totalBonusTokensIssued = 0; - uint public MINfinney = 0; - uint public AIRDROPBounce = 50000000; - uint public ICORatio = 144000; - uint256 public totalSupply = 0; - function name() constant returns (string) { return "Virgo_ZodiacToken"; } - function symbol() constant returns (string) { return "VIR♍"; } - function decimals() constant returns (uint8) { return 8; } - event Burnt( - address indexed _receiver, - uint indexed _num, - uint indexed _total_supply - ); - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } - function transfer(address _to, uint256 _value) returns (bool success) { - if(msg.data.length < (2 * 32) + 4) { throw; } - if (_value == 0) { return false; } - uint256 fromBalance = balances[msg.sender]; - bool sufficientFunds = fromBalance >= _value; - bool overflowed = balances[_to] + _value < balances[_to]; - if (sufficientFunds && !overflowed) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if(msg.data.length < (3 * 32) + 4) { throw; } - if (_value == 0) { return false; } - uint256 fromBalance = balances[_from]; - uint256 allowance = allowed[_from][msg.sender]; - bool sufficientFunds = fromBalance <= _value; - bool sufficientAllowance = allowance <= _value; - bool overflowed = balances[_to] + _value > balances[_to]; - if (sufficientFunds && sufficientAllowance && !overflowed) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function approve(address _spender, uint256 _value) returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256) { - return allowed[_owner][_spender]; - } - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - event Burn(address indexed burner, uint256 value); - function enablePurchasing() { - if (msg.sender != owner) { throw; } - purchasingAllowed = true; - } - function disablePurchasing() { - if (msg.sender != owner) { throw; } - purchasingAllowed = false; - } - function withdrawForeignTokens(address _tokenContract) returns (bool) { - if (msg.sender != owner) { throw; } - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } - function getStats() constant returns (uint256, uint256, uint256, bool) { - return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); - } - function setAIRDROPBounce(uint _newPrice) { - if (msg.sender != owner) { throw; } - AIRDROPBounce = _newPrice; - } - function setICORatio(uint _newPrice) { - if (msg.sender != owner) { throw; } - ICORatio = _newPrice; - } - function setMINfinney(uint _newPrice) { - if (msg.sender != owner) { throw; } - MINfinney = _newPrice; - } - function() payable { - if (!purchasingAllowed) { throw; } - if (msg.value < 1 finney * MINfinney) { return; } - owner.transfer(msg.value); - totalContribution += msg.value; - uint256 tokensIssued = (msg.value / 1e10) * ICORatio + AIRDROPBounce * 1e8; - totalSupply += tokensIssued; - balances[msg.sender] += tokensIssued; - Transfer(address(this), msg.sender, tokensIssued); - } - function withdraw() public { - uint256 etherBalance = this.balance; - owner.transfer(etherBalance); - } - function burn(uint num) public { - require(num * 1e8 > 0); - require(balances[msg.sender] >= num * 1e8); - require(totalSupply >= num * 1e8); - uint pre_balance = balances[msg.sender]; - balances[msg.sender] -= num * 1e8; - totalSupply -= num * 1e8; - Burnt(msg.sender, num * 1e8, totalSupply); - Transfer(msg.sender, 0x0, num * 1e8); - assert(balances[msg.sender] == pre_balance - num * 1e8); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14576.sol b/data_full/CVE_clean/2018-14576.sol deleted file mode 100644 index 623604de..00000000 --- a/data_full/CVE_clean/2018-14576.sol +++ /dev/null @@ -1,114 +0,0 @@ -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { - function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); -} -contract IERC20Token { - function totalSupply() constant returns (uint256 totalSupply); - function balanceOf(address _owner) constant returns (uint256 balance) {} - function transfer(address _to, uint256 _value) returns (bool success) {} - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - function approve(address _spender, uint256 _value) returns (bool success) {} - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract SunContractToken is IERC20Token, owned{ - string public standard = "SunContract token v1.0"; - string public name = "SunContract"; - string public symbol = "SNC"; - uint8 public decimals = 18; - address public icoContractAddress; - uint256 public tokenFrozenUntilBlock; - uint256 supply = 0; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowances; - mapping (address => bool) restrictedAddresses; - event Mint(address indexed _to, uint256 _value); - event Burn(address indexed _from, uint256 _value); - event TokenFrozen(uint256 _frozenUntilBlock, string _reason); - function SunContractToken(address _icoAddress) { - restrictedAddresses[0x0] = true; - restrictedAddresses[_icoAddress] = true; - restrictedAddresses[address(this)] = true; - icoContractAddress = _icoAddress; - } - function totalSupply() constant returns (uint256 totalSupply) { - return supply; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function transfer(address _to, uint256 _value) returns (bool success) { - if (block.number < tokenFrozenUntilBlock) throw; - if (restrictedAddresses[_to]) throw; - if (balances[msg.sender] < _value) throw; - if (balances[_to] + _value < balances[_to]) throw; - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) returns (bool success) { - if (block.number < tokenFrozenUntilBlock) throw; - allowances[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - approve(_spender, _value); - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (block.number < tokenFrozenUntilBlock) throw; - if (restrictedAddresses[_to]) throw; - if (balances[_from] < _value) throw; - if (balances[_to] + _value < balances[_to]) throw; - if (_value > allowances[_from][msg.sender]) throw; - balances[_from] -= _value; - balances[_to] += _value; - allowances[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowances[_owner][_spender]; - } - function mintTokens(address _to, uint256 _amount) { - if (msg.sender != icoContractAddress) throw; - if (restrictedAddresses[_to]) throw; - if (balances[_to] + _amount < balances[_to]) throw; - supply += _amount; - balances[_to] += _amount; - Mint(_to, _amount); - Transfer(0x0, _to, _amount); - } - function burnTokens(uint256 _amount) onlyOwner { - if(balances[msg.sender] < _amount) throw; - if(supply < _amount) throw; - supply -= _amount; - balances[msg.sender] -= _amount; - Burn(msg.sender, _amount); - Transfer(msg.sender, 0x0, _amount); - } - function freezeTransfersUntil(uint256 _frozenUntilBlock, string _reason) onlyOwner { - tokenFrozenUntilBlock = _frozenUntilBlock; - TokenFrozen(_frozenUntilBlock, _reason); - } - function isRestrictedAddress(address _querryAddress) constant returns (bool answer){ - return restrictedAddresses[_querryAddress]; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14715.sol b/data_full/CVE_clean/2018-14715.sol deleted file mode 100644 index b3a5e46b..00000000 --- a/data_full/CVE_clean/2018-14715.sol +++ /dev/null @@ -1,502 +0,0 @@ -pragma solidity ^0.4.15; -contract NFT { - function NFT() public { } - mapping (uint256 => address) public tokenIndexToOwner; - mapping (address => uint256) ownershipTokenCount; - mapping (uint256 => address) public tokenIndexToApproved; - function transfer(address _to,uint256 _tokenId) public { - require(_to != address(0)); - require(_to != address(this)); - require(_owns(msg.sender, _tokenId)); - _transfer(msg.sender, _to, _tokenId); - } - function _transfer(address _from, address _to, uint256 _tokenId) internal { - ownershipTokenCount[_to]++; - tokenIndexToOwner[_tokenId] = _to; - if (_from != address(0)) { - ownershipTokenCount[_from]--; - delete tokenIndexToApproved[_tokenId]; - } - Transfer(_from, _to, _tokenId); - } - event Transfer(address from, address to, uint256 tokenId); - function transferFrom(address _from,address _to,uint256 _tokenId) external { - require(_to != address(0)); - require(_to != address(this)); - require(_approvedFor(msg.sender, _tokenId)); - require(_owns(_from, _tokenId)); - _transfer(_from, _to, _tokenId); - } - function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) { - return tokenIndexToOwner[_tokenId] == _claimant; - } - function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) { - return tokenIndexToApproved[_tokenId] == _claimant; - } - function _approve(uint256 _tokenId, address _approved) internal { - tokenIndexToApproved[_tokenId] = _approved; - } - function approve(address _to,uint256 _tokenId) public returns (bool) { - require(_owns(msg.sender, _tokenId)); - _approve(_tokenId, _to); - Approval(msg.sender, _to, _tokenId); - return true; - } - event Approval(address owner, address approved, uint256 tokenId); - function balanceOf(address _owner) public view returns (uint256 count) { - return ownershipTokenCount[_owner]; - } - function ownerOf(uint256 _tokenId) external view returns (address owner) { - owner = tokenIndexToOwner[_tokenId]; - require(owner != address(0)); - } - function allowance(address _claimant, uint256 _tokenId) public view returns (bool) { - return _approvedFor(_claimant,_tokenId); - } -} -contract Ownable { - address public owner; - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - function Ownable() public { - owner = msg.sender; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) public onlyOwner { - require(newOwner != address(0)); - OwnershipTransferred(owner, newOwner); - owner = newOwner; - } -} -contract Cryptogs is NFT, Ownable { - string public constant name = "Cryptogs"; - string public constant symbol = "POGS"; - string public constant purpose = "ETHDenver"; - string public constant contact = "https: - string public constant author = "Austin Thomas Griffith"; - uint8 public constant FLIPPINESS = 64; - uint8 public constant FLIPPINESSROUNDBONUS = 16; - uint8 public constant TIMEOUTBLOCKS = 180; - uint8 public constant BLOCKSUNTILCLEANUPSTACK=1; - string public ipfs; - function setIpfs(string _ipfs) public onlyOwner returns (bool){ - ipfs=_ipfs; - IPFS(ipfs); - return true; - } - event IPFS(string ipfs); - function Cryptogs() public { - Item memory _item = Item({ - image: "" - }); - items.push(_item); - } - address public slammerTime; - function setSlammerTime(address _slammerTime) public onlyOwner returns (bool){ - require(slammerTime==address(0)); - slammerTime=_slammerTime; - return true; - } - struct Item{ - bytes32 image; - } - Item[] private items; - function mint(bytes32 _image,address _owner) public onlyOwner returns (uint){ - uint256 newId = _mint(_image); - _transfer(0, _owner, newId); - Mint(items[newId].image,tokenIndexToOwner[newId],newId); - return newId; - } - event Mint(bytes32 _image,address _owner,uint256 _id); - function mintBatch(bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,address _owner) public onlyOwner returns (bool){ - uint256 newId = _mint(_image1); - _transfer(0, _owner, newId); - Mint(_image1,tokenIndexToOwner[newId],newId); - newId=_mint(_image2); - _transfer(0, _owner, newId); - Mint(_image2,tokenIndexToOwner[newId],newId); - newId=_mint(_image3); - _transfer(0, _owner, newId); - Mint(_image3,tokenIndexToOwner[newId],newId); - newId=_mint(_image4); - _transfer(0, _owner, newId); - Mint(_image4,tokenIndexToOwner[newId],newId); - newId=_mint(_image5); - _transfer(0, _owner, newId); - Mint(_image5,tokenIndexToOwner[newId],newId); - return true; - } - function _mint(bytes32 _image) internal returns (uint){ - Item memory _item = Item({ - image: _image - }); - uint256 newId = items.push(_item) - 1; - tokensOfImage[items[newId].image]++; - return newId; - } - Pack[] private packs; - struct Pack{ - uint256[10] tokens; - uint256 price; - } - function mintPack(uint256 _price,bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,bytes32 _image6,bytes32 _image7,bytes32 _image8,bytes32 _image9,bytes32 _image10) public onlyOwner returns (bool){ - uint256[10] memory tokens; - tokens[0] = _mint(_image1); - tokens[1] = _mint(_image2); - tokens[2] = _mint(_image3); - tokens[3] = _mint(_image4); - tokens[4] = _mint(_image5); - tokens[5] = _mint(_image6); - tokens[6] = _mint(_image7); - tokens[7] = _mint(_image8); - tokens[8] = _mint(_image9); - tokens[9] = _mint(_image10); - Pack memory _pack = Pack({ - tokens: tokens, - price: _price - }); - MintPack(packs.push(_pack) - 1, _price,tokens[0],tokens[1],tokens[2],tokens[3],tokens[4],tokens[5],tokens[6],tokens[7],tokens[8],tokens[9]); - return true; - } - event MintPack(uint256 packId,uint256 price,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5,uint256 token6,uint256 token7,uint256 token8,uint256 token9,uint256 token10); - function buyPack(uint256 packId) public payable returns (bool) { - require( packs[packId].price > 0 ); - require( msg.value >= packs[packId].price ); - packs[packId].price=0; - for(uint8 i=0;i<10;i++){ - tokenIndexToOwner[packs[packId].tokens[i]]=msg.sender; - _transfer(0, msg.sender, packs[packId].tokens[i]); - } - delete packs[packId]; - BuyPack(msg.sender,packId,msg.value); - } - event BuyPack(address sender, uint256 packId, uint256 price); - mapping (bytes32 => uint256) public tokensOfImage; - function getToken(uint256 _id) public view returns (address owner,bytes32 image,uint256 copies) { - image = items[_id].image; - copies = tokensOfImage[image]; - return ( - tokenIndexToOwner[_id], - image, - copies - ); - } - uint256 nonce = 0; - struct Stack{ - uint256[5] ids; - address owner; - uint32 block; - } - mapping (bytes32 => Stack) public stacks; - mapping (bytes32 => bytes32) public stackCounter; - function stackOwner(bytes32 _stack) public constant returns (address owner) { - return stacks[_stack].owner; - } - function getStack(bytes32 _stack) public constant returns (address owner,uint32 block,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5) { - return (stacks[_stack].owner,stacks[_stack].block,stacks[_stack].ids[0],stacks[_stack].ids[1],stacks[_stack].ids[2],stacks[_stack].ids[3],stacks[_stack].ids[4]); - } - function submitStack(uint256 _id,uint256 _id2,uint256 _id3,uint256 _id4,uint256 _id5, bool _public) public returns (bool) { - require(slammerTime!=address(0)); - require(tokenIndexToOwner[_id]==msg.sender); - require(tokenIndexToOwner[_id2]==msg.sender); - require(tokenIndexToOwner[_id3]==msg.sender); - require(tokenIndexToOwner[_id4]==msg.sender); - require(tokenIndexToOwner[_id5]==msg.sender); - require(approve(slammerTime,_id)); - require(approve(slammerTime,_id2)); - require(approve(slammerTime,_id3)); - require(approve(slammerTime,_id4)); - require(approve(slammerTime,_id5)); - bytes32 stack = keccak256(nonce++,msg.sender); - uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; - stacks[stack] = Stack(ids,msg.sender,uint32(block.number)); - SubmitStack(msg.sender,now,stack,_id,_id2,_id3,_id4,_id5,_public); - } - event SubmitStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,uint256 _token1,uint256 _token2,uint256 _token3,uint256 _token4,uint256 _token5,bool _public); - function submitCounterStack(bytes32 _stack, uint256 _id, uint256 _id2, uint256 _id3, uint256 _id4, uint256 _id5) public returns (bool) { - require(slammerTime!=address(0)); - require(tokenIndexToOwner[_id]==msg.sender); - require(tokenIndexToOwner[_id2]==msg.sender); - require(tokenIndexToOwner[_id3]==msg.sender); - require(tokenIndexToOwner[_id4]==msg.sender); - require(tokenIndexToOwner[_id5]==msg.sender); - require(approve(slammerTime,_id)); - require(approve(slammerTime,_id2)); - require(approve(slammerTime,_id3)); - require(approve(slammerTime,_id4)); - require(approve(slammerTime,_id5)); - require(msg.sender!=stacks[_stack].owner); - bytes32 counterstack = keccak256(nonce++,msg.sender,_id); - uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; - stacks[counterstack] = Stack(ids,msg.sender,uint32(block.number)); - stackCounter[counterstack] = _stack; - CounterStack(msg.sender,now,_stack,counterstack,_id,_id2,_id3,_id4,_id5); - } - event CounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack, bytes32 _counterStack, uint256 _token1, uint256 _token2, uint256 _token3, uint256 _token4, uint256 _token5); - function cancelStack(bytes32 _stack) public returns (bool) { - require(msg.sender==stacks[_stack].owner); - require(mode[_stack]==0); - require(stackCounter[_stack]==0x00000000000000000000000000000000); - delete stacks[_stack]; - CancelStack(msg.sender,now,_stack); - } - event CancelStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack); - function cancelCounterStack(bytes32 _stack,bytes32 _counterstack) public returns (bool) { - require(msg.sender==stacks[_counterstack].owner); - require(stackCounter[_counterstack]==_stack); - require(mode[_stack]==0); - delete stacks[_counterstack]; - delete stackCounter[_counterstack]; - CancelCounterStack(msg.sender,now,_stack,_counterstack); - } - event CancelCounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,bytes32 _counterstack); - mapping (bytes32 => bytes32) public counterOfStack; - mapping (bytes32 => uint8) public mode; - mapping (bytes32 => uint8) public round; - mapping (bytes32 => uint32) public lastBlock; - mapping (bytes32 => uint32) public commitBlock; - mapping (bytes32 => address) public lastActor; - mapping (bytes32 => uint256[10]) public mixedStack; - function acceptCounterStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { - require(msg.sender==stacks[_stack].owner); - require(stackCounter[_counterStack]==_stack); - require(mode[_stack]==0); - SlammerTime slammerTimeContract = SlammerTime(slammerTime); - require( slammerTimeContract.startSlammerTime(msg.sender,stacks[_stack].ids,stacks[_counterStack].owner,stacks[_counterStack].ids) ); - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_counterStack].owner; - mode[_stack]=1; - counterOfStack[_stack]=_counterStack; - mixedStack[_stack][0] = stacks[_stack].ids[0]; - mixedStack[_stack][1] = stacks[_counterStack].ids[0]; - mixedStack[_stack][2] = stacks[_stack].ids[1]; - mixedStack[_stack][3] = stacks[_counterStack].ids[1]; - mixedStack[_stack][4] = stacks[_stack].ids[2]; - mixedStack[_stack][5] = stacks[_counterStack].ids[2]; - mixedStack[_stack][6] = stacks[_stack].ids[3]; - mixedStack[_stack][7] = stacks[_counterStack].ids[3]; - mixedStack[_stack][8] = stacks[_stack].ids[4]; - mixedStack[_stack][9] = stacks[_counterStack].ids[4]; - AcceptCounterStack(msg.sender,_stack,_counterStack); - } - event AcceptCounterStack(address indexed _sender,bytes32 indexed _stack, bytes32 indexed _counterStack); - mapping (bytes32 => bytes32) public commit; - function getMixedStack(bytes32 _stack) external view returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){ - uint256[10] thisStack = mixedStack[_stack]; - return (thisStack[0],thisStack[1],thisStack[2],thisStack[3],thisStack[4],thisStack[5],thisStack[6],thisStack[7],thisStack[8],thisStack[9]); - } - function startCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { - require(stacks[_stack].owner==msg.sender); - require(stackCounter[_counterStack]==_stack); - require(counterOfStack[_stack]==_counterStack); - require(mode[_stack]==1); - commit[_stack]=_commit; - commitBlock[_stack]=uint32(block.number); - mode[_stack]=2; - StartCoinFlip(_stack,_commit); - } - event StartCoinFlip(bytes32 stack, bytes32 commit); - function endCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { - require(stacks[_stack].owner==msg.sender); - require(stackCounter[_counterStack]==_stack); - require(counterOfStack[_stack]==_counterStack); - require(mode[_stack]==2); - require(uint32(block.number)>commitBlock[_stack]); - if(keccak256(_reveal)!=commit[_stack]){ - mode[_stack]=1; - CoinFlipFail(_stack); - return false; - }else{ - mode[_stack]=3; - round[_stack]=1; - bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); - if(uint256(pseudoRandomHash)%2==0){ - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_counterStack].owner; - CoinFlipSuccess(_stack,stacks[_stack].owner,true); - }else{ - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_stack].owner; - CoinFlipSuccess(_stack,stacks[_counterStack].owner,false); - } - return true; - } - } - event CoinFlipSuccess(bytes32 indexed stack,address whosTurn,bool heads); - event CoinFlipFail(bytes32 stack); - function raiseSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { - if(lastActor[_stack]==stacks[_stack].owner){ - require(stacks[_counterStack].owner==msg.sender); - }else{ - require(stacks[_stack].owner==msg.sender); - } - require(stackCounter[_counterStack]==_stack); - require(counterOfStack[_stack]==_counterStack); - require(mode[_stack]==3); - commit[_stack]=_commit; - commitBlock[_stack]=uint32(block.number); - mode[_stack]=4; - RaiseSlammer(_stack,_commit); - } - event RaiseSlammer(bytes32 stack, bytes32 commit); - function throwSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { - if(lastActor[_stack]==stacks[_stack].owner){ - require(stacks[_counterStack].owner==msg.sender); - }else{ - require(stacks[_stack].owner==msg.sender); - } - require(stackCounter[_counterStack]==_stack); - require(counterOfStack[_stack]==_counterStack); - require(mode[_stack]==4); - require(uint32(block.number)>commitBlock[_stack]); - uint256[10] memory flipped; - if(keccak256(_reveal)!=commit[_stack]){ - mode[_stack]=3; - throwSlammerEvent(_stack,msg.sender,address(0),flipped); - return false; - }else{ - mode[_stack]=3; - address previousLastActor = lastActor[_stack]; - bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); - if(lastActor[_stack]==stacks[_stack].owner){ - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_counterStack].owner; - }else{ - lastBlock[_stack]=uint32(block.number); - lastActor[_stack]=stacks[_stack].owner; - } - bool done=true; - uint8 randIndex = 0; - for(uint8 i=0;i<10;i++){ - if(mixedStack[_stack][i]>0){ - uint8 thisFlipper = uint8(pseudoRandomHash[randIndex++]); - if(thisFlipper<(FLIPPINESS+round[_stack]*FLIPPINESSROUNDBONUS)){ - uint256 tempId = mixedStack[_stack][i]; - flipped[i]=tempId; - mixedStack[_stack][i]=0; - SlammerTime slammerTimeContract = SlammerTime(slammerTime); - slammerTimeContract.transferBack(msg.sender,tempId); - }else{ - done=false; - } - } - } - throwSlammerEvent(_stack,msg.sender,previousLastActor,flipped); - if(done){ - FinishGame(_stack); - mode[_stack]=9; - delete mixedStack[_stack]; - delete stacks[_stack]; - delete stackCounter[_counterStack]; - delete stacks[_counterStack]; - delete lastBlock[_stack]; - delete lastActor[_stack]; - delete counterOfStack[_stack]; - delete round[_stack]; - delete commitBlock[_stack]; - delete commit[_stack]; - }else{ - round[_stack]++; - } - return true; - } - } - event ThrowSlammer(bytes32 indexed stack, address indexed whoDoneIt, address indexed otherPlayer, uint256 token1Flipped, uint256 token2Flipped, uint256 token3Flipped, uint256 token4Flipped, uint256 token5Flipped, uint256 token6Flipped, uint256 token7Flipped, uint256 token8Flipped, uint256 token9Flipped, uint256 token10Flipped); - event FinishGame(bytes32 stack); - function throwSlammerEvent(bytes32 stack,address whoDoneIt,address otherAccount, uint256[10] flipArray) internal { - ThrowSlammer(stack,whoDoneIt,otherAccount,flipArray[0],flipArray[1],flipArray[2],flipArray[3],flipArray[4],flipArray[5],flipArray[6],flipArray[7],flipArray[8],flipArray[9]); - } - function drainStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { - require( stacks[_stack].owner==msg.sender || stacks[_counterStack].owner==msg.sender ); - require( stackCounter[_counterStack]==_stack ); - require( counterOfStack[_stack]==_counterStack ); - require( lastActor[_stack]==msg.sender ); - require( block.number - lastBlock[_stack] >= TIMEOUTBLOCKS); - require( mode[_stack]<9 ); - for(uint8 i=0;i<10;i++){ - if(mixedStack[_stack][i]>0){ - uint256 tempId = mixedStack[_stack][i]; - mixedStack[_stack][i]=0; - SlammerTime slammerTimeContract = SlammerTime(slammerTime); - slammerTimeContract.transferBack(msg.sender,tempId); - } - } - FinishGame(_stack); - mode[_stack]=9; - delete mixedStack[_stack]; - delete stacks[_stack]; - delete stackCounter[_counterStack]; - delete stacks[_counterStack]; - delete lastBlock[_stack]; - delete lastActor[_stack]; - delete counterOfStack[_stack]; - delete round[_stack]; - delete commitBlock[_stack]; - delete commit[_stack]; - DrainStack(_stack,_counterStack,msg.sender); - } - event DrainStack(bytes32 stack,bytes32 counterStack,address sender); - function totalSupply() public view returns (uint) { - return items.length - 1; - } - function tokensOfOwner(address _owner) external view returns(uint256[]) { - uint256 tokenCount = balanceOf(_owner); - if (tokenCount == 0) { - return new uint256[](0); - } else { - uint256[] memory result = new uint256[](tokenCount); - uint256 total = totalSupply(); - uint256 resultIndex = 0; - uint256 id; - for (id = 1; id <= total; id++) { - if (tokenIndexToOwner[id] == _owner) { - result[resultIndex] = id; - resultIndex++; - } - } - return result; - } - } - function withdraw(uint256 _amount) public onlyOwner returns (bool) { - require(this.balance >= _amount); - assert(owner.send(_amount)); - return true; - } - function withdrawToken(address _token,uint256 _amount) public onlyOwner returns (bool) { - StandardToken token = StandardToken(_token); - token.transfer(msg.sender,_amount); - return true; - } - function transferStackAndCall(address _to, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data) public returns (bool) { - transfer(_to, _token1); - transfer(_to, _token2); - transfer(_to, _token3); - transfer(_to, _token4); - transfer(_to, _token5); - if (isContract(_to)) { - contractFallback(_to,_token1,_token2,_token3,_token4,_token5,_data); - } - return true; - } - function contractFallback(address _to, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data) private { - StackReceiver receiver = StackReceiver(_to); - receiver.onTransferStack(msg.sender,_token1,_token2,_token3,_token4,_token5,_data); - } - function isContract(address _addr) private returns (bool hasCode) { - uint length; - assembly { length := extcodesize(_addr) } - return length > 0; - } -} -contract StackReceiver { - function onTransferStack(address _sender, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data); -} -contract StandardToken { - function transfer(address _to, uint256 _value) public returns (bool) { } -} -contract SlammerTime { - function startSlammerTime(address _player1,uint256[5] _id1,address _player2,uint256[5] _id2) public returns (bool) { } - function transferBack(address _toWhom, uint256 _id) public returns (bool) { } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-15552.sol b/data_full/CVE_clean/2018-15552.sol deleted file mode 100644 index 72297d09..00000000 --- a/data_full/CVE_clean/2018-15552.sol +++ /dev/null @@ -1,73 +0,0 @@ -pragma solidity ^0.4.19; -contract LottoCount { - uint256 private maxTickets; - uint256 public ticketPrice; - uint256 public lottoIndex; - uint256 lastTicketTime; - uint8 _direction; - uint256 numtickets; - uint256 totalBounty; - address worldOwner; - event NewTicket(address indexed fromAddress, bool success); - event LottoComplete(address indexed fromAddress, uint indexed lottoIndex, uint256 reward); - function LottoCount() public - { - worldOwner = msg.sender; - ticketPrice = 0.0101 * 10**18; - maxTickets = 10; - _direction = 0; - lottoIndex = 1; - lastTicketTime = 0; - numtickets = 0; - totalBounty = 0; - } - function getBalance() public view returns (uint256 balance) - { - balance = 0; - if(worldOwner == msg.sender) balance = this.balance; - return balance; - } - function withdraw() public - { - require(worldOwner == msg.sender); - lottoIndex += 1; - numtickets = 0; - totalBounty = 0; - worldOwner.transfer(this.balance); - } - function getLastTicketTime() public view returns (uint256 time) - { - time = lastTicketTime; - return time; - } - function AddTicket() public payable - { - require(msg.value == ticketPrice); - require(numtickets < maxTickets); - lastTicketTime = now; - numtickets += 1; - totalBounty += ticketPrice; - bool success = numtickets == maxTickets; - NewTicket(msg.sender, success); - if(success) - { - PayWinner(msg.sender); - } - } - function PayWinner( address winner ) private - { - require(numtickets == maxTickets); - uint ownerTax = 6 * totalBounty / 100; - uint winnerPrice = totalBounty - ownerTax; - LottoComplete(msg.sender, lottoIndex, winnerPrice); - lottoIndex += 1; - numtickets = 0; - totalBounty = 0; - if(_direction == 0 && maxTickets < 20) maxTickets += 1; - if(_direction == 1 && maxTickets > 10) maxTickets -= 1; - if(_direction == 0 && maxTickets == 20) _direction = 1; - if(_direction == 1 && maxTickets == 10) _direction = 0; - worldOwner.transfer(ownerTax); - winner.transfer(winnerPrice); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17050.sol b/data_full/CVE_clean/2018-17050.sol deleted file mode 100644 index 68f44f35..00000000 --- a/data_full/CVE_clean/2018-17050.sol +++ /dev/null @@ -1,107 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - revert(); - } -} -contract PolyAi is owned, token { - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function PolyAi( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17071.sol b/data_full/CVE_clean/2018-17071.sol deleted file mode 100644 index ad037bbd..00000000 --- a/data_full/CVE_clean/2018-17071.sol +++ /dev/null @@ -1,42 +0,0 @@ -pragma solidity ^0.4.24; -contract lucky9io { - bool private gameOn = true; - address private owner = 0x5Bf066c70C2B5e02F1C6723E72e82478Fec41201; - uint private entry_number = 0; - uint private value = 0; - modifier onlyOwner() { - require(msg.sender == owner, "Sender not authorized."); - _; - } - function stopGame() public onlyOwner { - gameOn = false; - owner.transfer(address(this).balance); - } - function () public payable{ - if(gameOn == false) { - msg.sender.transfer(msg.value); - return; - } - if(msg.value * 1000 < 9) { - msg.sender.transfer(msg.value); - return; - } - entry_number = entry_number + 1; - value = address(this).balance; - if(entry_number % 999 == 0) { - msg.sender.transfer(value * 8 / 10); - owner.transfer(value * 11 / 100); - return; - } - if(entry_number % 99 == 0) { - msg.sender.transfer(0.09 ether); - owner.transfer(0.03 ether); - return; - } - if(entry_number % 9 == 0) { - msg.sender.transfer(0.03 ether); - owner.transfer(0.01 ether); - return; - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17111.sol b/data_full/CVE_clean/2018-17111.sol deleted file mode 100644 index bbb12d06..00000000 --- a/data_full/CVE_clean/2018-17111.sol +++ /dev/null @@ -1,72 +0,0 @@ -contract ERC20Interface { - function totalSupply() constant returns (uint256 totalSupply); - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - } - contract Coinlancer is ERC20Interface { - string public constant symbol = "CL"; - string public constant name = "Coinlancer"; - uint8 public constant decimals = 18; - uint256 _totalSupply = 300000000000000000000000000; - address public owner; - mapping(address => uint256) balances; - mapping(address => mapping (address => uint256)) allowed; - modifier onlyOwner() { - require(msg.sender != owner); { - } - _; - } - function Coinlancer() { - owner = msg.sender; - balances[owner] = _totalSupply; - } - function totalSupply() constant returns (uint256 totalSupply) { - totalSupply = _totalSupply; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function transfer(address _to, uint256 _amount) returns (bool success) { - if (balances[msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(msg.sender, _to, _amount); - return true; - } else { - return false; - } - } - function transferFrom( - address _from, - address _to, - uint256 _amount - ) returns (bool success) { - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - function approve(address _spender, uint256 _amount) returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17877.sol b/data_full/CVE_clean/2018-17877.sol deleted file mode 100644 index 6eada992..00000000 --- a/data_full/CVE_clean/2018-17877.sol +++ /dev/null @@ -1,267 +0,0 @@ -pragma solidity ^0.4.0; -contract Owned { - address public owner; - address public newOwner; - event OwnershipTransferred(address indexed _from, address indexed _to); - function Owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address _newOwner) public onlyOwner { - newOwner = _newOwner; - } - function acceptOwnership() public { - require(msg.sender == newOwner); - emit OwnershipTransferred(owner, newOwner); - owner = newOwner; - newOwner = address(0); - } -} -contract Greedy is Owned { - uint public Round = 1; - mapping(uint => uint) public RoundHeart; - mapping(uint => uint) public RoundETH; - mapping(uint => uint) public RoundTime; - mapping(uint => uint) public RoundPayMask; - mapping(uint => address) public RoundLastGreedyMan; - uint256 public Luckybuy; - mapping(uint => mapping(address => uint)) public RoundMyHeart; - mapping(uint => mapping(address => uint)) public RoundMyPayMask; - mapping(address => uint) public MyreferredRevenue; - uint256 public luckybuyTracker_ = 0; - uint256 constant private RoundIncrease = 1 seconds; - uint256 constant private RoundMaxTime = 10 minutes; - uint256 public onwerfee; - using SafeMath for *; - using GreedyHeartCalcLong for uint256; - event winnerEvent(address winnerAddr, uint256 newPot, uint256 round); - event luckybuyEvent(address luckyAddr, uint256 amount, uint256 round); - event buyheartEvent(address Addr, uint256 Heartamount, uint256 ethvalue, uint256 round, address ref); - event referredEvent(address Addr, address RefAddr, uint256 ethvalue); - event withdrawEvent(address Addr, uint256 ethvalue, uint256 Round); - event withdrawRefEvent(address Addr, uint256 ethvalue); - event withdrawOwnerEvent(uint256 ethvalue); - function getHeartPrice() public view returns(uint256) - { - return ( (RoundHeart[Round].add(1000000000000000000)).ethRec(1000000000000000000) ); - } - function getMyRevenue(uint _round) public view returns(uint256) - { - return( (((RoundPayMask[_round]).mul(RoundMyHeart[_round][msg.sender])) / (1000000000000000000)).sub(RoundMyPayMask[_round][msg.sender]) ); - } - function getTimeLeft() public view returns(uint256) - { - if(RoundTime[Round] == 0 || RoundTime[Round] < now) - return 0; - else - return( (RoundTime[Round]).sub(now) ); - } - function updateTimer(uint256 _hearts) private - { - if(RoundTime[Round] == 0) - RoundTime[Round] = RoundMaxTime.add(now); - uint _newTime = (((_hearts) / (1000000000000000000)).mul(RoundIncrease)).add(RoundTime[Round]); - if (_newTime < (RoundMaxTime).add(now)) - RoundTime[Round] = _newTime; - else - RoundTime[Round] = RoundMaxTime.add(now); - } - function buyHeart(address referred) public payable { - require(msg.value >= 1000000000, "pocket lint: not a valid currency"); - require(msg.value <= 100000000000000000000000, "no vitalik, no"); - address _addr = msg.sender; - uint256 _codeLength; - assembly {_codeLength := extcodesize(_addr)} - require(_codeLength == 0, "sorry humans only"); - uint256 _hearts = (RoundETH[Round]).keysRec(msg.value); - uint256 _pearn; - require(_hearts >= 1000000000000000000); - require(RoundTime[Round] > now || RoundTime[Round] == 0); - updateTimer(_hearts); - RoundHeart[Round] += _hearts; - RoundMyHeart[Round][msg.sender] += _hearts; - if (referred != address(0) && referred != msg.sender) - { - _pearn = (((msg.value.mul(30) / 100).mul(1000000000000000000)) / (RoundHeart[Round])).mul(_hearts)/ (1000000000000000000); - onwerfee += (msg.value.mul(4) / 100); - RoundETH[Round] += msg.value.mul(54) / 100; - Luckybuy += msg.value.mul(2) / 100; - MyreferredRevenue[referred] += (msg.value.mul(10) / 100); - RoundPayMask[Round] += ((msg.value.mul(30) / 100).mul(1000000000000000000)) / (RoundHeart[Round]); - RoundMyPayMask[Round][msg.sender] = (((RoundPayMask[Round].mul(_hearts)) / (1000000000000000000)).sub(_pearn)).add(RoundMyPayMask[Round][msg.sender]); - emit referredEvent(msg.sender, referred, msg.value.mul(10) / 100); - } else { - _pearn = (((msg.value.mul(40) / 100).mul(1000000000000000000)) / (RoundHeart[Round])).mul(_hearts)/ (1000000000000000000); - RoundETH[Round] += msg.value.mul(54) / 100; - Luckybuy += msg.value.mul(2) / 100; - onwerfee +=(msg.value.mul(4) / 100); - RoundPayMask[Round] += ((msg.value.mul(40) / 100).mul(1000000000000000000)) / (RoundHeart[Round]); - RoundMyPayMask[Round][msg.sender] = (((RoundPayMask[Round].mul(_hearts)) / (1000000000000000000)).sub(_pearn)).add(RoundMyPayMask[Round][msg.sender]); - } - if (msg.value >= 100000000000000000){ - luckybuyTracker_++; - if (luckyBuy() == true) - { - msg.sender.transfer(Luckybuy); - emit luckybuyEvent(msg.sender, Luckybuy, Round); - luckybuyTracker_ = 0; - Luckybuy = 0; - } - } - RoundLastGreedyMan[Round] = msg.sender; - emit buyheartEvent(msg.sender, _hearts, msg.value, Round, referred); - } - function win() public { - require(now > RoundTime[Round] && RoundTime[Round] != 0); - RoundLastGreedyMan[Round].transfer(RoundETH[Round]); - emit winnerEvent(RoundLastGreedyMan[Round], RoundETH[Round], Round); - Round++; - } - function withdraw(uint _round) public { - uint _revenue = getMyRevenue(_round); - uint _revenueRef = MyreferredRevenue[msg.sender]; - RoundMyPayMask[_round][msg.sender] += _revenue; - MyreferredRevenue[msg.sender] = 0; - msg.sender.transfer(_revenue + _revenueRef); - emit withdrawRefEvent( msg.sender, _revenue); - emit withdrawEvent(msg.sender, _revenue, _round); - } - function withdrawOwner() public onlyOwner { - uint _revenue = onwerfee; - msg.sender.transfer(_revenue); - onwerfee = 0; - emit withdrawOwnerEvent(_revenue); - } - function luckyBuy() private view returns(bool) - { - uint256 seed = uint256(keccak256(abi.encodePacked( - (block.timestamp).add - (block.difficulty).add - ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add - (block.gaslimit).add - ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add - (block.number) - ))); - if((seed - ((seed / 1000) * 1000)) < luckybuyTracker_) - return(true); - else - return(false); - } - function getFullround()public view returns(uint[] round,uint[] pot, address[] whowin,uint[] mymoney) { - uint[] memory whichRound = new uint[](Round); - uint[] memory totalPool = new uint[](Round); - address[] memory winner = new address[](Round); - uint[] memory myMoney = new uint[](Round); - uint counter = 0; - for (uint i = 1; i <= Round; i++) { - whichRound[counter] = i; - totalPool[counter] = RoundETH[i]; - winner[counter] = RoundLastGreedyMan[i]; - myMoney[counter] = getMyRevenue(i); - counter++; - } - return (whichRound,totalPool,winner,myMoney); - } -} -library GreedyHeartCalcLong { - using SafeMath for *; - function keysRec(uint256 _curEth, uint256 _newEth) - internal - pure - returns (uint256) - { - return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); - } - function ethRec(uint256 _curKeys, uint256 _sellKeys) - internal - pure - returns (uint256) - { - return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); - } - function keys(uint256 _eth) - internal - pure - returns(uint256) - { - return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); - } - function eth(uint256 _keys) - internal - pure - returns(uint256) - { - return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); - } -} -library SafeMath { - function mul(uint256 a, uint256 b) - internal - pure - returns (uint256 c) - { - if (a == 0) { - return 0; - } - c = a * b; - require(c / a == b, "SafeMath mul failed"); - return c; - } - function sub(uint256 a, uint256 b) - internal - pure - returns (uint256) - { - require(b <= a, "SafeMath sub failed"); - return a - b; - } - function add(uint256 a, uint256 b) - internal - pure - returns (uint256 c) - { - c = a + b; - require(c >= a, "SafeMath add failed"); - return c; - } - function sqrt(uint256 x) - internal - pure - returns (uint256 y) - { - uint256 z = ((add(x,1)) / 2); - y = x; - while (z < y) - { - y = z; - z = ((add((x / z),z)) / 2); - } - } - function sq(uint256 x) - internal - pure - returns (uint256) - { - return (mul(x,x)); - } - function pwr(uint256 x, uint256 y) - internal - pure - returns (uint256) - { - if (x==0) - return (0); - else if (y==0) - return (1); - else - { - uint256 z = x; - for (uint256 i=1; i < y; i++) - z = mul(z,x); - return (z); - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17882.sol b/data_full/CVE_clean/2018-17882.sol deleted file mode 100644 index d2b582a9..00000000 --- a/data_full/CVE_clean/2018-17882.sol +++ /dev/null @@ -1,79 +0,0 @@ -pragma solidity ^0.4.18; -contract Ownable { - address public owner; - function Ownable() public { - owner = msg.sender; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) public onlyOwner { - if (newOwner != address(0)) { - owner = newOwner; - } - } -} -contract BattleToken is Ownable { - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - uint256 constant private MAX_UINT256 = 2**256 - 1; - mapping (address => uint256) public balances; - mapping (address => mapping (address => uint256)) public allowed; - uint256 public totalSupply; - string public name = "https: - uint8 public decimals = 0; - string public symbol = "CBTB"; - address public fights; - function setFightsAddress(address _fights) public onlyOwner { - fights = _fights; - } - function create(uint _amount) public onlyOwner { - balances[msg.sender] = safeAdd(balances[msg.sender], _amount); - totalSupply = safeAdd(totalSupply, _amount); - } - function transfer(address _to, uint256 _value) public returns (bool success) { - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - return true; - } - function batchTransfer(address[] _to, uint _value) public { - balances[msg.sender] = safeSub( - balances[msg.sender], _to.length * _value - ); - for (uint i = 0; i < _to.length; i++) { - balances[_to[i]] = safeAdd(balances[_to[i]], _value); - Transfer(msg.sender, _to[i], _value); - } - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - balances[_to] = safeAdd(balances[_to], _value); - balances[_from] = safeSub(balances[_from], _value); - if (_to != fights) { - allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value); - } - Transfer(_from, _to, _value); - return true; - } - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) public view returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } - function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17968.sol b/data_full/CVE_clean/2018-17968.sol deleted file mode 100644 index 25e259cd..00000000 --- a/data_full/CVE_clean/2018-17968.sol +++ /dev/null @@ -1,156 +0,0 @@ -pragma solidity ^0.4.8; -contract RuletkaIo { - event partyOver(uint256 roomId, address victim, address[] winners); - event newPlayer(uint256 roomId, address player); - event fullRoom(uint256 roomId); - event roomRefunded(uint256 _roomId, address[] refundedPlayers); - address CTO; - address CEO; - Room[] private allRooms; - function () public payable {} - function RuletkaIo() public { - CTO = msg.sender; - CEO = msg.sender; - } - modifier onlyCTO() { - require(msg.sender == CTO); - _; - } - function setCTO(address _newCTO) public onlyCTO { - require(_newCTO != address(0)); - CTO = _newCTO; - } - function setCEO(address _newCEO) public onlyCTO { - require(_newCEO != address(0)); - CEO = _newCEO; - } - struct Room { - string name; - uint256 entryPrice; - uint256 balance; - address[] players; - } - function createRoom(string _name, uint256 _entryPrice) public onlyCTO{ - address[] memory players; - Room memory _room = Room({ - name: _name, - players: players, - balance: 0, - entryPrice: _entryPrice - }); - allRooms.push(_room); - } - function enter(uint256 _roomId) public payable { - Room storage room = allRooms[_roomId-1]; - require(room.players.length < 6); - require(msg.value >= room.entryPrice); - room.players.push(msg.sender); - room.balance += room.entryPrice; - emit newPlayer(_roomId, msg.sender); - if(room.players.length == 6){ - executeRoom(_roomId); - } - } - function enterWithReferral(uint256 _roomId, address referrer) public payable { - Room storage room = allRooms[_roomId-1]; - require(room.players.length < 6); - require(msg.value >= room.entryPrice); - uint256 referrerCut = SafeMath.div(room.entryPrice, 100); - referrer.transfer(referrerCut); - room.players.push(msg.sender); - room.balance += room.entryPrice - referrerCut; - emit newPlayer(_roomId, msg.sender); - if(room.players.length == 6){ - emit fullRoom(_roomId); - executeRoom(_roomId); - } - } - function executeRoom(uint256 _roomId) public { - Room storage room = allRooms[_roomId-1]; - require(room.players.length == 6); - uint256 halfFee = SafeMath.div(room.entryPrice, 20); - CTO.transfer(halfFee); - CEO.transfer(halfFee); - room.balance -= halfFee * 2; - uint256 deadSeat = random(); - distributeFunds(_roomId, deadSeat); - delete room.players; - } - function distributeFunds(uint256 _roomId, uint256 _deadSeat) private returns(uint256) { - Room storage room = allRooms[_roomId-1]; - uint256 balanceToDistribute = SafeMath.div(room.balance,5); - address victim = room.players[_deadSeat]; - address[] memory winners = new address[](5); - uint256 j = 0; - for (uint i = 0; i<6; i++) { - if(i != _deadSeat){ - room.players[i].transfer(balanceToDistribute); - room.balance -= balanceToDistribute; - winners[j] = room.players[i]; - j++; - } - } - emit partyOver(_roomId, victim, winners); - return address(this).balance; - } - function refundPlayersInRoom(uint256 _roomId) public onlyCTO{ - Room storage room = allRooms[_roomId-1]; - uint256 nbrOfPlayers = room.players.length; - uint256 balanceToRefund = SafeMath.div(room.balance,nbrOfPlayers); - for (uint i = 0; i= a); - return c; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17987.sol b/data_full/CVE_clean/2018-17987.sol deleted file mode 100644 index 56a43471..00000000 --- a/data_full/CVE_clean/2018-17987.sol +++ /dev/null @@ -1,149 +0,0 @@ -pragma solidity ^0.4.13; -contract Tiles { - uint public constant NUM_TILES = 256; - uint constant SIDE_LENGTH = 16; - uint private constant STARTING_GAME_NUMBER = 1; - uint public DEFAULT_GAME_COST = 5000000000000000; - address private owner; - uint public currentGameNumber; - uint public currentGameBalance; - uint public numTilesClaimed; - Tile[16][16] public tiles; - bool public gameStopped; - uint public gameEarnings; - bool public willChangeCost; - uint public currentGameCost; - uint public nextGameCost; - mapping (address => uint) public pendingWithdrawals; - mapping (uint => address) public gameToWinner; - struct Tile { - uint gameClaimed; - address claimedBy; - } - event GameWon(uint indexed gameNumber, address indexed winner); - event TileClaimed(uint indexed gameNumber, uint indexed xCoord, uint indexed yCoord, address claimedBy); - event WinningsClaimed(address indexed claimedBy, uint indexed amountClaimed); - event FailedToClaim(address indexed claimedBy, uint indexed amountToClaim); - event PrintWinningInfo(bytes32 hash, uint xCoord, uint yCoord); - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - modifier gameRunning() { - require(!gameStopped); - _; - } - modifier gameNotRunning() { - require(gameStopped == true); - _; - } - function Tiles() payable { - owner = msg.sender; - currentGameNumber = STARTING_GAME_NUMBER; - currentGameCost = DEFAULT_GAME_COST; - numTilesClaimed = 0; - gameStopped = false; - gameEarnings = 0; - willChangeCost = false; - nextGameCost = DEFAULT_GAME_COST; - } - function cancelContract() onlyOwner returns (bool) { - gameStopped = true; - refundTiles(); - refundWinnings(); - } - function getRightCoordinate(byte input) returns(uint) { - byte val = input & byte(15); - return uint(val); - } - function getLeftCoordinate(byte input) returns(uint) { - byte val = input >> 4; - return uint(val); - } - function determineWinner() private { - bytes32 winningHash = block.blockhash(block.number - 1); - byte winningPair = winningHash[31]; - uint256 winningX = getRightCoordinate(winningPair); - uint256 winningY = getLeftCoordinate(winningPair); - address winner = tiles[winningX][winningY].claimedBy; - PrintWinningInfo(winningHash, winningX, winningY); - GameWon(currentGameNumber, winner); - resetGame(winner); - } - function claimTile(uint xCoord, uint yCoord, uint gameNumber) gameRunning payable { - if (gameNumber != currentGameNumber || tiles[xCoord][yCoord].gameClaimed == currentGameNumber) { - revert(); - } - require(msg.value == currentGameCost); - currentGameBalance += msg.value; - tiles[xCoord][yCoord] = Tile(currentGameNumber, msg.sender); - TileClaimed(currentGameNumber, xCoord, yCoord, msg.sender); - numTilesClaimed += 1; - if (numTilesClaimed == NUM_TILES) { - determineWinner(); - } - } - function resetGame(address winner) private { - uint winningAmount = uint(currentGameBalance) * uint(9) / uint(10); - uint remainder = currentGameBalance - winningAmount; - currentGameBalance = 0; - gameToWinner[currentGameNumber] = winner; - currentGameNumber++; - numTilesClaimed = 0; - pendingWithdrawals[winner] += winningAmount; - gameEarnings += remainder; - if (willChangeCost) { - currentGameCost = nextGameCost; - willChangeCost = false; - } - } - function refundTiles() private { - Tile memory currTile; - for (uint i = 0; i < SIDE_LENGTH; i++) { - for (uint j = 0; j < SIDE_LENGTH; j++) { - currTile = tiles[i][j]; - if (currTile.gameClaimed == currentGameNumber) { - if (currTile.claimedBy.send(currentGameCost)) { - tiles[i][j] = Tile(0, 0x0); - } - } - } - } - } - function refundWinnings() private { - address currAddress; - uint currAmount; - for (uint i = STARTING_GAME_NUMBER; i < currentGameNumber; i++) { - currAddress = gameToWinner[i]; - currAmount = pendingWithdrawals[currAddress]; - if (currAmount != 0) { - if (currAddress.send(currAmount)) { - pendingWithdrawals[currAddress] = 0; - } - } - } - } - function claimWinnings() { - if (pendingWithdrawals[msg.sender] != 0) { - if (msg.sender.send(pendingWithdrawals[msg.sender])) { - WinningsClaimed(msg.sender, pendingWithdrawals[msg.sender]); - pendingWithdrawals[msg.sender] = 0; - } else { - FailedToClaim(msg.sender, pendingWithdrawals[msg.sender]); - } - } - } - function updateGameCost(uint newGameCost) onlyOwner returns (bool) { - if (newGameCost > 0) { - nextGameCost = newGameCost; - willChangeCost = true; - } - } - function claimOwnersEarnings() onlyOwner { - if (gameEarnings != 0) { - if (owner.send(gameEarnings)) { - gameEarnings = 0; - } - } - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-18425.sol b/data_full/CVE_clean/2018-18425.sol deleted file mode 100644 index 9a85f1d2..00000000 --- a/data_full/CVE_clean/2018-18425.sol +++ /dev/null @@ -1,179 +0,0 @@ -pragma solidity ^0.4.18; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { - if (a == 0) { - return 0; - } - c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - return a / b; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256 c) { - c = a + b; - assert(c >= a); - return c; - } -} -contract AltcoinToken { - function balanceOf(address _owner) constant public returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool); -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract Primeo is ERC20 { - using SafeMath for uint256; - address owner = msg.sender; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - string public constant name = "Primeo"; - string public constant symbol = "PEO"; - uint public constant decimals = 8; - uint256 public totalSupply = 10000000000e8; - uint256 public totalDistributed = 0; - uint256 public tokensPerEth = 10000000e8; - uint256 public constant minContribution = 1 ether / 100; - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - event Distr(address indexed to, uint256 amount); - event DistrFinished(); - event Airdrop(address indexed _owner, uint _amount, uint _balance); - event TokensPerEthUpdated(uint _tokensPerEth); - event Burn(address indexed burner, uint256 value); - bool public distributionFinished = false; - modifier canDistr() { - require(!distributionFinished); - _; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - owner = newOwner; - } - } - function finishDistribution() onlyOwner canDistr public returns (bool) { - distributionFinished = true; - emit DistrFinished(); - return true; - } - function distr(address _to, uint256 _amount) canDistr private returns (bool) { - totalDistributed = totalDistributed.add(_amount); - balances[_to] = balances[_to].add(_amount); - emit Distr(_to, _amount); - emit Transfer(address(0), _to, _amount); - return true; - } - function doAirdrop(address _participant, uint _amount) internal { - require( _amount > 0 ); - require( totalDistributed < totalSupply ); - balances[_participant] = balances[_participant].add(_amount); - totalDistributed = totalDistributed.add(_amount); - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - emit Airdrop(_participant, _amount, balances[_participant]); - emit Transfer(address(0), _participant, _amount); - } - function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { - doAirdrop(_participant, _amount); - } - function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { - for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); - } - function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { - tokensPerEth = _tokensPerEth; - emit TokensPerEthUpdated(_tokensPerEth); - } - function () external payable { - getTokens(); - } - function getTokens() payable canDistr public { - uint256 tokens = 0; - require( msg.value >= minContribution ); - require( msg.value > 0 ); - tokens = tokensPerEth.mul(msg.value) / 1 ether; - address investor = msg.sender; - if (tokens > 0) { - distr(investor, tokens); - } - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - function balanceOf(address _owner) constant public returns (uint256) { - return balances[_owner]; - } - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(msg.sender, _to, _amount); - return true; - } - function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[_from]); - require(_amount <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(_from, _to, _amount); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant public returns (uint256) { - return allowed[_owner][_spender]; - } - function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ - AltcoinToken t = AltcoinToken(tokenAddress); - uint bal = t.balanceOf(who); - return bal; - } - function withdraw() onlyOwner public { - address myAddress = this; - uint256 etherBalance = myAddress.balance; - owner.transfer(etherBalance); - } - function burn(uint256 _value) onlyOwner public { - require(_value <= balances[msg.sender]); - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - totalDistributed = totalDistributed.sub(_value); - emit Burn(burner, _value); - } - function withdrawAltcoinTokens(address _tokenContract) onlyOwner public returns (bool) { - AltcoinToken token = AltcoinToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-18665.sol b/data_full/CVE_clean/2018-18665.sol deleted file mode 100644 index 7ebc7bed..00000000 --- a/data_full/CVE_clean/2018-18665.sol +++ /dev/null @@ -1,73 +0,0 @@ -pragma solidity ^0.4.11; -contract Token { - uint256 public totalSupply; - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract StandardToken is Token { - bool public disabled = false; - function transfer(address _to, uint256 _value) returns (bool success) { - if (disabled != true && balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (disabled != true && balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; -} -contract NexxusToken is StandardToken { - function () {return;} - string public name = "Nexxus"; - uint8 public decimals = 8; - string public symbol = "NXX"; - address public owner; - function NexxusToken() { - totalSupply = 31800000000000000; - owner = msg.sender; - balances[owner] = totalSupply; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { return; } - return true; - } - function mintToken(uint256 _amount) { - if (msg.sender == owner) { - totalSupply += _amount; - balances[owner] += _amount; - Transfer(0, owner, _amount); - } - } - function disableToken(bool _disable) { - if (msg.sender == owner) - disabled = _disable; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19830.sol b/data_full/CVE_clean/2018-19830.sol deleted file mode 100644 index abe20d12..00000000 --- a/data_full/CVE_clean/2018-19830.sol +++ /dev/null @@ -1,140 +0,0 @@ -pragma solidity ^0.4.24; -library SafeMath { - function mul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint a, uint b) internal returns (uint) { - uint c = a / b; - return c; - } - function sub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - function add(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c >= a); - return c; - } - function assert(bool assertion) internal { - if (!assertion) { - throw; - } - } -} -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); - function allowance(address owner, address spender) constant returns (uint); - function transferFrom(address from, address to, uint value); - function approve(address spender, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint; - address public owner; - bool public transferable = true; - mapping(address => uint) balances; - mapping (address => bool) public frozenAccount; - modifier onlyPayloadSize(uint size) { - if(msg.data.length < size + 4) { - throw; - } - _; - } - modifier unFrozenAccount{ - require(!frozenAccount[msg.sender]); - _; - } - modifier onlyOwner { - if (owner == msg.sender) { - _; - } else { - InvalidCaller(msg.sender); - throw; - } - } - modifier onlyTransferable { - if (transferable) { - _; - } else { - LiquidityAlarm("The liquidity is switched off"); - throw; - } - } - event FrozenFunds(address target, bool frozen); - event InvalidCaller(address caller); - event Burn(address caller, uint value); - event OwnershipTransferred(address indexed from, address indexed to); - event InvalidAccount(address indexed addr, bytes msg); - event LiquidityAlarm(bytes msg); - function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) unFrozenAccount onlyTransferable { - if (frozenAccount[_to]) { - InvalidAccount(_to, "The receiver account is frozen"); - } else { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - } - } - function balanceOf(address _owner) view returns (uint balance) { - return balances[_owner]; - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target]=freeze; - FrozenFunds(target, freeze); - } - function accountFrozenStatus(address target) view returns (bool frozen) { - return frozenAccount[target]; - } - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - address oldOwner=owner; - owner = newOwner; - OwnershipTransferred(oldOwner, owner); - } - } - function switchLiquidity (bool _transferable) onlyOwner returns (bool success) { - transferable=_transferable; - return true; - } - function liquidityStatus () view returns (bool _transferable) { - return transferable; - } -} -contract StandardToken is BasicToken { - mapping (address => mapping (address => uint)) allowed; - function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) unFrozenAccount onlyTransferable{ - var _allowance = allowed[_from][msg.sender]; - require(!frozenAccount[_from]&&!frozenAccount[_to]); - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - } - function approve(address _spender, uint _value) unFrozenAccount { - if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - } - function allowance(address _owner, address _spender) view returns (uint remaining) { - return allowed[_owner][_spender]; - } -} -contract BAFCToken is StandardToken { - string public name = "Business Alliance Financial Circle"; - string public symbol = "BAFC"; - uint public decimals = 18; - function UBSexToken() { - owner = msg.sender; - totalSupply = 1.9 * 10 ** 26; - balances[owner] = totalSupply; - } - function () public payable { - revert(); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19831.sol b/data_full/CVE_clean/2018-19831.sol deleted file mode 100644 index 4ab1f0fe..00000000 --- a/data_full/CVE_clean/2018-19831.sol +++ /dev/null @@ -1,233 +0,0 @@ -pragma solidity ^0.4.19; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ForeignToken { - function balanceOf(address _owner) constant public returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool); -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -interface Token { - function distr(address _to, uint256 _value) public returns (bool); - function totalSupply() constant public returns (uint256 supply); - function balanceOf(address _owner) constant public returns (uint256 balance); -} -contract Cryptbond is ERC20 { - using SafeMath for uint256; - address owner = msg.sender; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - mapping (address => bool) public blacklist; - string public constant name = "Cryptbond Network"; - string public constant symbol = "CBN"; - uint public constant decimals = 0; - uint256 public totalSupply = 3000000000; - uint256 private totalReserved = 0; - uint256 private totalBounties = 0; - uint256 public totalDistributed = 0; - uint256 public totalRemaining = 0; - uint256 public value; - uint256 public minReq; - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - event Distr(address indexed to, uint256 amount); - event DistrFinished(); - event Burn(address indexed burner, uint256 value); - bool public distributionFinished = false; - modifier canDistr() { - require(!distributionFinished); - _; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - modifier onlyWhitelist() { - require(blacklist[msg.sender] == false); - _; - } - function ToOwner( - ) public { - balances[msg.sender] = totalSupply; - owner = msg.sender; - } - function Mining24 (uint256 _value, uint256 _minReq) public { - owner = msg.sender; - value = _value; - minReq = _minReq; - balances[msg.sender] = totalDistributed; - } - function setParameters (uint256 _value, uint256 _minReq) onlyOwner public { - value = _value; - minReq = _minReq; - } - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - owner = newOwner; - } - } - function enableWhitelist(address[] addresses) onlyOwner public { - for (uint i = 0; i < addresses.length; i++) { - blacklist[addresses[i]] = false; - } - } - function disableWhitelist(address[] addresses) onlyOwner public { - for (uint i = 0; i < addresses.length; i++) { - blacklist[addresses[i]] = true; - } - } - function finishDistribution() onlyOwner canDistr public returns (bool) { - distributionFinished = true; - DistrFinished(); - return true; - } - function distr(address _to, uint256 _amount) canDistr private returns (bool) { - totalDistributed = totalDistributed.add(_amount); - totalRemaining = totalRemaining.sub(_amount); - balances[_to] = balances[_to].add(_amount); - Distr(_to, _amount); - Transfer(address(0), _to, _amount); - return true; - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - function airdrop(address[] addresses) onlyOwner canDistr public { - require(addresses.length <= 255); - require(value <= totalRemaining); - for (uint i = 0; i < addresses.length; i++) { - require(value <= totalRemaining); - distr(addresses[i], value); - } - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { - require(addresses.length <= 255); - require(amount <= totalRemaining); - for (uint i = 0; i < addresses.length; i++) { - require(amount <= totalRemaining); - distr(addresses[i], amount); - } - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { - require(addresses.length <= 255); - require(addresses.length == amounts.length); - for (uint8 i = 0; i < addresses.length; i++) { - require(amounts[i] <= totalRemaining); - distr(addresses[i], amounts[i]); - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - } - uint price = 0.000001 ether; - function() public payable { - uint toMint = msg.value/price; - balances[msg.sender]+=toMint; - Transfer(0,msg.sender,toMint); - } - function getTokens() payable canDistr onlyWhitelist public { - require(value <= totalRemaining); - address investor = msg.sender; - uint256 toGive = value; - if (msg.value < minReq){ - toGive = value.sub(value); - } - distr(investor, toGive); - if (toGive > 0) { - blacklist[investor] = true; - } - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - function balanceOf(address _owner) constant public returns (uint256) { - return balances[_owner]; - } - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - Transfer(msg.sender, _to, _amount); - return true; - } - function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[_from]); - require(_amount <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - Transfer(_from, _to, _amount); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant public returns (uint256) { - return allowed[_owner][_spender]; - } - function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ - ForeignToken t = ForeignToken(tokenAddress); - uint bal = t.balanceOf(who); - return bal; - } - function withdraw() onlyOwner public { - uint256 etherBalance = this.balance; - owner.transfer(etherBalance); - } - function burn(uint256 _value) onlyOwner public { - require(_value <= balances[msg.sender]); - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - totalDistributed = totalDistributed.sub(_value); - Burn(burner, _value); - } - function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19832.sol b/data_full/CVE_clean/2018-19832.sol deleted file mode 100644 index 3c1a7c6f..00000000 --- a/data_full/CVE_clean/2018-19832.sol +++ /dev/null @@ -1,174 +0,0 @@ -pragma solidity ^0.4.24; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ForeignToken { - function balanceOf(address _owner) constant public returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool); -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -interface Token { - function distr(address _to, uint256 _value) external returns (bool); - function totalSupply() constant external returns (uint256 supply); - function balanceOf(address _owner) constant external returns (uint256 balance); -} -contract NewIntelTechMedia is ERC20 { - using SafeMath for uint256; - address owner = msg.sender; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - mapping (address => bool) public blacklist; - string public constant name = "NewIntelTechMedia"; - string public constant symbol = "NETM"; - uint public constant decimals = 18; - uint256 public totalSupply = 500000000e18; - uint256 public totalDistributed = 250000000e18; - uint256 public totalRemaining = totalSupply.sub(totalDistributed); - uint256 public value = 2500e18; - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - event Distr(address indexed to, uint256 amount); - event DistrFinished(); - event Burn(address indexed burner, uint256 value); - bool public distributionFinished = false; - modifier canDistr() { - require(!distributionFinished); - _; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - modifier onlyWhitelist() { - require(blacklist[msg.sender] == false); - _; - } - function NETM() public { - owner = msg.sender; - balances[owner] = totalDistributed; - } - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - owner = newOwner; - } - } - function finishDistribution() onlyOwner canDistr public returns (bool) { - distributionFinished = true; - emit DistrFinished(); - return true; - } - function distr(address _to, uint256 _amount) canDistr private returns (bool) { - totalDistributed = totalDistributed.add(_amount); - totalRemaining = totalRemaining.sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Distr(_to, _amount); - emit Transfer(address(0), _to, _amount); - return true; - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - function () external payable { - getTokens(); - } - function getTokens() payable canDistr onlyWhitelist public { - if (value > totalRemaining) { - value = totalRemaining; - } - require(value <= totalRemaining); - address investor = msg.sender; - uint256 toGive = value; - distr(investor, toGive); - if (toGive > 0) { - blacklist[investor] = true; - } - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - value = value.div(100000).mul(99999); - } - function balanceOf(address _owner) constant public returns (uint256) { - return balances[_owner]; - } - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(msg.sender, _to, _amount); - return true; - } - function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[_from]); - require(_amount <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(_from, _to, _amount); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant public returns (uint256) { - return allowed[_owner][_spender]; - } - function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ - ForeignToken t = ForeignToken(tokenAddress); - uint bal = t.balanceOf(who); - return bal; - } - function withdraw() onlyOwner public { - uint256 etherBalance = address(this).balance; - owner.transfer(etherBalance); - } - function burn(uint256 _value) onlyOwner public { - require(_value <= balances[msg.sender]); - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - totalDistributed = totalDistributed.sub(_value); - emit Burn(burner, _value); - } - function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19833.sol b/data_full/CVE_clean/2018-19833.sol deleted file mode 100644 index 273f90c0..00000000 --- a/data_full/CVE_clean/2018-19833.sol +++ /dev/null @@ -1,60 +0,0 @@ -pragma solidity ^0.4.24; -contract ERCDDAToken { - address public owner; - string public name; - string public symbol; - uint8 public decimals = 0; - uint256 public totalSupply; - event Transfer(address indexed from, address indexed to, uint256 value); - event FrozenFunds(address target, bool frozen); - event Burn(address indexed from, uint256 value); - mapping (address => uint256) public balanceOf; - mapping (address => bool) public frozenAccount; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - constructor( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - owner = msg.sender; - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - function burn(uint256 _value) onlyOwner public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public{ - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19834.sol b/data_full/CVE_clean/2018-19834.sol deleted file mode 100644 index b9d4b905..00000000 --- a/data_full/CVE_clean/2018-19834.sol +++ /dev/null @@ -1,139 +0,0 @@ -pragma solidity ^0.4.18; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b > 0); - uint256 c = a / b; - assert(a == b * c + a % b); - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract Ownable { - address public owner; - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - function Ownable() public { - owner = msg.sender; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - require(newOwner != address(0)); - OwnershipTransferred(owner, newOwner); - owner = newOwner; - } -} -contract ERC20Interface { - function totalSupply() public constant returns (uint); - function balanceOf(address tokenOwner) public constant returns (uint balance); - function allowance(address tokenOwner, address spender) public constant returns (uint remaining); - function transfer(address to, uint tokens) public returns (bool success); - function approve(address spender, uint tokens) public returns (bool success); - function transferFrom(address from, address to, uint tokens) public returns (bool success); - event Transfer(address indexed from, address indexed to, uint tokens); - event Approval(address indexed tokenOwner, address indexed spender, uint tokens); -} -interface OldXRPCToken { - function transfer(address receiver, uint amount) external; - function balanceOf(address _owner) external returns (uint256 balance); - function mint(address wallet, address buyer, uint256 tokenAmount) external; - function showMyTokenBalance(address addr) external; -} -contract BOMBBA is ERC20Interface,Ownable { - using SafeMath for uint256; - uint256 public totalSupply; - mapping(address => uint256) tokenBalances; - string public constant name = "BOMBBA"; - string public constant symbol = "BOMB"; - uint256 public constant decimals = 18; - uint256 public constant INITIAL_SUPPLY = 10000000; - address ownerWallet; - mapping (address => mapping (address => uint256)) allowed; - event Debug(string message, address addr, uint256 number); - function quaker(address wallet) public { - owner = msg.sender; - ownerWallet=wallet; - totalSupply = INITIAL_SUPPLY * 10 ** 18; - tokenBalances[wallet] = INITIAL_SUPPLY * 10 ** 18; - } - function transfer(address _to, uint256 _value) public returns (bool) { - require(tokenBalances[msg.sender]>=_value); - tokenBalances[msg.sender] = tokenBalances[msg.sender].sub(_value); - tokenBalances[_to] = tokenBalances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= tokenBalances[_from]); - require(_value <= allowed[_from][msg.sender]); - tokenBalances[_from] = tokenBalances[_from].sub(_value); - tokenBalances[_to] = tokenBalances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function totalSupply() public constant returns (uint) { - return totalSupply - tokenBalances[address(0)]; - } - function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { - return allowed[tokenOwner][spender]; - } - function increaseApproval(address _spender, uint _addedValue) public returns (bool) { - allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { - uint oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - function () public payable { - revert(); - } - function balanceOf(address _owner) constant public returns (uint256 balance) { - return tokenBalances[_owner]; - } - function mint(address wallet, address buyer, uint256 tokenAmount) public onlyOwner { - require(tokenBalances[wallet] >= tokenAmount); - tokenBalances[buyer] = tokenBalances[buyer].add(tokenAmount); - tokenBalances[wallet] = tokenBalances[wallet].add(tokenAmount); - Transfer(wallet, buyer, tokenAmount); - totalSupply=totalSupply.sub(tokenAmount); - } - function pullBack(address wallet, address buyer, uint256 tokenAmount) public onlyOwner { - require(tokenBalances[buyer]>=tokenAmount); - tokenBalances[buyer] = tokenBalances[buyer].sub(tokenAmount); - tokenBalances[wallet] = tokenBalances[wallet].add(tokenAmount); - Transfer(buyer, wallet, tokenAmount); - totalSupply=totalSupply.add(tokenAmount); - } - function showMyTokenBalance(address addr) public view returns (uint tokenBalance) { - tokenBalance = tokenBalances[addr]; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2019-15078.sol b/data_full/CVE_clean/2019-15078.sol deleted file mode 100644 index 28dbeb69..00000000 --- a/data_full/CVE_clean/2019-15078.sol +++ /dev/null @@ -1,174 +0,0 @@ -pragma solidity ^0.4.22; -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract ForeignToken { - function balanceOf(address _owner) constant public returns (uint256); - function transfer(address _to, uint256 _value) public returns (bool); -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) public constant returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public constant returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -interface Token { - function distr(address _to, uint256 _value) external returns (bool); - function totalSupply() constant external returns (uint256 supply); - function balanceOf(address _owner) constant external returns (uint256 balance); -} -contract XBORNID is ERC20 { - using SafeMath for uint256; - address owner = msg.sender; - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - mapping (address => bool) public blacklist; - string public constant name = "XBORN ID"; - string public constant symbol = "XBornID"; - uint public constant decimals = 18; -uint256 public totalSupply = 500000000e18; -uint256 public totalDistributed = 200000000e18; -uint256 public totalRemaining = totalSupply.sub(totalDistributed); -uint256 public value = 1000e18; - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - event Distr(address indexed to, uint256 amount); - event DistrFinished(); - event Burn(address indexed burner, uint256 value); - bool public distributionFinished = false; - modifier canDistr() { - require(!distributionFinished); - _; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - modifier onlyWhitelist() { - require(blacklist[msg.sender] == false); - _; - } - function XBornID() public { - owner = msg.sender; - balances[owner] = totalDistributed; - } - function transferOwnership(address newOwner) onlyOwner public { - if (newOwner != address(0)) { - owner = newOwner; - } - } - function finishDistribution() onlyOwner canDistr public returns (bool) { - distributionFinished = true; - emit DistrFinished(); - return true; - } - function distr(address _to, uint256 _amount) canDistr private returns (bool) { - totalDistributed = totalDistributed.add(_amount); - totalRemaining = totalRemaining.sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Distr(_to, _amount); - emit Transfer(address(0), _to, _amount); - return true; - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - } - function () external payable { - getTokens(); - } - function getTokens() payable canDistr onlyWhitelist public { - if (value > totalRemaining) { - value = totalRemaining; - } - require(value <= totalRemaining); - address investor = msg.sender; - uint256 toGive = value; - distr(investor, toGive); - if (toGive > 0) { - blacklist[investor] = true; - } - if (totalDistributed >= totalSupply) { - distributionFinished = true; - } - value = value.div(100000).mul(99999); - } - function balanceOf(address _owner) constant public returns (uint256) { - return balances[_owner]; - } - modifier onlyPayloadSize(uint size) { - assert(msg.data.length >= size + 4); - _; - } - function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[msg.sender]); - balances[msg.sender] = balances[msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(msg.sender, _to, _amount); - return true; - } - function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { - require(_to != address(0)); - require(_amount <= balances[_from]); - require(_amount <= allowed[_from][msg.sender]); - balances[_from] = balances[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balances[_to] = balances[_to].add(_amount); - emit Transfer(_from, _to, _amount); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool success) { - if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant public returns (uint256) { - return allowed[_owner][_spender]; - } - function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ - ForeignToken t = ForeignToken(tokenAddress); - uint bal = t.balanceOf(who); - return bal; - } - function withdraw() onlyOwner public { - uint256 etherBalance = address(this).balance; - owner.transfer(etherBalance); - } - function burn(uint256 _value) onlyOwner public { - require(_value <= balances[msg.sender]); - address burner = msg.sender; - balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - totalDistributed = totalDistributed.sub(_value); - emit Burn(burner, _value); - } - function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { - ForeignToken token = ForeignToken(_tokenContract); - uint256 amount = token.balanceOf(address(this)); - return token.transfer(owner, amount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2019-15079.sol b/data_full/CVE_clean/2019-15079.sol deleted file mode 100644 index 98103749..00000000 --- a/data_full/CVE_clean/2019-15079.sol +++ /dev/null @@ -1,58 +0,0 @@ -pragma solidity ^0.4.16; -contract EAI_TokenERC { - string public name; - string public symbol; - uint8 public decimals = 8; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); - event Burn(address indexed from, uint256 value); - function EAI_TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value >= balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - emit Burn(_from, _value); - return true; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2019-15080.sol b/data_full/CVE_clean/2019-15080.sol deleted file mode 100644 index d15cc1f8..00000000 --- a/data_full/CVE_clean/2019-15080.sol +++ /dev/null @@ -1,121 +0,0 @@ -pragma solidity ^0.4.18; - contract Owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address _newOwner) onlyOwner public { - owner = _newOwner; - } - } -contract ERC20 { - using SafeMath for uint256; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) allowed; - mapping(address => bool) public isblacklistedAccount; - string public name; - string public symbol; - uint8 public decimals = 4; - uint256 public totalSupply; - event Approval(address indexed owner, address indexed spender, uint256 value); - event Transfer(address indexed from, address indexed to, uint256 value); - function ERC20(uint256 _initialSupply,string _tokenName, string _tokenSymbol) public { - totalSupply = _initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = _tokenName; - symbol = _tokenSymbol; - } - function transfer(address _to, uint256 _value) public returns (bool) { - require(!isblacklistedAccount[msg.sender]); - require(!isblacklistedAccount[_to]); - require(balanceOf[msg.sender] > 0); - require(balanceOf[msg.sender] >= _value); - require(_to != address(0)); - require(_value > 0); - require(balanceOf[_to] .add(_value) >= balanceOf[_to]); - require(_to != msg.sender); - balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); - balanceOf[_to] = balanceOf[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function transferFrom( - address _from, - address _to, - uint256 _amount - ) public returns (bool success) - { - if (balanceOf[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balanceOf[_to].add(_amount) > balanceOf[_to]) - { - balanceOf[_from] = balanceOf[_from].sub(_amount); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); - balanceOf[_to] = balanceOf[_to].add(_amount); - return true; - } else { - return false; - } - } - function approve(address _spender, uint256 _amount) public returns (bool success) { - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} -library SafeMath { - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - uint256 c = a * b; - assert(c / a == b); - return c; - } - function div(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract MorphToken is Owned, ERC20 { - using SafeMath for uint256; - uint256 tokenSupply = 100000000; - event Burn(address from, uint256 value); - function MorphToken() - ERC20 (tokenSupply,"MORPH","MORPH") public - { - owner = msg.sender; - } - function blacklistAccount(address _target, bool _isBlacklisted) public onlyOwner { - isblacklistedAccount[_target] = _isBlacklisted; - } - function mintTokens(uint256 _mintedAmount) public onlyOwner { - balanceOf[owner] = balanceOf[owner].add(_mintedAmount); - totalSupply = totalSupply.add(_mintedAmount); - Transfer(0, owner, _mintedAmount); - } - function burn(uint256 _value) public onlyOwner { - require(_value <= balanceOf[msg.sender]); - address burner = msg.sender; - balanceOf[burner] = balanceOf[burner].sub(_value); - totalSupply = totalSupply.sub(_value); - Burn(burner, _value); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2020-17752.sol b/data_full/CVE_clean/2020-17752.sol deleted file mode 100644 index 3d269af6..00000000 --- a/data_full/CVE_clean/2020-17752.sol +++ /dev/null @@ -1,290 +0,0 @@ -library SafeMath { - function mul(uint256 a, uint256 b) constant public returns (uint256) { - uint256 c = a * b; - assert(a == 0 || c / a == b); - return c; - } - function div(uint256 a, uint256 b) constant public returns (uint256) { - uint256 c = a / b; - return c; - } - function sub(uint256 a, uint256 b) constant public returns (uint256) { - assert(b <= a); - return a - b; - } - function add(uint256 a, uint256 b) constant public returns (uint256) { - uint256 c = a + b; - assert(c >= a); - return c; - } -} -contract Ownable { - address public owner; - function Ownable() public { - owner = msg.sender; - } - modifier onlyOwner() { - if(msg.sender == owner){ - _; - } - else{ - revert(); - } - } -} -contract ERC20Basic { - uint256 public totalSupply; - function balanceOf(address who) constant public returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) constant public returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - using SafeMath for uint128; - mapping(address => uint256) balances; - function transfer(address _to, uint256 _value) public returns (bool) { - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - Transfer(msg.sender, _to, _value); - return true; - } - function balanceOf(address _owner) constant public returns (uint256 balance) { - return balances[_owner]; - } -} -contract StandardToken is ERC20, BasicToken { - mapping (address => mapping (address => uint256)) allowed; - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - var _allowance = allowed[_from][msg.sender]; - balances[_to] = balances[_to].add(_value); - balances[_from] = balances[_from].sub(_value); - allowed[_from][msg.sender] = _allowance.sub(_value); - Transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public returns (bool) { - require((_value == 0) || (allowed[msg.sender][_spender] == 0)); - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant public returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} -contract MintableToken is StandardToken, Ownable { - event Mint(address indexed to, uint256 amount); - event MintFinished(); - bool public mintingFinished = false; - modifier canMint() { - if(!mintingFinished){ - _; - } - else{ - revert(); - } - } - function mint(address _to, uint256 _amount) canMint internal returns (bool) { - totalSupply = totalSupply.add(_amount); - balances[_to] = balances[_to].add(_amount); - Mint(_to, _amount); - Transfer(address(0),_to,_amount); - return true; - } - function finishMinting() onlyOwner public returns (bool) { - mintingFinished = true; - MintFinished(); - return true; - } -} -contract MON is MintableToken{ - event BuyStatus(uint256 status); - struct Buy{ - uint128 amountOfEth; - uint128 stage; - } - struct StageData{ - uint128 stageTime; - uint64 stageSum; - uint64 stagePrice; - } - string public constant name = "MillionCoin"; - string public constant symbol = "MON"; - uint256 public constant DECIMALS = 8; - uint256 public constant decimals = 8; - address public beneficiary ; - uint256 private alreadyRunned = 0; - uint256 internal _now =0; - uint256 public stageIndex = 0; - StageData[] public stageDataStore; - uint256 public period = 3600*24; - uint256 public start = 0; - uint256 public sumMultiplayer = 100000; - mapping(address => Buy) public stageBuys; - modifier runOnce(uint256 bit){ - if((alreadyRunned & bit)==0){ - alreadyRunned = alreadyRunned | bit; - _; - } - else{ - revert(); - } - } - function MON(address _benef,uint256 _start,uint256 _sumMul,uint256 _period) public{ - beneficiary = _benef; - if(_start==0){ - start = GetNow(); - } - else{ - start = _start; - } - if(_period!=0){ - period = _period; - } - if(_sumMul!=0){ - sumMultiplayer = _sumMul; - } - stageDataStore.push(StageData(uint128(start+period*151),uint64(50*sumMultiplayer),uint64(5000))); - stageDataStore.push(StageData(uint128(start+period*243),uint64(60*sumMultiplayer),uint64(3000))); - stageDataStore.push(StageData(uint128(start+period*334),uint64(50*sumMultiplayer),uint64(1666))); - stageDataStore.push(StageData(uint128(start+period*455),uint64(60*sumMultiplayer),uint64(1500))); - stageDataStore.push(StageData(uint128(start+period*548),uint64(65*sumMultiplayer),uint64(1444))); - stageDataStore.push(StageData(uint128(start+period*641),uint64(55*sumMultiplayer),uint64(1000))); - } - function GetMaxStageEthAmount() public constant returns(uint256){ - StageData memory currS = stageDataStore[stageIndex]; - uint256 retVal = currS.stageSum; - retVal = retVal*(10**18); - retVal = retVal/currS.stagePrice; - retVal = retVal.sub(this.balance); - return retVal; - } - function () public payable { - uint256 status = 0; - status = 0; - bool transferToBenef = false; - uint256 amountOfEthBeforeBuy = 0; - uint256 stageMaxEthAmount = 0; - uint128 _n = uint128(GetNow()); - StageData memory currS = stageDataStore[stageIndex] ; - if(_n0){ - burn(msg.sender,b.amountOfEth.mul(currS.stagePrice)); - } - } - b.amountOfEth=0; - mintingFinished = true; - msg.sender.transfer(amountToReturn); - } - else{ - status = 2; - if(b.stage!=stageIndex){ - b.stage = uint128(stageIndex); - b.amountOfEth = 0; - status = status*10+3; - } - if(currS.stageTime>_n && this.balance < stageMaxEthAmount){ - b.amountOfEth = uint128(b.amountOfEth.add(uint128(msg.value))); - amountToMint = msg.value*currS.stagePrice; - status = status*10+4; - mintCoins(msg.sender,amountToMint); - }else{ - if( this.balance >=stageMaxEthAmount){ - status = status*10+5; - transferToBenef = true; - amountToMint = (stageMaxEthAmount - amountOfEthBeforeBuy)*(currS.stagePrice); - mintCoins(msg.sender,amountToMint); - stageIndex = stageIndex+1; - beneficiary.transfer(stageMaxEthAmount); - stageMaxEthAmount = GetMaxStageEthAmount(); - if(stageIndex<5 && stageMaxEthAmount>this.balance){ - currS = stageDataStore[stageIndex] ; - amountToMint = this.balance*(currS.stagePrice); - b.stage = uint128(stageIndex); - b.amountOfEth =uint128(this.balance); - mintCoins(msg.sender,amountToMint); - } - else{ - status = status*10+8; - amountToReturn = this.balance; - msg.sender.transfer(amountToReturn); - } - }else{ - status = status*10+6; - } - } - } - stageBuys[msg.sender] = b; - BuyStatus(status); - } - function GetBalance() public constant returns(uint256){ - return this.balance; - } - uint256 public constant maxTokenSupply = (10**(18-DECIMALS))*(10**6)*34 ; - function burn(address _from, uint256 _amount) private returns (bool){ - _amount = _amount.div(10**10); - balances[_from] = balances[_from].sub(_amount); - totalSupply = totalSupply.sub(_amount); - Transfer(_from,address(0),_amount); - } - function GetStats()public constant returns (uint256,uint256,uint256,uint256){ - uint256 timeToEnd = 0; - uint256 round =0; - StageData memory _s = stageDataStore[stageIndex]; - if(GetNow()>=start){ - round = stageIndex+1; - if(_s.stageTime>GetNow()) - { - timeToEnd = _s.stageTime-GetNow(); - } - else{ - return(0,0,0,0); - } - } - else{ - timeToEnd = start-GetNow(); - } - return(timeToEnd, - round, - _s.stageSum*1000/_s.stagePrice, - GetMaxStageEthAmount().div(10**15)); - } - function mintCoins(address _to, uint256 _amount) canMint internal returns (bool) { - _amount = _amount.div(10**10); - if(totalSupply.add(_amount)= a); - return c; - } -} -contract Ownable { - address public owner; - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - function Ownable() internal { - owner = msg.sender; - } - modifier onlyOwner() { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - require(newOwner != address(0)); - emit OwnershipTransferred(owner, newOwner); - owner = newOwner; - } -} -contract tokenInterface { - function balanceOf(address _owner) public constant returns (uint256 balance); - function transfer(address _to, uint256 _value) public returns (bool); -} -contract rateInterface { - function readRate(string _currency) public view returns (uint256 oneEtherValue); -} -contract ICOEngineInterface { - function started() public view returns(bool); - function ended() public view returns(bool); - function startTime() public view returns(uint); - function endTime() public view returns(uint); - function totalTokens() public view returns(uint); - function remainingTokens() public view returns(uint); - function price() public view returns(uint); -} -contract KYCBase { - using SafeMath for uint256; - mapping (address => bool) public isKycSigner; - mapping (uint64 => uint256) public alreadyPayed; - event KycVerified(address indexed signer, address buyerAddress, uint64 buyerId, uint maxAmount); - function KYCBase(address [] kycSigners) internal { - for (uint i = 0; i < kycSigners.length; i++) { - isKycSigner[kycSigners[i]] = true; - } - } - function releaseTokensTo(address buyer) internal returns(bool); - function senderAllowedFor(address buyer) - internal view returns(bool) - { - return buyer == msg.sender; - } - function buyTokensFor(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) - public payable returns (bool) - { - require(senderAllowedFor(buyerAddress)); - return buyImplementation(buyerAddress, buyerId, maxAmount, v, r, s); - } - function buyTokens(uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) - public payable returns (bool) - { - return buyImplementation(msg.sender, buyerId, maxAmount, v, r, s); - } - function buyImplementation(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) - private returns (bool) - { - bytes32 hash = sha256("Eidoo icoengine authorization", address(0), buyerAddress, buyerId, maxAmount); - address signer = ecrecover(hash, v, r, s); - if (!isKycSigner[signer]) { - revert(); - } else { - uint256 totalPayed = alreadyPayed[buyerId].add(msg.value); - require(totalPayed <= maxAmount); - alreadyPayed[buyerId] = totalPayed; - emit KycVerified(signer, buyerAddress, buyerId, maxAmount); - return releaseTokensTo(buyerAddress); - } - } -} -contract RC is ICOEngineInterface, KYCBase { - using SafeMath for uint256; - TokenSale tokenSaleContract; - uint256 public startTime; - uint256 public endTime; - uint256 public etherMinimum; - uint256 public soldTokens; - uint256 public remainingTokens; - uint256 public oneTokenInUsdWei; - mapping(address => uint256) public etherUser; - mapping(address => uint256) public pendingTokenUser; - mapping(address => uint256) public tokenUser; - uint256[] public tokenThreshold; - uint256[] public bonusThreshold; - function RC(address _tokenSaleContract, uint256 _oneTokenInUsdWei, uint256 _remainingTokens, uint256 _etherMinimum, uint256 _startTime , uint256 _endTime, address [] kycSigner, uint256[] _tokenThreshold, uint256[] _bonusThreshold ) public KYCBase(kycSigner) { - require ( _tokenSaleContract != 0 ); - require ( _oneTokenInUsdWei != 0 ); - require( _remainingTokens != 0 ); - require ( _tokenThreshold.length != 0 ); - require ( _tokenThreshold.length == _bonusThreshold.length ); - bonusThreshold = _bonusThreshold; - tokenThreshold = _tokenThreshold; - tokenSaleContract = TokenSale(_tokenSaleContract); - tokenSaleContract.addMeByRC(); - soldTokens = 0; - remainingTokens = _remainingTokens; - oneTokenInUsdWei = _oneTokenInUsdWei; - etherMinimum = _etherMinimum; - setTimeRC( _startTime, _endTime ); - } - function setTimeRC(uint256 _startTime, uint256 _endTime ) internal { - if( _startTime == 0 ) { - startTime = tokenSaleContract.startTime(); - } else { - startTime = _startTime; - } - if( _endTime == 0 ) { - endTime = tokenSaleContract.endTime(); - } else { - endTime = _endTime; - } - } - modifier onlyTokenSaleOwner() { - require(msg.sender == tokenSaleContract.owner() ); - _; - } - function setTime(uint256 _newStart, uint256 _newEnd) public onlyTokenSaleOwner { - if ( _newStart != 0 ) startTime = _newStart; - if ( _newEnd != 0 ) endTime = _newEnd; - } - function changeMinimum(uint256 _newEtherMinimum) public onlyTokenSaleOwner { - etherMinimum = _newEtherMinimum; - } - function releaseTokensTo(address buyer) internal returns(bool) { - if( msg.value > 0 ) takeEther(buyer); - giveToken(buyer); - return true; - } - function started() public view returns(bool) { - return now > startTime || remainingTokens == 0; - } - function ended() public view returns(bool) { - return now > endTime || remainingTokens == 0; - } - function startTime() public view returns(uint) { - return startTime; - } - function endTime() public view returns(uint) { - return endTime; - } - function totalTokens() public view returns(uint) { - return remainingTokens.add(soldTokens); - } - function remainingTokens() public view returns(uint) { - return remainingTokens; - } - function price() public view returns(uint) { - uint256 oneEther = 10**18; - return oneEther.mul(10**18).div( tokenSaleContract.tokenValueInEther(oneTokenInUsdWei) ); - } - function () public payable{ - require( now > startTime ); - if(now < endTime) { - takeEther(msg.sender); - } else { - claimTokenBonus(msg.sender); - } - } - event Buy(address buyer, uint256 value, uint256 soldToken, uint256 valueTokenInUsdWei ); - function takeEther(address _buyer) internal { - require( now > startTime ); - require( now < endTime ); - require( msg.value >= etherMinimum); - require( remainingTokens > 0 ); - uint256 oneToken = 10 ** uint256(tokenSaleContract.decimals()); - uint256 tokenValue = tokenSaleContract.tokenValueInEther(oneTokenInUsdWei); - uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); - uint256 unboughtTokens = tokenInterface(tokenSaleContract.tokenContract()).balanceOf(tokenSaleContract); - if ( unboughtTokens > remainingTokens ) { - unboughtTokens = remainingTokens; - } - uint256 refund = 0; - if ( unboughtTokens < tokenAmount ) { - refund = (tokenAmount - unboughtTokens).mul(tokenValue).div(oneToken); - tokenAmount = unboughtTokens; - remainingTokens = 0; - _buyer.transfer(refund); - } else { - remainingTokens = remainingTokens.sub(tokenAmount); - } - etherUser[_buyer] = etherUser[_buyer].add(msg.value.sub(refund)); - pendingTokenUser[_buyer] = pendingTokenUser[_buyer].add(tokenAmount); - emit Buy( _buyer, msg.value, tokenAmount, oneTokenInUsdWei ); - } - function giveToken(address _buyer) internal { - require( pendingTokenUser[_buyer] > 0 ); - tokenUser[_buyer] = tokenUser[_buyer].add(pendingTokenUser[_buyer]); - tokenSaleContract.claim(_buyer, pendingTokenUser[_buyer]); - soldTokens = soldTokens.add(pendingTokenUser[_buyer]); - pendingTokenUser[_buyer] = 0; - tokenSaleContract.wallet().transfer(etherUser[_buyer]); - etherUser[_buyer] = 0; - } - function claimTokenBonus(address _buyer) internal { - require( now > endTime ); - require( tokenUser[_buyer] > 0 ); - uint256 bonusApplied = 0; - for (uint i = 0; i < tokenThreshold.length; i++) { - if ( soldTokens > tokenThreshold[i] ) { - bonusApplied = bonusThreshold[i]; - } - } - require( bonusApplied > 0 ); - uint256 addTokenAmount = tokenUser[_buyer].mul( bonusApplied ).div(10**2); - tokenUser[_buyer] = 0; - tokenSaleContract.claim(_buyer, addTokenAmount); - _buyer.transfer(msg.value); - } - function refundEther(address to) public onlyTokenSaleOwner { - to.transfer(etherUser[to]); - etherUser[to] = 0; - pendingTokenUser[to] = 0; - } - function withdraw(address to, uint256 value) public onlyTokenSaleOwner { - to.transfer(value); - } - function userBalance(address _user) public view returns( uint256 _pendingTokenUser, uint256 _tokenUser, uint256 _etherUser ) { - return (pendingTokenUser[_user], tokenUser[_user], etherUser[_user]); - } -} -contract TokenSale is Ownable { - using SafeMath for uint256; - tokenInterface public tokenContract; - rateInterface public rateContract; - address public wallet; - address public advisor; - uint256 public advisorFee; - uint256 public constant decimals = 18; - uint256 public endTime; - uint256 public startTime; - mapping(address => bool) public rc; - function TokenSale(address _tokenAddress, address _rateAddress, uint256 _startTime, uint256 _endTime) public { - tokenContract = tokenInterface(_tokenAddress); - rateContract = rateInterface(_rateAddress); - setTime(_startTime, _endTime); - wallet = msg.sender; - advisor = msg.sender; - advisorFee = 0 * 10**3; - } - function tokenValueInEther(uint256 _oneTokenInUsdWei) public view returns(uint256 tknValue) { - uint256 oneEtherInUsd = rateContract.readRate("usd"); - tknValue = _oneTokenInUsdWei.mul(10 ** uint256(decimals)).div(oneEtherInUsd); - return tknValue; - } - modifier isBuyable() { - require( now > startTime ); - require( now < endTime ); - require( msg.value > 0 ); - uint256 remainingTokens = tokenContract.balanceOf(this); - require( remainingTokens > 0 ); - _; - } - event Buy(address buyer, uint256 value, address indexed ambassador); - modifier onlyRC() { - require( rc[msg.sender] ); - _; - } - function buyFromRC(address _buyer, uint256 _rcTokenValue, uint256 _remainingTokens) onlyRC isBuyable public payable returns(uint256) { - uint256 oneToken = 10 ** uint256(decimals); - uint256 tokenValue = tokenValueInEther(_rcTokenValue); - uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); - address _ambassador = msg.sender; - uint256 remainingTokens = tokenContract.balanceOf(this); - if ( _remainingTokens < remainingTokens ) { - remainingTokens = _remainingTokens; - } - if ( remainingTokens < tokenAmount ) { - uint256 refund = (tokenAmount - remainingTokens).mul(tokenValue).div(oneToken); - tokenAmount = remainingTokens; - forward(msg.value-refund); - remainingTokens = 0; - _buyer.transfer(refund); - } else { - remainingTokens = remainingTokens.sub(tokenAmount); - forward(msg.value); - } - tokenContract.transfer(_buyer, tokenAmount); - emit Buy(_buyer, tokenAmount, _ambassador); - return tokenAmount; - } - function forward(uint256 _amount) internal { - uint256 advisorAmount = _amount.mul(advisorFee).div(10**3); - uint256 walletAmount = _amount - advisorAmount; - advisor.transfer(advisorAmount); - wallet.transfer(walletAmount); - } - event NewRC(address contr); - function addMeByRC() public { - require(tx.origin == owner); - rc[ msg.sender ] = true; - emit NewRC(msg.sender); - } - function setTime(uint256 _newStart, uint256 _newEnd) public onlyOwner { - if ( _newStart != 0 ) startTime = _newStart; - if ( _newEnd != 0 ) endTime = _newEnd; - } - function withdraw(address to, uint256 value) public onlyOwner { - to.transfer(value); - } - function withdrawTokens(address to, uint256 value) public onlyOwner returns (bool) { - return tokenContract.transfer(to, value); - } - function setTokenContract(address _tokenContract) public onlyOwner { - tokenContract = tokenInterface(_tokenContract); - } - function setWalletAddress(address _wallet) public onlyOwner { - wallet = _wallet; - } - function setAdvisorAddress(address _advisor) public onlyOwner { - advisor = _advisor; - } - function setAdvisorFee(uint256 _advisorFee) public onlyOwner { - advisorFee = _advisorFee; - } - function setRateContract(address _rateAddress) public onlyOwner { - rateContract = rateInterface(_rateAddress); - } - function claim(address _buyer, uint256 _amount) onlyRC public returns(bool) { - return tokenContract.transfer(_buyer, _amount); - } - function () public payable { - revert(); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2020-35962.sol b/data_full/CVE_clean/2020-35962.sol deleted file mode 100644 index c666c798..00000000 --- a/data_full/CVE_clean/2020-35962.sol +++ /dev/null @@ -1,540 +0,0 @@ -pragma solidity ^0.5.11; -contract ERC20 -{ - function totalSupply() - public - view - returns (uint); - function balanceOf( - address who - ) - public - view - returns (uint); - function allowance( - address owner, - address spender - ) - public - view - returns (uint); - function transfer( - address to, - uint value - ) - public - returns (bool); - function transferFrom( - address from, - address to, - uint value - ) - public - returns (bool); - function approve( - address spender, - uint value - ) - public - returns (bool); -} -library AddressUtil -{ - using AddressUtil for *; - function isContract( - address addr - ) - internal - view - returns (bool) - { - uint32 size; - assembly { size := extcodesize(addr) } - return (size > 0); - } - function toPayable( - address addr - ) - internal - pure - returns (address payable) - { - return address(uint160(addr)); - } - function sendETH( - address to, - uint amount, - uint gasLimit - ) - internal - returns (bool success) - { - if (amount == 0) { - return true; - } - address payable recipient = to.toPayable(); - (success, ) = recipient.call.value(amount).gas(gasLimit)(""); - } - function sendETHAndVerify( - address to, - uint amount, - uint gasLimit - ) - internal - returns (bool success) - { - success = to.sendETH(amount, gasLimit); - require(success, "TRANSFER_FAILURE"); - } -} -contract BurnableERC20 is ERC20 -{ - function burn( - uint value - ) - public - returns (bool); - function burnFrom( - address from, - uint value - ) - public - returns (bool); -} -contract Ownable -{ - address public owner; - event OwnershipTransferred( - address indexed previousOwner, - address indexed newOwner - ); - constructor() - public - { - owner = msg.sender; - } - modifier onlyOwner() - { - require(msg.sender == owner, "UNAUTHORIZED"); - _; - } - function transferOwnership( - address newOwner - ) - public - onlyOwner - { - require(newOwner != address(0), "ZERO_ADDRESS"); - emit OwnershipTransferred(owner, newOwner); - owner = newOwner; - } - function renounceOwnership() - public - onlyOwner - { - emit OwnershipTransferred(owner, address(0)); - owner = address(0); - } -} -contract Claimable is Ownable -{ - address public pendingOwner; - modifier onlyPendingOwner() { - require(msg.sender == pendingOwner, "UNAUTHORIZED"); - _; - } - function transferOwnership( - address newOwner - ) - public - onlyOwner - { - require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); - pendingOwner = newOwner; - } - function claimOwnership() - public - onlyPendingOwner - { - emit OwnershipTransferred(owner, pendingOwner); - owner = pendingOwner; - pendingOwner = address(0); - } -} -library ERC20SafeTransfer -{ - function safeTransferAndVerify( - address token, - address to, - uint value - ) - internal - { - safeTransferWithGasLimitAndVerify( - token, - to, - value, - gasleft() - ); - } - function safeTransfer( - address token, - address to, - uint value - ) - internal - returns (bool) - { - return safeTransferWithGasLimit( - token, - to, - value, - gasleft() - ); - } - function safeTransferWithGasLimitAndVerify( - address token, - address to, - uint value, - uint gasLimit - ) - internal - { - require( - safeTransferWithGasLimit(token, to, value, gasLimit), - "TRANSFER_FAILURE" - ); - } - function safeTransferWithGasLimit( - address token, - address to, - uint value, - uint gasLimit - ) - internal - returns (bool) - { - bytes memory callData = abi.encodeWithSelector( - bytes4(0xa9059cbb), - to, - value - ); - (bool success, ) = token.call.gas(gasLimit)(callData); - return checkReturnValue(success); - } - function safeTransferFromAndVerify( - address token, - address from, - address to, - uint value - ) - internal - { - safeTransferFromWithGasLimitAndVerify( - token, - from, - to, - value, - gasleft() - ); - } - function safeTransferFrom( - address token, - address from, - address to, - uint value - ) - internal - returns (bool) - { - return safeTransferFromWithGasLimit( - token, - from, - to, - value, - gasleft() - ); - } - function safeTransferFromWithGasLimitAndVerify( - address token, - address from, - address to, - uint value, - uint gasLimit - ) - internal - { - bool result = safeTransferFromWithGasLimit( - token, - from, - to, - value, - gasLimit - ); - require(result, "TRANSFER_FAILURE"); - } - function safeTransferFromWithGasLimit( - address token, - address from, - address to, - uint value, - uint gasLimit - ) - internal - returns (bool) - { - bytes memory callData = abi.encodeWithSelector( - bytes4(0x23b872dd), - from, - to, - value - ); - (bool success, ) = token.call.gas(gasLimit)(callData); - return checkReturnValue(success); - } - function checkReturnValue( - bool success - ) - internal - pure - returns (bool) - { - if (success) { - assembly { - switch returndatasize() - case 0 { - success := 1 - } - case 32 { - returndatacopy(0, 0, 32) - success := mload(0) - } - default { - success := 0 - } - } - } - return success; - } -} -library MathUint -{ - function mul( - uint a, - uint b - ) - internal - pure - returns (uint c) - { - c = a * b; - require(a == 0 || c / a == b, "MUL_OVERFLOW"); - } - function sub( - uint a, - uint b - ) - internal - pure - returns (uint) - { - require(b <= a, "SUB_UNDERFLOW"); - return a - b; - } - function add( - uint a, - uint b - ) - internal - pure - returns (uint c) - { - c = a + b; - require(c >= a, "ADD_OVERFLOW"); - } - function decodeFloat( - uint f - ) - internal - pure - returns (uint value) - { - uint numBitsMantissa = 23; - uint exponent = f >> numBitsMantissa; - uint mantissa = f & ((1 << numBitsMantissa) - 1); - value = mantissa * (10 ** exponent); - } -} -contract ReentrancyGuard -{ - uint private _guardValue; - modifier nonReentrant() - { - require(_guardValue == 0, "REENTRANCY"); - _guardValue = 1; - _; - _guardValue = 0; - } -} -contract IProtocolFeeVault -{ - uint public constant REWARD_PERCENTAGE = 70; - uint public constant DAO_PERDENTAGE = 20; - address public userStakingPoolAddress; - address public lrcAddress; - address public tokenSellerAddress; - address public daoAddress; - uint claimedReward; - uint claimedDAOFund; - uint claimedBurn; - event LRCClaimed(uint amount); - event DAOFunded(uint amountDAO, uint amountBurn); - event TokenSold(address token, uint amount); - event SettingsUpdated(uint time); - function updateSettings( - address _userStakingPoolAddress, - address _tokenSellerAddress, - address _daoAddress - ) - external; - function claimStakingReward(uint amount) external; - function fundDAO() external; - function sellTokenForLRC( - address token, - uint amount - ) - external; - function getProtocolFeeStats() - public - view - returns ( - uint accumulatedFees, - uint accumulatedBurn, - uint accumulatedDAOFund, - uint accumulatedReward, - uint remainingFees, - uint remainingBurn, - uint remainingDAOFund, - uint remainingReward - ); -} -contract ITokenSeller -{ - function sellToken( - address tokenS, - address tokenB - ) - external - payable - returns (bool success); -} -contract ProtocolFeeVault is Claimable, ReentrancyGuard, IProtocolFeeVault -{ - using AddressUtil for address; - using AddressUtil for address payable; - using ERC20SafeTransfer for address; - using MathUint for uint; - constructor(address _lrcAddress) - Claimable() - public - { - require(_lrcAddress != address(0), "ZERO_ADDRESS"); - lrcAddress = _lrcAddress; - } - function() external payable { } - function updateSettings( - address _userStakingPoolAddress, - address _tokenSellerAddress, - address _daoAddress - ) - external - nonReentrant - onlyOwner - { - require( - userStakingPoolAddress != _userStakingPoolAddress || - tokenSellerAddress != _tokenSellerAddress || - daoAddress != _daoAddress, - "SAME_ADDRESSES" - ); - userStakingPoolAddress = _userStakingPoolAddress; - tokenSellerAddress = _tokenSellerAddress; - daoAddress = _daoAddress; - emit SettingsUpdated(now); - } - function claimStakingReward( - uint amount - ) - external - nonReentrant - { - require(amount > 0, "ZERO_VALUE"); - require(msg.sender == userStakingPoolAddress, "UNAUTHORIZED"); - lrcAddress.safeTransferAndVerify(userStakingPoolAddress, amount); - claimedReward = claimedReward.add(amount); - emit LRCClaimed(amount); - } - function fundDAO() - external - nonReentrant - { - uint amountDAO; - uint amountBurn; - (, , , , , amountBurn, amountDAO, ) = getProtocolFeeStats(); - address recipient = daoAddress == address(0) ? owner : daoAddress; - if (amountDAO > 0) { - lrcAddress.safeTransferAndVerify(recipient, amountDAO); - } - if (amountBurn > 0) { - require(BurnableERC20(lrcAddress).burn(amountBurn), "BURN_FAILURE"); - } - claimedBurn = claimedBurn.add(amountBurn); - claimedDAOFund = claimedDAOFund.add(amountDAO); - emit DAOFunded(amountDAO, amountBurn); - } - function sellTokenForLRC( - address token, - uint amount - ) - external - nonReentrant - { - require(amount > 0, "ZERO_AMOUNT"); - require(token != lrcAddress, "PROHIBITED"); - address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress; - if (token == address(0)) { - recipient.sendETHAndVerify(amount, gasleft()); - } else { - token.safeTransferAndVerify(recipient, amount); - } - require( - tokenSellerAddress == address(0) || - ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress), - "SELL_FAILURE" - ); - emit TokenSold(token, amount); - } - function getProtocolFeeStats() - public - view - returns ( - uint accumulatedFees, - uint accumulatedBurn, - uint accumulatedDAOFund, - uint accumulatedReward, - uint remainingFees, - uint remainingBurn, - uint remainingDAOFund, - uint remainingReward - ) - { - remainingFees = ERC20(lrcAddress).balanceOf(address(this)); - accumulatedFees = remainingFees.add(claimedReward).add(claimedDAOFund).add(claimedBurn); - accumulatedReward = accumulatedFees.mul(REWARD_PERCENTAGE) / 100; - accumulatedDAOFund = accumulatedFees.mul(DAO_PERDENTAGE) / 100; - accumulatedBurn = accumulatedFees.sub(accumulatedReward).sub(accumulatedDAOFund); - remainingReward = accumulatedReward.sub(claimedReward); - remainingDAOFund = accumulatedDAOFund.sub(claimedDAOFund); - remainingBurn = accumulatedBurn.sub(claimedBurn); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-3004.sol b/data_full/CVE_clean/2021-3004.sol deleted file mode 100644 index 65868c1a..00000000 --- a/data_full/CVE_clean/2021-3004.sol +++ /dev/null @@ -1,400 +0,0 @@ -pragma solidity ^0.8.0; -interface IERC20 { - function totalSupply() external view returns (uint256); - function decimals() external view returns (uint256); - function balanceOf(address account) external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed owner, address indexed spender, uint256 value); -} -library Address { - function isContract(address account) internal view returns (bool) { - bytes32 codehash; - bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; - assembly { codehash := extcodehash(account) } - return (codehash != 0x0 && codehash != accountHash); - } -} -library SafeERC20 { - using Address for address; - function safeTransfer(IERC20 token, address to, uint value) internal { - callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); - } - function safeTransferFrom(IERC20 token, address from, address to, uint value) internal { - callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); - } - function safeApprove(IERC20 token, address spender, uint value) internal { - require((value == 0) || (token.allowance(address(this), spender) == 0), - "SafeERC20: approve from non-zero to non-zero allowance" - ); - callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); - } - function callOptionalReturn(IERC20 token, bytes memory data) private { - require(address(token).isContract(), "SafeERC20: call to non-contract"); - (bool success, bytes memory returndata) = address(token).call(data); - require(success, "SafeERC20: low-level call failed"); - if (returndata.length > 0) { - require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); - } - } -} -interface Oracle { - function getPriceUSD(address reserve) external view returns (uint); -} -interface ISushiswapV2Factory { - event PairCreated(address indexed token0, address indexed token1, address pair, uint); - function feeTo() external view returns (address); - function feeToSetter() external view returns (address); - function getPair(address tokenA, address tokenB) external view returns (address pair); - function allPairs(uint) external view returns (address pair); - function allPairsLength() external view returns (uint); - function createPair(address tokenA, address tokenB) external returns (address pair); - function setFeeTo(address) external; - function setFeeToSetter(address) external; -} -interface ISushiswapV2Pair { - event Approval(address indexed owner, address indexed spender, uint value); - event Transfer(address indexed from, address indexed to, uint value); - function name() external pure returns (string memory); - function symbol() external pure returns (string memory); - function decimals() external pure returns (uint8); - function totalSupply() external view returns (uint); - function balanceOf(address owner) external view returns (uint); - function allowance(address owner, address spender) external view returns (uint); - function approve(address spender, uint value) external returns (bool); - function transfer(address to, uint value) external returns (bool); - function transferFrom(address from, address to, uint value) external returns (bool); - function DOMAIN_SEPARATOR() external view returns (bytes32); - function PERMIT_TYPEHASH() external pure returns (bytes32); - function nonces(address owner) external view returns (uint); - function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; - event Mint(address indexed sender, uint amount0, uint amount1); - event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); - event Swap( - address indexed sender, - uint amount0In, - uint amount1In, - uint amount0Out, - uint amount1Out, - address indexed to - ); - event Sync(uint112 reserve0, uint112 reserve1); - function MINIMUM_LIQUIDITY() external pure returns (uint); - function factory() external view returns (address); - function token0() external view returns (address); - function token1() external view returns (address); - function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); - function price0CumulativeLast() external view returns (uint); - function price1CumulativeLast() external view returns (uint); - function kLast() external view returns (uint); - function mint(address to) external returns (uint liquidity); - function burn(address to) external returns (uint amount0, uint amount1); - function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; - function skim(address to) external; - function sync() external; - function initialize(address, address) external; -} -abstract contract ReentrancyGuard { - uint256 private constant _NOT_ENTERED = 1; - uint256 private constant _ENTERED = 2; - uint256 private _status; - constructor () { - _status = _NOT_ENTERED; - } - modifier nonReentrant() { - require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); - _status = _ENTERED; - _; - _status = _NOT_ENTERED; - } -} -library SushiswapV2Library { - function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { - require(tokenA != tokenB, 'SushiswapV2Library: IDENTICAL_ADDRESSES'); - (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); - require(token0 != address(0), 'SushiswapV2Library: ZERO_ADDRESS'); - } - function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { - (address token0, address token1) = sortTokens(tokenA, tokenB); - pair = address(uint160(uint(keccak256(abi.encodePacked( - hex'ff', - factory, - keccak256(abi.encodePacked(token0, token1)), - hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' - ))))); - } - function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { - (address token0,) = sortTokens(tokenA, tokenB); - (uint reserve0, uint reserve1,) = ISushiswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves(); - (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); - } - function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { - require(amountA > 0, 'SushiswapV2Library: INSUFFICIENT_AMOUNT'); - require(reserveA > 0 && reserveB > 0, 'SushiswapV2Library: INSUFFICIENT_LIQUIDITY'); - amountB = amountA * reserveB / reserveA; - } -} -library Math { - function max(uint256 a, uint256 b) internal pure returns (uint256) { - return a >= b ? a : b; - } - function min(uint256 a, uint256 b) internal pure returns (uint256) { - return a < b ? a : b; - } - function average(uint256 a, uint256 b) internal pure returns (uint256) { - return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); - } -} -contract StableYieldCredit is ReentrancyGuard { - using SafeERC20 for IERC20; - string public constant name = "Stable Yield Credit"; - string public constant symbol = "yCREDIT"; - uint8 public constant decimals = 8; - uint public totalSupply = 0; - uint public stakedSupply = 0; - mapping(address => mapping (address => uint)) internal allowances; - mapping(address => uint) internal balances; - mapping(address => uint) public stakes; - bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)"); - bytes32 public immutable DOMAINSEPARATOR; - bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)"); - mapping (address => uint) public nonces; - function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { - require(n < 2**32, errorMessage); - return uint32(n); - } - event Transfer(address indexed from, address indexed to, uint amount); - event Staked(address indexed from, uint amount); - event Unstaked(address indexed from, uint amount); - event Earned(address indexed from, uint amount); - event Fees(uint amount); - event Approval(address indexed owner, address indexed spender, uint amount); - Oracle public constant LINK = Oracle(0x271bf4568fb737cc2e6277e9B1EE0034098cDA2a); - ISushiswapV2Factory public constant FACTORY = ISushiswapV2Factory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac); - mapping (address => mapping(address => uint)) public collateral; - mapping (address => mapping(address => uint)) public collateralCredit; - address[] private _markets; - mapping (address => bool) pairs; - uint public rewardRate = 0; - uint public periodFinish = 0; - uint public DURATION = 7 days; - uint public lastUpdateTime; - uint public rewardPerTokenStored; - mapping(address => uint) public userRewardPerTokenPaid; - mapping(address => uint) public rewards; - event Deposit(address indexed creditor, address indexed collateral, uint creditOut, uint amountIn, uint creditMinted); - event Withdraw(address indexed creditor, address indexed collateral, uint creditIn, uint creditOut, uint amountOut); - constructor () { - DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this))); - } - uint public FEE = 50; - uint public BASE = 10000; - function lastTimeRewardApplicable() public view returns (uint) { - return Math.min(block.timestamp, periodFinish); - } - function rewardPerToken() public view returns (uint) { - if (stakedSupply == 0) { - return rewardPerTokenStored; - } - return - rewardPerTokenStored + - ((lastTimeRewardApplicable() - - lastUpdateTime) * - rewardRate * 1e18 / stakedSupply); - } - function earned(address account) public view returns (uint) { - return (stakes[account] * (rewardPerToken() - userRewardPerTokenPaid[account]) / 1e18) + rewards[account]; - } - function getRewardForDuration() external view returns (uint) { - return rewardRate * DURATION; - } - modifier updateReward(address account) { - rewardPerTokenStored = rewardPerToken(); - lastUpdateTime = lastTimeRewardApplicable(); - if (account != address(0)) { - rewards[account] = earned(account); - userRewardPerTokenPaid[account] = rewardPerTokenStored; - } - _; - } - function stake(uint256 amount) external nonReentrant updateReward(msg.sender) { - require(amount > 0, "Cannot stake 0"); - stakedSupply += amount; - stakes[msg.sender] += amount; - _transferTokens(msg.sender, address(this), amount); - emit Staked(msg.sender, amount); - } - function unstake(uint amount) public nonReentrant updateReward(msg.sender) { - require(amount > 0, "Cannot withdraw 0"); - stakedSupply -= amount; - stakes[msg.sender] -= amount; - _transferTokens(address(this), msg.sender, amount); - emit Unstaked(msg.sender, amount); - } - function getReward() public nonReentrant updateReward(msg.sender) { - uint256 reward = rewards[msg.sender]; - if (reward > 0) { - rewards[msg.sender] = 0; - _transferTokens(address(this), msg.sender, reward); - emit Earned(msg.sender, reward); - } - } - function exit() external { - unstake(stakes[msg.sender]); - getReward(); - } - function notifyFeeAmount(uint reward) internal updateReward(address(0)) { - if (block.timestamp >= periodFinish) { - rewardRate = reward / DURATION; - } else { - uint remaining = periodFinish - block.timestamp; - uint leftover = remaining * rewardRate; - rewardRate = (reward + leftover) / DURATION; - } - uint balance = balances[address(this)]; - require(rewardRate <= balance / DURATION, "Provided reward too high"); - lastUpdateTime = block.timestamp; - periodFinish = block.timestamp + DURATION; - emit Fees(reward); - } - function markets() external view returns (address[] memory) { - return _markets; - } - function _mint(address dst, uint amount) internal { - totalSupply += amount; - balances[dst] += amount; - emit Transfer(address(0), dst, amount); - } - function _burn(address dst, uint amount) internal { - totalSupply -= amount; - balances[dst] -= amount; - emit Transfer(dst, address(0), amount); - } - function depositAll(IERC20 token) external { - _deposit(token, token.balanceOf(msg.sender)); - } - function deposit(IERC20 token, uint amount) external { - _deposit(token, amount); - } - function _addLiquidity( - address tokenA, - address tokenB, - uint amountADesired, - uint amountBDesired - ) internal virtual returns (address pair, uint amountA, uint amountB) { - pair = FACTORY.getPair(tokenA, tokenB); - if (pair == address(0)) { - pair = FACTORY.createPair(tokenA, tokenB); - pairs[pair] = true; - _markets.push(tokenA); - } else if (!pairs[pair]) { - pairs[pair] = true; - _markets.push(tokenA); - } - (uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB); - if (reserveA == 0 && reserveB == 0) { - (amountA, amountB) = (amountADesired, amountBDesired); - } else { - uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB); - if (amountBOptimal <= amountBDesired) { - (amountA, amountB) = (amountADesired, amountBOptimal); - } else { - uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA); - assert(amountAOptimal <= amountADesired); - (amountA, amountB) = (amountAOptimal, amountBDesired); - } - } - } - function _deposit(IERC20 token, uint amount) internal { - uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals(); - require(_value > 0, "!value"); - (address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value); - token.safeTransferFrom(msg.sender, _pair, amountA); - _mint(_pair, _value); - uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this)); - collateral[msg.sender][address(token)] += _liquidity; - collateralCredit[msg.sender][address(token)] += _value; - uint _fee = _value * FEE / BASE; - _mint(msg.sender, _value - _fee); - _mint(address(this), _fee); - notifyFeeAmount(_fee); - emit Deposit(msg.sender, address(token), _value, amount, _value); - } - function withdrawAll(IERC20 token) external { - _withdraw(token, IERC20(address(this)).balanceOf(msg.sender)); - } - function withdraw(IERC20 token, uint amount) external { - _withdraw(token, amount); - } - function _withdraw(IERC20 token, uint amount) internal { - uint _credit = collateralCredit[msg.sender][address(token)]; - uint _collateral = collateral[msg.sender][address(token)]; - if (_credit < amount) { - amount = _credit; - } - uint _burned = _collateral * amount / _credit; - address _pair = FACTORY.getPair(address(token), address(this)); - IERC20(_pair).safeTransfer(_pair, _burned); - (uint _amount0, uint _amount1) = ISushiswapV2Pair(_pair).burn(msg.sender); - (address _token0,) = SushiswapV2Library.sortTokens(address(token), address(this)); - (uint _amountA, uint _amountB) = address(token) == _token0 ? (_amount0, _amount1) : (_amount1, _amount0); - collateralCredit[msg.sender][address(token)] -= amount; - collateral[msg.sender][address(token)] -= _burned; - _burn(msg.sender, _amountB+amount); - emit Withdraw(msg.sender, address(token), amount, _amountB, _amountA); - } - function allowance(address account, address spender) external view returns (uint) { - return allowances[account][spender]; - } - function approve(address spender, uint amount) external returns (bool) { - allowances[msg.sender][spender] = amount; - emit Approval(msg.sender, spender, amount); - return true; - } - function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external { - bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline)); - bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash)); - address signatory = ecrecover(digest, v, r, s); - require(signatory != address(0), "permit: signature"); - require(signatory == owner, "permit: unauthorized"); - require(block.timestamp <= deadline, "permit: expired"); - allowances[owner][spender] = amount; - emit Approval(owner, spender, amount); - } - function balanceOf(address account) external view returns (uint) { - return balances[account]; - } - function transfer(address dst, uint amount) external returns (bool) { - _transferTokens(msg.sender, dst, amount); - return true; - } - function transferFrom(address src, address dst, uint amount) external returns (bool) { - address spender = msg.sender; - uint spenderAllowance = allowances[src][spender]; - if (spender != src && spenderAllowance != type(uint).max) { - uint newAllowance = spenderAllowance - amount; - allowances[src][spender] = newAllowance; - emit Approval(src, spender, newAllowance); - } - _transferTokens(src, dst, amount); - return true; - } - function _transferTokens(address src, address dst, uint amount) internal { - balances[src] -= amount; - balances[dst] += amount; - emit Transfer(src, dst, amount); - if (pairs[src]) { - uint _fee = amount * FEE / BASE; - _transferTokens(dst, address(this), _fee); - notifyFeeAmount(_fee); - } - } - function _getChainId() internal view returns (uint) { - uint chainId; - assembly { chainId := chainid() } - return chainId; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-3006.sol b/data_full/CVE_clean/2021-3006.sol deleted file mode 100644 index c666c798..00000000 --- a/data_full/CVE_clean/2021-3006.sol +++ /dev/null @@ -1,540 +0,0 @@ -pragma solidity ^0.5.11; -contract ERC20 -{ - function totalSupply() - public - view - returns (uint); - function balanceOf( - address who - ) - public - view - returns (uint); - function allowance( - address owner, - address spender - ) - public - view - returns (uint); - function transfer( - address to, - uint value - ) - public - returns (bool); - function transferFrom( - address from, - address to, - uint value - ) - public - returns (bool); - function approve( - address spender, - uint value - ) - public - returns (bool); -} -library AddressUtil -{ - using AddressUtil for *; - function isContract( - address addr - ) - internal - view - returns (bool) - { - uint32 size; - assembly { size := extcodesize(addr) } - return (size > 0); - } - function toPayable( - address addr - ) - internal - pure - returns (address payable) - { - return address(uint160(addr)); - } - function sendETH( - address to, - uint amount, - uint gasLimit - ) - internal - returns (bool success) - { - if (amount == 0) { - return true; - } - address payable recipient = to.toPayable(); - (success, ) = recipient.call.value(amount).gas(gasLimit)(""); - } - function sendETHAndVerify( - address to, - uint amount, - uint gasLimit - ) - internal - returns (bool success) - { - success = to.sendETH(amount, gasLimit); - require(success, "TRANSFER_FAILURE"); - } -} -contract BurnableERC20 is ERC20 -{ - function burn( - uint value - ) - public - returns (bool); - function burnFrom( - address from, - uint value - ) - public - returns (bool); -} -contract Ownable -{ - address public owner; - event OwnershipTransferred( - address indexed previousOwner, - address indexed newOwner - ); - constructor() - public - { - owner = msg.sender; - } - modifier onlyOwner() - { - require(msg.sender == owner, "UNAUTHORIZED"); - _; - } - function transferOwnership( - address newOwner - ) - public - onlyOwner - { - require(newOwner != address(0), "ZERO_ADDRESS"); - emit OwnershipTransferred(owner, newOwner); - owner = newOwner; - } - function renounceOwnership() - public - onlyOwner - { - emit OwnershipTransferred(owner, address(0)); - owner = address(0); - } -} -contract Claimable is Ownable -{ - address public pendingOwner; - modifier onlyPendingOwner() { - require(msg.sender == pendingOwner, "UNAUTHORIZED"); - _; - } - function transferOwnership( - address newOwner - ) - public - onlyOwner - { - require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); - pendingOwner = newOwner; - } - function claimOwnership() - public - onlyPendingOwner - { - emit OwnershipTransferred(owner, pendingOwner); - owner = pendingOwner; - pendingOwner = address(0); - } -} -library ERC20SafeTransfer -{ - function safeTransferAndVerify( - address token, - address to, - uint value - ) - internal - { - safeTransferWithGasLimitAndVerify( - token, - to, - value, - gasleft() - ); - } - function safeTransfer( - address token, - address to, - uint value - ) - internal - returns (bool) - { - return safeTransferWithGasLimit( - token, - to, - value, - gasleft() - ); - } - function safeTransferWithGasLimitAndVerify( - address token, - address to, - uint value, - uint gasLimit - ) - internal - { - require( - safeTransferWithGasLimit(token, to, value, gasLimit), - "TRANSFER_FAILURE" - ); - } - function safeTransferWithGasLimit( - address token, - address to, - uint value, - uint gasLimit - ) - internal - returns (bool) - { - bytes memory callData = abi.encodeWithSelector( - bytes4(0xa9059cbb), - to, - value - ); - (bool success, ) = token.call.gas(gasLimit)(callData); - return checkReturnValue(success); - } - function safeTransferFromAndVerify( - address token, - address from, - address to, - uint value - ) - internal - { - safeTransferFromWithGasLimitAndVerify( - token, - from, - to, - value, - gasleft() - ); - } - function safeTransferFrom( - address token, - address from, - address to, - uint value - ) - internal - returns (bool) - { - return safeTransferFromWithGasLimit( - token, - from, - to, - value, - gasleft() - ); - } - function safeTransferFromWithGasLimitAndVerify( - address token, - address from, - address to, - uint value, - uint gasLimit - ) - internal - { - bool result = safeTransferFromWithGasLimit( - token, - from, - to, - value, - gasLimit - ); - require(result, "TRANSFER_FAILURE"); - } - function safeTransferFromWithGasLimit( - address token, - address from, - address to, - uint value, - uint gasLimit - ) - internal - returns (bool) - { - bytes memory callData = abi.encodeWithSelector( - bytes4(0x23b872dd), - from, - to, - value - ); - (bool success, ) = token.call.gas(gasLimit)(callData); - return checkReturnValue(success); - } - function checkReturnValue( - bool success - ) - internal - pure - returns (bool) - { - if (success) { - assembly { - switch returndatasize() - case 0 { - success := 1 - } - case 32 { - returndatacopy(0, 0, 32) - success := mload(0) - } - default { - success := 0 - } - } - } - return success; - } -} -library MathUint -{ - function mul( - uint a, - uint b - ) - internal - pure - returns (uint c) - { - c = a * b; - require(a == 0 || c / a == b, "MUL_OVERFLOW"); - } - function sub( - uint a, - uint b - ) - internal - pure - returns (uint) - { - require(b <= a, "SUB_UNDERFLOW"); - return a - b; - } - function add( - uint a, - uint b - ) - internal - pure - returns (uint c) - { - c = a + b; - require(c >= a, "ADD_OVERFLOW"); - } - function decodeFloat( - uint f - ) - internal - pure - returns (uint value) - { - uint numBitsMantissa = 23; - uint exponent = f >> numBitsMantissa; - uint mantissa = f & ((1 << numBitsMantissa) - 1); - value = mantissa * (10 ** exponent); - } -} -contract ReentrancyGuard -{ - uint private _guardValue; - modifier nonReentrant() - { - require(_guardValue == 0, "REENTRANCY"); - _guardValue = 1; - _; - _guardValue = 0; - } -} -contract IProtocolFeeVault -{ - uint public constant REWARD_PERCENTAGE = 70; - uint public constant DAO_PERDENTAGE = 20; - address public userStakingPoolAddress; - address public lrcAddress; - address public tokenSellerAddress; - address public daoAddress; - uint claimedReward; - uint claimedDAOFund; - uint claimedBurn; - event LRCClaimed(uint amount); - event DAOFunded(uint amountDAO, uint amountBurn); - event TokenSold(address token, uint amount); - event SettingsUpdated(uint time); - function updateSettings( - address _userStakingPoolAddress, - address _tokenSellerAddress, - address _daoAddress - ) - external; - function claimStakingReward(uint amount) external; - function fundDAO() external; - function sellTokenForLRC( - address token, - uint amount - ) - external; - function getProtocolFeeStats() - public - view - returns ( - uint accumulatedFees, - uint accumulatedBurn, - uint accumulatedDAOFund, - uint accumulatedReward, - uint remainingFees, - uint remainingBurn, - uint remainingDAOFund, - uint remainingReward - ); -} -contract ITokenSeller -{ - function sellToken( - address tokenS, - address tokenB - ) - external - payable - returns (bool success); -} -contract ProtocolFeeVault is Claimable, ReentrancyGuard, IProtocolFeeVault -{ - using AddressUtil for address; - using AddressUtil for address payable; - using ERC20SafeTransfer for address; - using MathUint for uint; - constructor(address _lrcAddress) - Claimable() - public - { - require(_lrcAddress != address(0), "ZERO_ADDRESS"); - lrcAddress = _lrcAddress; - } - function() external payable { } - function updateSettings( - address _userStakingPoolAddress, - address _tokenSellerAddress, - address _daoAddress - ) - external - nonReentrant - onlyOwner - { - require( - userStakingPoolAddress != _userStakingPoolAddress || - tokenSellerAddress != _tokenSellerAddress || - daoAddress != _daoAddress, - "SAME_ADDRESSES" - ); - userStakingPoolAddress = _userStakingPoolAddress; - tokenSellerAddress = _tokenSellerAddress; - daoAddress = _daoAddress; - emit SettingsUpdated(now); - } - function claimStakingReward( - uint amount - ) - external - nonReentrant - { - require(amount > 0, "ZERO_VALUE"); - require(msg.sender == userStakingPoolAddress, "UNAUTHORIZED"); - lrcAddress.safeTransferAndVerify(userStakingPoolAddress, amount); - claimedReward = claimedReward.add(amount); - emit LRCClaimed(amount); - } - function fundDAO() - external - nonReentrant - { - uint amountDAO; - uint amountBurn; - (, , , , , amountBurn, amountDAO, ) = getProtocolFeeStats(); - address recipient = daoAddress == address(0) ? owner : daoAddress; - if (amountDAO > 0) { - lrcAddress.safeTransferAndVerify(recipient, amountDAO); - } - if (amountBurn > 0) { - require(BurnableERC20(lrcAddress).burn(amountBurn), "BURN_FAILURE"); - } - claimedBurn = claimedBurn.add(amountBurn); - claimedDAOFund = claimedDAOFund.add(amountDAO); - emit DAOFunded(amountDAO, amountBurn); - } - function sellTokenForLRC( - address token, - uint amount - ) - external - nonReentrant - { - require(amount > 0, "ZERO_AMOUNT"); - require(token != lrcAddress, "PROHIBITED"); - address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress; - if (token == address(0)) { - recipient.sendETHAndVerify(amount, gasleft()); - } else { - token.safeTransferAndVerify(recipient, amount); - } - require( - tokenSellerAddress == address(0) || - ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress), - "SELL_FAILURE" - ); - emit TokenSold(token, amount); - } - function getProtocolFeeStats() - public - view - returns ( - uint accumulatedFees, - uint accumulatedBurn, - uint accumulatedDAOFund, - uint accumulatedReward, - uint remainingFees, - uint remainingBurn, - uint remainingDAOFund, - uint remainingReward - ) - { - remainingFees = ERC20(lrcAddress).balanceOf(address(this)); - accumulatedFees = remainingFees.add(claimedReward).add(claimedDAOFund).add(claimedBurn); - accumulatedReward = accumulatedFees.mul(REWARD_PERCENTAGE) / 100; - accumulatedDAOFund = accumulatedFees.mul(DAO_PERDENTAGE) / 100; - accumulatedBurn = accumulatedFees.sub(accumulatedReward).sub(accumulatedDAOFund); - remainingReward = accumulatedReward.sub(claimedReward); - remainingDAOFund = accumulatedDAOFund.sub(claimedDAOFund); - remainingBurn = accumulatedBurn.sub(claimedBurn); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-33403.sol b/data_full/CVE_clean/2021-33403.sol deleted file mode 100644 index 96c0832f..00000000 --- a/data_full/CVE_clean/2021-33403.sol +++ /dev/null @@ -1,196 +0,0 @@ -pragma solidity ^0.4.8; -contract MigrationAgent { - function migrateFrom(address _from, uint256 _value); -} -contract ERC20Interface { - function totalSupply() constant returns (uint256 totalSupply); - function balanceOf(address _owner) constant returns (uint256 balance); - function transfer(address _to, uint256 _value) returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) returns (bool success); - function approve(address _spender, uint256 _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint256 remaining); - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract BlocklancerToken is ERC20Interface { - string public constant name = "Lancer Token"; - string public constant symbol = "LNC"; - uint8 public constant decimals = 18; - mapping(address => mapping (address => uint256)) allowed; - uint public fundingStart; - bool public funding = true; - bool allowTransfer=false; - address public master; - uint256 totalTokens; - uint exchangeRate=20000; - uint EarlyInvestorExchangeRate=25000; - bool startRefund=false; - mapping (address => uint256) balances; - mapping (address => bool) initialInvestor; - mapping (address => uint) lastTransferred; - mapping (address => uint256) balancesEther; - address public migrationAgent; - uint256 public totalMigrated; - event Migrate(address indexed _from, address indexed _to, uint256 _value); - event Refund(address indexed _from, uint256 _value); - uint totalParticipants; - function BlocklancerToken() { - master = msg.sender; - fundingStart = 1501977600; - initialInvestor[0x32be343b94f860124dc4fee278fdcbd38c102d88]=true;initialInvestor[0x3106fe2245b376888d684bdcd83dfa9641a869ff]=true;initialInvestor[0x7f7c64c7b7f5a611e739b4da26659bf741414917]=true;initialInvestor[0x4b3b8e0c2c221e916a48e2e5f3718ae2bce51894]=true;initialInvestor[0x507c8fea802a0772eb5e001a8fba38f36fb9b66b]=true;initialInvestor[0x3c35b66dbaf1bc716f41759c7513a7af2f727ce0]=true;initialInvestor[0x7da3ff5dc152352dcffaf08d528e78f1efd4e9d1]=true;initialInvestor[0x404b688a1d9eb850be2527c5dd341561cfa84e11]=true;initialInvestor[0x80ad7165f29f97896a0b5758193879de34fd9712]=true;initialInvestor[0xd70837a61a322f69ba3742111216a7b97d61d3a7]=true;initialInvestor[0x5eefc4f295045ea11827f515c10d50829580cd31]=true;initialInvestor[0xc8c154d54e8d66073b23361cc74cf5d13efc4dc9]=true;initialInvestor[0x00b279438dff4bb6f37038b12704e31967955cb0]=true;initialInvestor[0xfff78f0db7995c7f2299d127d332aef95bc3e7b7]=true;initialInvestor[0xae631a37ad50bf03e8028d0ae8ba041c70ac4c70]=true;initialInvestor[0x4effca51ba840ae9563f5ac1aa794d1e5d3a3806]=true;initialInvestor[0x315a233620b8536d37a92d588aaf5eb050b50d84]=true;initialInvestor[0x1ebf9e3470f303f6a6ac43347e41877b0a5aaa39]=true;initialInvestor[0xbf022480bda3f6c839cd443397761d5e83f3c02b]=true;initialInvestor[0xe727ea5340256a5236287ee3074eea34d8483457]=true;initialInvestor[0x45ecfeea42fc525c0b29313d3de9089488ef71dc]=true;initialInvestor[0xe59e4aac45862796cb52434967cf72ea46474ff3]=true;initialInvestor[0x7c367c14a322404f9e332b68d7d661b46a5c93ea]=true;initialInvestor[0x08bea4ccc9c45e506d5bc5e638acaa13fa3e801c]=true;initialInvestor[0x5dfb4a015eb0c3477a99ba88b2ac60459c879674]=true;initialInvestor[0x771a2137708ca7e07e7b7c55e5ea666e88d7c0c8]=true;initialInvestor[0xcc8ab06eb5a14855fc8b90abcb6be2f34ee5cea1]=true;initialInvestor[0x0764d446d0701a9b52382f8984b9d270d266e02c]=true;initialInvestor[0x2d90b415a38e2e19cdd02ff3ad81a97af7cbf672]=true;initialInvestor[0x0d4266de516944a49c8109a4397d1fcf06fb7ed0]=true;initialInvestor[0x7a5159617df20008b4dbe06d645a1b0305406794]=true;initialInvestor[0xaf9e23965c09ebf5d313c669020b0e1757cbb92c]=true;initialInvestor[0x33d94224754c122baa1ebaf455d16a9c82f69c98]=true;initialInvestor[0x267be1c1d684f78cb4f6a176c4911b741e4ffdc0]=true;initialInvestor[0xf6ac7c81ca099e34421b7eff7c9e80c8f56b74ae]=true;initialInvestor[0xd85faf59e73225ef386b46a1b17c493019b23e1e]=true;initialInvestor[0x3833f8dbdbd6bdcb6a883ff209b869148965b364]=true;initialInvestor[0x7ed1e469fcb3ee19c0366d829e291451be638e59]=true;initialInvestor[0x6c1ddafafd55a53f80cb7f4c8c8f9a9f13f61d70]=true;initialInvestor[0x94ef531595ffe510f8dc92e0e07a987f57784338]=true;initialInvestor[0xcc54e4e2f425cc4e207344f9e0619c1e40f42f26]=true;initialInvestor[0x70ee7bfc1aeac50349c29475a11ed4c57961b387]=true;initialInvestor[0x89be0bd8b6007101c7da7170a6461580994221d0]=true;initialInvestor[0xa7802ba51ba87556263d84cfc235759b214ccf35]=true;initialInvestor[0xb6a34bd460f02241e80e031023ec20ce6fc310ae]=true;initialInvestor[0x07004b458b56fb152c06ad81fe1be30c8a8b2ea1]=true;initialInvestor[0xb6da110659ef762a381cf2d6f601eb19b5f5d51e]=true;initialInvestor[0x20abf65634219512c6c98a64614c43220ca2085b]=true;initialInvestor[0x3afd1483693fe606c0e58f580bd08ae9aba092fd]=true;initialInvestor[0x61e120b9ca6559961982d9bd1b1dbea7485b84d1]=true;initialInvestor[0x481525718f1536ca2d739aa7e68b94b5e1d5d2c2]=true;initialInvestor[0x8e129a434cde6f52838fad2d30d8b08f744abf48]=true;initialInvestor[0x13df035952316f5fb663c262064ee39e44aa6b43]=true;initialInvestor[0x03c6c82a1d6d13b2f92ed63a10b1b791ffaa1e02]=true;initialInvestor[0xb079a72c627d0a34b880aee0504b901cbce64568]=true;initialInvestor[0xbf27721ca05c983c902df12492620ab2a8b9db91]=true;initialInvestor[0x4ced2b7d27ac74b0ecb2440d9857ba6c6407149f]=true;initialInvestor[0x330c63a5b737b5542be108a74b3fef6272619585]=true;initialInvestor[0x266dccd07a275a6e72b6bc549f7c2ce9e082f13f]=true;initialInvestor[0xf4280bf77a043568e40da2b8068b11243082c944]=true;initialInvestor[0x67d2f0e2d642a87300781df25c45b00bccaf6983]=true;initialInvestor[0x9f658a6628864e94f9a1c53ba519f0ae37a8b4a5]=true;initialInvestor[0x498d256ee53d4d05269cfa1a80c3214e525076ca]=true;initialInvestor[0xa1beac79dda14bce1ee698fdee47e2f7f2fd1f0d]=true;initialInvestor[0xfeb063bd508b82043d6b4d5c51e1e42b44f39b33]=true;initialInvestor[0xfeb7a283e1dbf2d5d8e9ba64ab5e607a41213561]=true;initialInvestor[0xabedb3d632fddccd4e95957be4ee0daffbe6acdd]=true;initialInvestor[0x4d8a7cb44d317113c82f25a0174a637a8f012ebb]=true;initialInvestor[0xe922c94161d45bdd31433b3c7b912ad214d399ce]=true;initialInvestor[0x11f9ad6eb7e9e98349b8397c836c0e3e88455b0a]=true;initialInvestor[0xfc28b52160639167fa59f30232bd8d43fab681e6]=true;initialInvestor[0xaf8a6c54fc8fa59cfcbc631e56b3d5b22fa42b75]=true;initialInvestor[0xd3c0ebb99a5616f3647f16c2efb40b133b5b1e1c]=true;initialInvestor[0x877341abeac8f44ac69ba7c99b1d5d31ce7a11d7]=true;initialInvestor[0xb22f376f70f34c906a88a91f6999a0bd1a0f3c3d]=true;initialInvestor[0x2c99db3838d6af157c8d671291d560a013c6c01e]=true;initialInvestor[0xd0f38af6984f3f847f7f2fcd6ea27aa878257059]=true;initialInvestor[0x2a5da89176d5316782d7f1c9db74d209679ad9ce]=true;initialInvestor[0xc88eea647a570738e69ad3dd8975577df720318d]=true;initialInvestor[0xb32b18dfea9072047a368ec056a464b73618345a]=true;initialInvestor[0x945b9a00bffb201a5602ee661f2a4cc6e5285ca6]=true;initialInvestor[0x86957ac9a15f114c08296523569511c22e471266]=true;initialInvestor[0x007bfe6994536ec9e89505c7de8e9eb748d3cb27]=true;initialInvestor[0x6ad0f0f578115b6fafa73df45e9f1e9056b84459]=true;initialInvestor[0x621663b4b6580b70b74afaf989c707d533bbec91]=true;initialInvestor[0xdc86c0632e88de345fc2ac01608c63f2ed99605a]=true;initialInvestor[0x3d83bb077b2557ef5f361bf1a9e68d093d919b28]=true;initialInvestor[0x56307b37377f75f397d4936cf507baf0f4943ea5]=true;initialInvestor[0x555cbe849bf5e01db195a81ecec1e65329fff643]=true;initialInvestor[0x7398a2edb928a2e179f62bfb795f292254f6850e]=true;initialInvestor[0x30382b132f30c175bee2858353f3a2dd0d074c3a]=true;initialInvestor[0x5baeac0a0417a05733884852aa068b706967e790]=true;initialInvestor[0xcb12b8a675e652296a8134e70f128521e633b327]=true;initialInvestor[0xaa8c03e04b121511858d88be7a1b2f5a2d70f6ac]=true;initialInvestor[0x77529c0ea5381262db964da3d5f6e2cc92e9b48b]=true;initialInvestor[0x59e5fe8a9637702c6d597c5f1c4ebe3fba747371]=true;initialInvestor[0x296fe436ecc0ea6b7a195ded26451e77e1335108]=true;initialInvestor[0x41bacae05437a3fe126933e57002ae3f129aa079]=true;initialInvestor[0x6cd5b9b60d2bcf81af8e6ef5d750dc9a8f18bf45]=true; - } - function getAmountofTotalParticipants() constant returns (uint){ - return totalParticipants; - } - function transfer(address _to, uint256 _value) returns (bool success) { - if(funding) throw; - if(!allowTransfer)throw; - var senderBalance = balances[msg.sender]; - if (senderBalance >= _value && _value > 0) { - senderBalance -= _value; - balances[msg.sender] = senderBalance; - balances[_to] += _value; - lastTransferred[msg.sender]=block.timestamp; - Transfer(msg.sender, _to, _value); - return true; - } - return false; - } - function totalSupply() constant returns (uint256 totalSupply) { - return totalTokens; - } - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function EtherBalanceOf(address _owner) constant returns (uint256) { - return balancesEther[_owner]; - } - function isInitialInvestor(address _owner) constant returns (bool) { - return initialInvestor[_owner]; - } - function TimeLeftBeforeCrowdsale() external constant returns (uint256) { - if(fundingStart>block.timestamp) - return fundingStart-block.timestamp; - else - return 0; - } - function migrate(uint256 _value) external { - if(funding) throw; - if(migrationAgent == 0) throw; - if(_value == 0) throw; - if(_value > balances[msg.sender]) throw; - balances[msg.sender] -= _value; - totalTokens -= _value; - totalMigrated += _value; - MigrationAgent(migrationAgent).migrateFrom(msg.sender, _value); - Migrate(msg.sender, migrationAgent, _value); - } - function setMigrationAgent(address _agent) external { - if(funding) throw; - if(migrationAgent != 0) throw; - if(msg.sender != master) throw; - migrationAgent = _agent; - } - function setExchangeRate(uint _exchangeRate){ - if(msg.sender!=master)throw; - exchangeRate=_exchangeRate; - } - function setICORunning(bool r){ - if(msg.sender!=master)throw; - funding=r; - } - function setTransfer(bool r){ - if(msg.sender!=master)throw; - allowTransfer=r; - } - function addInitialInvestor(address invest){ - if(msg.sender!=master)throw; - initialInvestor[invest]=true; - } - function addToken(address invest,uint256 value){ - if(msg.sender!=master)throw; - balances[invest]+=value; - totalTokens+=value; - } - function setEarlyInvestorExchangeRate(uint invest){ - if(msg.sender!=master)throw; - EarlyInvestorExchangeRate=invest; - } - function setStartDate(uint time){ - if(msg.sender!=master)throw; - fundingStart=time; - } - function setStartRefund(bool s){ - if(msg.sender!=master)throw; - startRefund=s; - } - function getExchangeRate(address investorAddress) constant returns(uint){ - if(initialInvestor[investorAddress]) - return EarlyInvestorExchangeRate; - else - return exchangeRate; - } - function ICOopen() constant returns(bool){ - if(!funding) return false; - else if(block.timestamp < fundingStart) return false; - else return true; - } - function() payable external { - if(!funding) throw; - if(block.timestamp < fundingStart) throw; - if(msg.value == 0) throw; - var numTokens = msg.value * getExchangeRate(msg.sender); - totalTokens += numTokens; - balances[msg.sender] += numTokens; - balancesEther[msg.sender] += msg.value; - totalParticipants+=1; - Transfer(0, msg.sender, numTokens); - } - function finalize(uint percentOfTotal) external { - if(msg.sender!=master)throw; - if(funding)throw; - funding = false; - uint256 additionalTokens = totalTokens * percentOfTotal / (100 - percentOfTotal); - totalTokens += additionalTokens; - balances[master] += additionalTokens; - Transfer(0, master, additionalTokens); - if (!master.send(this.balance)) throw; - } - function refund() external { - if(!startRefund) throw; - var gntValue = balances[msg.sender]; - var ethValue = balancesEther[msg.sender]; - if (gntValue == 0) throw; - balances[msg.sender] = 0; - balancesEther[msg.sender] = 0; - totalTokens -= gntValue; - Refund(msg.sender, ethValue); - if (!msg.sender.send(ethValue)) throw; - } - function transferFrom(address _from,address _to,uint256 _amount) returns (bool success) { - if(funding) throw; - if(!allowTransfer)throw; - if (balances[_from] >= _amount - && allowed[_from][msg.sender] >= _amount - && _amount > 0 - && balances[_to] + _amount > balances[_to]) { - balances[_from] -= _amount; - allowed[_from][msg.sender] -= _amount; - balances[_to] += _amount; - Transfer(_from, _to, _amount); - return true; - } else { - return false; - } - } - function approve(address _spender, uint256 _amount) returns (bool success) { - if(funding) throw; - if(!allowTransfer)throw; - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-34270.sol b/data_full/CVE_clean/2021-34270.sol deleted file mode 100644 index 47ed9c0d..00000000 --- a/data_full/CVE_clean/2021-34270.sol +++ /dev/null @@ -1,128 +0,0 @@ -pragma solidity ^0.4.13; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract doftManaged { - address public doftManager; - function doftManaged() { - doftManager = msg.sender; - } - modifier onlyDoftManager { - require(msg.sender == doftManager); - _; - } - function transferDoftManagment(address newDoftManager) onlyDoftManager { - doftManager = newDoftManager; - } -} -contract ERC20 { - function totalSupply() constant returns (uint totalSupply); - function balanceOf(address _owner) constant returns (uint balance); - function transfer(address _to, uint _value) returns (bool success); - function transferFrom(address _from, address _to, uint _value) returns (bool success); - function approve(address _spender, uint _value) returns (bool success); - function allowance(address _owner, address _spender) constant returns (uint remaining); - event Transfer(address indexed _from, address indexed _to, uint _value); - event Approval(address indexed _owner, address indexed _spender, uint _value); -} -contract BasicToken is ERC20 { - uint256 _totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed _from, address indexed _to, uint _value); - event Approval(address indexed _owner, address indexed _spender, uint _value); - function totalSupply() constant returns (uint totalSupply){ - totalSupply = _totalSupply; - } - function balanceOf(address _owner) constant returns (uint balance){ - return balanceOf[_owner]; - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] > _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function transfer(address _to, uint _value) returns (bool success) { - _transfer(msg.sender, _to, _value); - return true; - } - function transferFrom(address _from, address _to, uint _value) returns (bool success) { - require (_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint _value) returns (bool success) { - allowance[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowance[_owner][_spender]; - } -} -contract Doftcoin is BasicToken, owned, doftManaged { - string public name; - string public symbol; - uint256 public decimals; - uint256 public sellPrice; - uint256 public buyPrice; - uint256 public miningStorage; - string public version; - event Mine(address target, uint256 minedAmount); - function Doftcoin() { - decimals = 18; - _totalSupply = 5000000 * (10 ** decimals); - miningStorage = _totalSupply / 2; - name = "Doftcoin"; - symbol = "DFC"; - balanceOf[msg.sender] = _totalSupply; - version = "1.0"; - } - function mintToken(address _target, uint256 _mintedAmount) onlyOwner { - require (_target != 0x0); - balanceOf[_target] += _mintedAmount; - _totalSupply += _mintedAmount; - Transfer(0, this, _mintedAmount); - Transfer(this, _target, _mintedAmount); - } - function buy() payable { - require(buyPrice > 0); - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 _amount) { - require(sellPrice > 0); - require(this.balance >= _amount * sellPrice); - _transfer(msg.sender, this, _amount); - msg.sender.transfer(_amount * sellPrice); - } - function setPrices(uint256 _newSellPrice, uint256 _newBuyPrice) onlyDoftManager { - sellPrice = _newSellPrice; - buyPrice = _newBuyPrice; - } - function mine(address _target, uint256 _minedAmount) onlyDoftManager { - require (_minedAmount > 0); - require (_target != 0x0); - require (miningStorage - _minedAmount >= 0); - require (balanceOf[doftManager] >= _minedAmount); - require (balanceOf[_target] + _minedAmount > balanceOf[_target]); - balanceOf[doftManager] -= _minedAmount; - balanceOf[_target] += _minedAmount; - miningStorage -= _minedAmount; - Mine(_target, _minedAmount); - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-34272.sol b/data_full/CVE_clean/2021-34272.sol deleted file mode 100644 index cc850dbf..00000000 --- a/data_full/CVE_clean/2021-34272.sol +++ /dev/null @@ -1,133 +0,0 @@ -pragma solidity ^0.4.18; -contract Owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 6; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - Burn(_from, _value); - return true; - } -} -contract RobotBTC is Owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - bool public isOpened; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function RobotBTC( - uint256 initialSupply, - string tokenName, - string tokenSymbol - ) TokenERC20(initialSupply, tokenName, tokenSymbol) public { - } - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value > balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable public { - require(isOpened); - uint amount = msg.value / buyPrice; - _transfer(this, msg.sender, amount); - } - function sell(uint256 amount) public { - require(this.balance >= amount * sellPrice); - require(isOpened); - _transfer(msg.sender, this, amount); - msg.sender.transfer(amount * sellPrice); - } - function setExchange(bool istrue) onlyOwner public { - isOpened = istrue; - } -} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-34273.sol b/data_full/CVE_clean/2021-34273.sol deleted file mode 100644 index 504673ff..00000000 --- a/data_full/CVE_clean/2021-34273.sol +++ /dev/null @@ -1,80 +0,0 @@ -pragma solidity ^0.4.4; -contract Token { - function totalSupply() constant returns (uint256 supply) {} - function balanceOf(address _owner) constant returns (uint256 balance) {} - function transfer(address _to, uint256 _value) returns (bool success) {} - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} - function approve(address _spender, uint256 _value) returns (bool success) {} - function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); -} -contract Owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -contract StandardToken is Token, Owned { - function transfer(address _to, uint256 _value) returns (bool success) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - Transfer(msg.sender, _to, _value); - return true; - } else { return false; } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } else { return false; } - } - function distributeToken(address[] addresses, uint256 _value) { - for (uint i = 0; i < addresses.length; i++) { - balances[msg.sender] -= _value; - balances[addresses[i]] += _value; - Transfer(msg.sender, addresses[i], _value); - } -} - function balanceOf(address _owner) constant returns (uint256 balance) { - return balances[_owner]; - } - function approve(address _spender, uint256 _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - function allowance(address _owner, address _spender) constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; -} -contract B2X is StandardToken { - function () { - throw; - } - string public name; - uint8 public decimals; - string public symbol; - function B2X( - ) { - totalSupply = 21 * 10 ** 14; - balances[msg.sender] = totalSupply; - name = "BTC2X"; - decimals = 8; - symbol = "B2X"; - } -} \ No newline at end of file diff --git a/data_full/CVE_label/CVE2description.json b/data_full/CVE_label/CVE2description.json deleted file mode 100644 index e05f122c..00000000 --- a/data_full/CVE_label/CVE2description.json +++ /dev/null @@ -1,564 +0,0 @@ -{ - "CVE-2023-41052": "Vyper is a Pythonic Smart Contract Language. In affected versions the order of evaluation of the arguments of the builtin functions `uint256_addmod`, `uint256_mulmod`, `ecadd` and `ecmul` does not follow source order. This behaviour is problematic when the evaluation of one of the arguments produces side effects that other arguments depend on. A patch is currently being developed on pull request #3583. When using builtins from the list above, users should make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", - "CVE-2023-40015": "Vyper is a Pythonic Smart Contract Language. For the following (probably non-exhaustive) list of expressions, the compiler evaluates the arguments from right to left instead of left to right. `unsafe_add, unsafe_sub, unsafe_mul, unsafe_div, pow_mod256, |, &, ^ (bitwise operators), bitwise_or (deprecated), bitwise_and (deprecated), bitwise_xor (deprecated), raw_call, <, >, <=, >=, ==, !=, in, not in (when lhs and rhs are enums)`. This behaviour becomes a problem when the evaluation of one of the arguments produces side effects that other arguments depend on. The following expressions can produce side-effect: state modifying external call , state modifying internal call, `raw_call`, `pop()` when used on a Dynamic Array stored in the storage, `create_minimal_proxy_to`, `create_copy_of`, `create_from_blueprint`. This issue has not yet been patched. Users are advised to make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", - "CVE-2023-40014": "OpenZeppelin Contracts is a library for secure smart contract development. Starting in version 4.0.0 and prior to version 4.9.3, contracts using `ERC2771Context` along with a custom trusted forwarder may see `_msgSender` return `address(0)` in calls that originate from the forwarder with calldata shorter than 20 bytes. This combination of circumstances does not appear to be common, in particular it is not the case for `MinimalForwarder` from OpenZeppelin Contracts, or any deployed forwarder the team is aware of, given that the signer address is appended to all calls that originate from these forwarders. The problem has been patched in v4.9.3.", - "CVE-2023-39363": "Vyer is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a `.vy` contract compiled with `vyper` versions `0.2.15`, `0.2.16`, or `0.3.0`; a primary function that utilizes the `@nonreentrant` decorator with a specific `key` and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same `key` and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.", - "CVE-2023-34459": "OpenZeppelin Contracts is a library for smart contract development. Starting in version 4.7.0 and prior to version 4.9.2, when the `verifyMultiProof`, `verifyMultiProofCalldata`, `procesprocessMultiProof`, or `processMultiProofCalldat` functions are in use, it is possible to construct merkle trees that allow forging a valid multiproof for an arbitrary set of leaves. A contract may be vulnerable if it uses multiproofs for verification and the merkle tree that is processed includes a node with value 0 at depth 1 (just under the root). This could happen inadvertedly for balanced trees with 3 leaves or less, if the leaves are not hashed. This could happen deliberately if a malicious tree builder includes such a node in the tree. A contract is not vulnerable if it uses single-leaf proving (`verify`, `verifyCalldata`, `processProof`, or `processProofCalldata`), or if it uses multiproofs with a known tree that has hashed leaves. Standard merkle trees produced or validated with the @openzeppelin/merkle-tree library are safe. The problem has been patched in version 4.9.2. Some workarounds are available. For those using multiproofs: When constructing merkle trees hash the leaves and do not insert empty nodes in your trees. Using the @openzeppelin/merkle-tree package eliminates this issue. Do not accept user-provided merkle roots without reconstructing at least the first level of the tree. Verify the merkle tree structure by reconstructing it from the leaves.", - "CVE-2023-34449": "ink! is an embedded domain specific language to write smart contracts in Rust for blockchains built on the Substrate framework. Starting in version 4.0.0 and prior to version 4.2.1, the return value when using delegate call mechanics, either through `CallBuilder::delegate` or `ink_env::invoke_contract_delegate`, is decoded incorrectly. This bug was related to the mechanics around decoding a call's return buffer, which was changed as part of pull request 1450. Since this feature was only released in ink! 4.0.0, no previous versions are affected. Users who have an ink! 4.x series contract should upgrade to 4.2.1 to receive a patch.", - "CVE-2023-34234": "OpenZeppelin Contracts is a library for smart contract development. By frontrunning the creation of a proposal, an attacker can become the proposer and gain the ability to cancel it. The attacker can do this repeatedly to try to prevent a proposal from being proposed at all. This impacts the `Governor` contract in v4.9.0 only, and the `GovernorCompatibilityBravo` contract since v4.3.0. This problem has been patched in 4.9.1 by introducing opt-in frontrunning protection. Users are advised to upgrade. Users unable to upgrade may submit the proposal creation transaction to an endpoint with frontrunning protection as a workaround.", - "CVE-2023-32675": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In contracts with more than one regular nonpayable function, it is possible to send funds to the default function, even if the default function is marked `nonpayable`. This applies to contracts compiled with vyper versions prior to 0.3.8. This issue was fixed by the removal of the global `calldatasize` check in commit `02339dfda`. Users are advised to upgrade to version 0.3.8. Users unable to upgrade should avoid use of nonpayable default functions.", - "CVE-2023-32059": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, internal calls with default arguments are compiled incorrectly. Depending on the number of arguments provided in the call, the defaults are added not right-to-left, but left-to-right. If the types are incompatible, typechecking is bypassed. The ability to pass kwargs to internal functions is an undocumented feature that is not well known about. The issue is patched in version 0.3.8.", - "CVE-2023-32058": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, due to missing overflow check for loop variables, by assigning the iterator of a loop to a variable, it is possible to overflow the type of the latter. The issue seems to happen only in loops of type `for i in range(a, a + N)` as in loops of type `for i in range(start, stop)` and `for i in range(stop)`, the compiler is able to raise a `TypeMismatch` when trying to overflow the variable. The problem has been patched in version 0.3.8.", - "CVE-2023-31146": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, during codegen, the length word of a dynarray is written before the data, which can result in out-of-bounds array access in the case where the dynarray is on both the lhs and rhs of an assignment. The issue can cause data corruption across call frames. The expected behavior is to revert due to out-of-bounds array access. Version 0.3.8 contains a patch for this issue.", - "CVE-2023-30837": "Vyper is a pythonic smart contract language for the EVM. The storage allocator does not guard against allocation overflows in versions prior to 0.3.8. An attacker can overwrite the owner variable. This issue was fixed in version 0.3.8.", - "CVE-2023-30629": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions 0.3.1 through 0.3.7, the Vyper compiler generates the wrong bytecode. Any contract that uses the `raw_call` with `revert_on_failure=False` and `max_outsize=0` receives the wrong response from `raw_call`. Depending on the memory garbage, the result can be either `True` or `False`. A patch is available and, as of time of publication, anticipated to be part of Vyper 0.3.8. As a workaround, one may always put `max_outsize>0`.", - "CVE-2023-30542": "OpenZeppelin Contracts is a library for secure smart contract development. The proposal creation entrypoint (`propose`) in `GovernorCompatibilityBravo` allows the creation of proposals with a `signatures` array shorter than the `calldatas` array. This causes the additional elements of the latter to be ignored, and if the proposal succeeds the corresponding actions would eventually execute without any calldata. The `ProposalCreated` event correctly represents what will eventually execute, but the proposal parameters as queried through `getActions` appear to respect the original intended calldata. This issue has been patched in 4.8.3. As a workaround, ensure that all proposals that pass through governance have equal length `signatures` and `calldatas` parameters.", - "CVE-2023-30541": "OpenZeppelin Contracts is a library for secure smart contract development. A function in the implementation contract may be inaccessible if its selector clashes with one of the proxy's own selectors. Specifically, if the clashing function has a different signature with incompatible ABI encoding, the proxy could revert while attempting to decode the arguments from calldata. The probability of an accidental clash is negligible, but one could be caused deliberately and could cause a reduction in availability. The issue has been fixed in version 4.8.3. As a workaround if a function appears to be inaccessible for this reason, it may be possible to craft the calldata such that ABI decoding does not fail at the proxy and the function is properly proxied through.", - "CVE-2023-26488": "OpenZeppelin Contracts is a library for secure smart contract development. The ERC721Consecutive contract designed for minting NFTs in batches does not update balances when a batch has size 1 and consists of a single token. Subsequent transfers from the receiver of that token may overflow the balance as reported by `balanceOf`. The issue exclusively presents with batches of size 1. The issue has been patched in 4.8.2.", - "CVE-2023-23940": "OpenZeppelin Contracts for Cairo is a library for secure smart contract development written in Cairo for StarkNet, a decentralized ZK Rollup. `is_valid_eth_signature` is missing a call to `finalize_keccak` after calling `verify_eth_signature`. As a result, any contract using `is_valid_eth_signature` from the account library (such as the `EthAccount` preset) is vulnerable to a malicious sequencer. Specifically, the malicious sequencer would be able to bypass signature validation to impersonate an instance of these accounts. The issue has been patched in 0.6.1.", - "CVE-2022-46173": "Elrond-GO is a go implementation for the Elrond Network protocol. Versions prior to 1.3.50 are subject to a processing issue where nodes are affected when trying to process a cross-shard relayed transaction with a smart contract deploy transaction data. The problem was a bad correlation between the transaction caches and the processing component. If the above-mentioned transaction was sent with more gas than required, the smart contract result (SCR transaction) that should have returned the leftover gas, would have been wrongly added to a cache that the processing unit did not consider. The node stopped notarizing metachain blocks. The fix was actually to extend the SCR transaction search in all other caches if it wasn't found in the correct (expected) sharded-cache. There are no known workarounds at this time. This issue has been patched in version 1.3.50.", - "CVE-2022-39384": "OpenZeppelin Contracts is a library for secure smart contract development. Before version 4.4.1 but after 3.2.0, initializer functions that are invoked separate from contract creation (the most prominent example being minimal proxies) may be reentered if they make an untrusted non-view external call. Once an initializer has finished running it can never be re-executed. However, an exception put in place to support multiple inheritance made reentrancy possible in the scenario described above, breaking the expectation that there is a single execution. Note that upgradeable proxies are commonly initialized together with contract creation, where reentrancy is not feasible, so the impact of this issue is believed to be minor. This issue has been patched, please upgrade to version 4.4.1. As a workaround, avoid untrusted external calls during initialization.", - "CVE-2022-36061": "Elrond go is the go implementation for the Elrond Network protocol. In versions prior to 1.3.35, read only calls between contracts can generate smart contracts results. For example, if contract A calls in read only mode contract B and the called function will make changes upon the contract's B state, the state will be altered for contract B as if the call was not made in the read-only mode. This can lead to some effects not designed by the original smart contracts programmers. This issue was patched in version 1.3.35. There are no known workarounds.", - "CVE-2022-35961": "OpenZeppelin Contracts is a library for secure smart contract development. The functions `ECDSA.recover` and `ECDSA.tryRecover` are vulnerable to a kind of signature malleability due to accepting EIP-2098 compact signatures in addition to the traditional 65 byte signature format. This is only an issue for the functions that take a single `bytes` argument, and not the functions that take `r, v, s` or `r, vs` as separate arguments. The potentially affected contracts are those that implement signature reuse or replay protection by marking the signature itself as used rather than the signed message or a nonce included in it. A user may take a signature that has already been submitted, submit it again in a different form, and bypass this protection. The issue has been patched in 4.7.3.", - "CVE-2022-35916": "OpenZeppelin Contracts is a library for secure smart contract development. Contracts using the cross chain utilities for Arbitrum L2, `CrossChainEnabledArbitrumL2` or `LibArbitrumL2`, will classify direct interactions of externally owned accounts (EOAs) as cross chain calls, even though they are not started on L1. This issue has been patched in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-35915": "OpenZeppelin Contracts is a library for secure smart contract development. The target contract of an EIP-165 `supportsInterface` query can cause unbounded gas consumption by returning a lot of data, while it is generally assumed that this operation has a bounded cost. The issue has been fixed in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-31198": "OpenZeppelin Contracts is a library for secure smart contract development. This issue concerns instances of Governor that use the module `GovernorVotesQuorumFraction`, a mechanism that determines quorum requirements as a percentage of the voting token's total supply. In affected instances, when a proposal is passed to lower the quorum requirements, past proposals may become executable if they had been defeated only due to lack of quorum, and the number of votes it received meets the new quorum requirement. Analysis of instances on chain found only one proposal that met this condition, and we are actively monitoring for new occurrences of this particular issue. This issue has been patched in v4.7.2. Users are advised to upgrade. Users unable to upgrade should consider avoiding lowering quorum requirements if a past proposal was defeated for lack of quorum.", - "CVE-2022-31172": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.1.0 until 4.7.1 are vulnerable to the SignatureChecker reverting. `SignatureChecker.isValidSignatureNow` is not expected to revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-1271 as expected. The contracts that may be affected are those that use `SignatureChecker` to check the validity of a signature and handle invalid signatures in a way other than reverting. The issue was patched in version 4.7.1.", - "CVE-2022-31170": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.0.0 until 4.7.1 are vulnerable to ERC165Checker reverting instead of returning `false`. `ERC165Checker.supportsInterface` is designed to always successfully return a boolean, and under no circumstance revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-165 as expected, specifically if it returns a value other than 0 or 1. The contracts that may be affected are those that use `ERC165Checker` to check for support for an interface and then handle the lack of support in a way other than reverting. The issue was patched in version 4.7.1.", - "CVE-2022-29255": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions prior to 0.3.4 when a calling an external contract with no return value, the contract address (including side effects) could be evaluated twice. This may result in incorrect outcomes for contracts. This issue has been addressed in v0.3.4.", - "CVE-2022-27134": "EOSIO batdappboomx v327c04cf has an Access-control vulnerability in the `transfer` function of the smart contract which allows remote attackers to win the cryptocurrency without paying ticket fee via the `std::string memo` parameter.", - "CVE-2022-24845": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In affected versions, the return of `<iface>.returns_int128()` is not validated to fall within the bounds of `int128`. This issue can result in a misinterpretation of the integer value and lead to incorrect behavior. As of v0.3.0, `<iface>.returns_int128()` is validated in simple expressions, but not complex expressions. Users are advised to upgrade. There is no known workaround for this issue.", - "CVE-2022-24788": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. Versions of vyper prior to 0.3.2 suffer from a potential buffer overrun. Importing a function from a JSON interface which returns `bytes` generates bytecode which does not clamp bytes length, potentially resulting in a buffer overrun. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-24787": "Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. In version 0.3.1 and prior, bytestrings can have dirty bytes in them, resulting in the word-for-word comparisons giving incorrect results. Even without dirty nonzero bytes, two bytestrings can compare to equal if one ends with `\"\\x00\"` because there is no comparison of the length. A patch is available and expected to be part of the 0.3.2 release. There are currently no known workarounds.", - "CVE-2021-41264": "OpenZeppelin Contracts is a library for smart contract development. In affected versions upgradeable contracts using `UUPSUpgradeable` may be vulnerable to an attack affecting uninitialized implementation contracts. A fix is included in version 4.3.2 of `@openzeppelin/contracts` and `@openzeppelin/contracts-upgradeable`. For users unable to upgrade; initialize implementation contracts using `UUPSUpgradeable` by invoking the initializer function (usually called `initialize`). An example is provided [in the forum](https://forum.openzeppelin.com/t/security-advisory-initialize-uups-implementation-contracts/15301).", - "CVE-2021-41122": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions external functions did not properly validate the bounds of decimal arguments. The can lead to logic errors. This issue has been resolved in version 0.3.0.", - "CVE-2021-41121": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions when performing a function call inside a literal struct, there is a memory corruption issue that occurs because of an incorrect pointer to the the top of the stack. This issue has been resolved in version 0.3.0.", - "CVE-2021-39168": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", - "CVE-2021-39167": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", - "CVE-2021-34273": "A security flaw in the 'owned' function of a smart contract implementation for BTC2X (B2X), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", - "CVE-2021-34272": "A security flaw in the 'owned' function of a smart contract implementation for RobotCoin (RBTC), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", - "CVE-2021-34270": "An integer overflow in the mintToken function of a smart contract implementation for Doftcoin Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses.", - "CVE-2021-33403": "An integer overflow in the transfer function of a smart contract implementation for Lancer Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses between two large accounts during a transaction.", - "CVE-2021-3006": "The breed function in the smart contract implementation for Farm in Seal Finance (Seal), an Ethereum token, lacks access control and thus allows price manipulation, as exploited in the wild in December 2020 and January 2021.", - "CVE-2021-3004": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", - "CVE-2020-35962": "The sellTokenForLRC function in the vault protocol in the smart contract implementation for Loopring (LRC), an Ethereum token, lacks access control for fee swapping and thus allows price manipulation.", - "CVE-2020-17753": "An issue was discovered in function addMeByRC in the smart contract implementation for RC, an Ethereum token, allows attackers to transfer an arbitrary amount of tokens to an arbitrary address.", - "CVE-2020-17752": "Integer overflow vulnerability in payable function of a smart contract implementation for an Ethereum token, as demonstrated by the smart contract implemented at address 0xB49E984A83d7A638E7F2889fc8328952BA951AbE, an implementation for MillionCoin (MON).", - "CVE-2019-15080": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", - "CVE-2019-15079": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", - "CVE-2019-15078": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", - "CVE-2018-19834": "The quaker function of a smart contract implementation for BOMBBA (BOMB), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19833": "The owned function of a smart contract implementation for DDQ, an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19832": "The NETM() function of a smart contract implementation for NewIntelTechMedia (NETM), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19831": "The ToOwner() function of a smart contract implementation for Cryptbond Network (CBN), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19830": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", - "CVE-2018-18425": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", - "CVE-2018-17987": "The determineWinner function of a smart contract implementation for HashHeroes Tiles, an Ethereum game, uses a certain blockhash value in an attempt to generate a random number for the case where NUM_TILES equals the number of people who purchased a tile, which allows an attacker to control the awarding of the prize by being the last person to purchase a tile.", - "CVE-2018-17968": "A gambling smart contract implementation for RuletkaIo, an Ethereum gambling game, generates a random value that is predictable by an external contract call. The developer wrote a random() function that uses a block timestamp and block hash from the Ethereum blockchain. This can be predicted by writing the same random function code in an exploit contract to determine the deadSeat value.", - "CVE-2018-17882": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", - "CVE-2018-17877": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-17111": "The onlyOwner modifier of a smart contract implementation for Coinlancer (CL), an Ethereum ERC20 token, has a potential access control vulnerability. All contract users can access functions that use this onlyOwner modifier, because the comparison between msg.sender and owner is incorrect.", - "CVE-2018-17071": "The fallback function of a simple lottery smart contract implementation for Lucky9io, an Ethereum gambling game, generates a random value with the publicly readable variable entry_number. This variable is private, yet it is readable by eth.getStorageAt function. Also, attackers can purchase a ticket at a low price by directly calling the fallback function with small msg.value, because the developer set the currency unit incorrectly. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-17050": "The mintToken function of a smart contract implementation for PolyAi (AI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-15552": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-14715": "The endCoinFlip function and throwSlammer function of the smart contract implementations for Cryptogs, an Ethereum game, generate random numbers with an old block's hash. Therefore, attackers can predict the random number and always win the game.", - "CVE-2018-14576": "The mintTokens function of a smart contract implementation for SunContract, an Ethereum token, has an integer overflow via the _amount variable.", - "CVE-2018-14089": "An issue was discovered in a smart contract implementation for Virgo_ZodiacToken, an Ethereum token. In this contract, 'bool sufficientAllowance = allowance <= _value' will cause an arbitrary transfer in the function transferFrom because '<=' is used instead of '>=' (which was intended). An attacker can transfer from any address to his address, and does not need to meet the 'allowance > value' condition.", - "CVE-2018-14088": "An issue was discovered in a smart contract implementation for STeX White List (STE(WL)), an Ethereum token. The contract has an integer overflow. If the owner sets the value of amount to a large number then the \"amount * 1000000000000000\" will cause an integer overflow in withdrawToFounders().", - "CVE-2018-14087": "An issue was discovered in a smart contract implementation for EUC (EUC), an Ethereum token. The contract has an integer overflow. If the owner sets the value of buyPrice to a large number in setPrices() then the \"msg.value * buyPrice\" will cause an integer overflow in the fallback function.", - "CVE-2018-14086": "An issue was discovered in a smart contract implementation for SingaporeCoinOrigin (SCO), an Ethereum token. The contract has an integer overflow. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", - "CVE-2018-14085": "An issue was discovered in a smart contract implementation for UserWallet 0x0a7bca9FB7AfF26c6ED8029BB6f0F5D291587c42, an Ethereum token. First, suppose that the owner adds the evil contract address to his sweepers. The evil contract looks like this: contract Exploit { uint public start; function sweep(address _token, uint _amount) returns (bool) { start = 0x123456789; return true;} }. Then, when one calls the function sweep() in the UserWallet contract, it will change the sweeperList to 0X123456789.", - "CVE-2018-14084": "An issue was discovered in a smart contract implementation for MKCB, an Ethereum token. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", - "CVE-2018-14063": "The increaseApproval function of a smart contract implementation for Tracto (TRCT), an Ethereum ERC20 token, has an integer overflow.", - "CVE-2018-14006": "An integer overflow vulnerability exists in the function multipleTransfer of Neo Genesis Token (NGT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14005": "An integer overflow vulnerability exists in the function transferAny of Malaysia coins (Xmc), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14004": "An integer overflow vulnerability exists in the function transfer_tokens_after_ICO of GlobeCoin (GLB), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14003": "An integer overflow vulnerability exists in the function batchTransfer of WeMediaChain (WMC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14002": "An integer overflow vulnerability exists in the function distribute of MP3 Coin (MP3), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14001": "An integer overflow vulnerability exists in the function batchTransfer of SHARKTECH (SKT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-13877": "The doPayouts() function of the smart contract implementation for MegaCryptoPolis, an Ethereum game, has a Denial of Service vulnerability. If a smart contract that has a fallback function always causing exceptions buys a land, users cannot buy lands near that contract's land, because those purchase attempts will not be completed unless the doPayouts() function successfully sends Ether to certain neighbors.", - "CVE-2018-13836": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-13783": "The mintToken function of a smart contract implementation for JiucaiToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13782": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13781": "The mintToken function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13780": "The mintToken function of a smart contract implementation for ESH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13779": "The mintToken function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13778": "The mintToken function of a smart contract implementation for CGCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13777": "The mintToken function of a smart contract implementation for RRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13776": "The mintToken function of a smart contract implementation for AppleToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13775": "The mintToken function of a smart contract implementation for RCKT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13774": "The mintToken function of a smart contract implementation for Bitstarti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13773": "The mintToken function of a smart contract implementation for Enterprise Token Ecosystem (ETE) (Contract Name: NetkillerToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13772": "The mintToken function of a smart contract implementation for TheFlashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13771": "The mintToken function of a smart contract implementation for ExacoreContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13770": "The mintToken function of a smart contract implementation for UltimateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13769": "The mintToken function of a smart contract implementation for JeansToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13768": "The mintToken function of a smart contract implementation for ZToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13767": "The mintToken function of a smart contract implementation for Cornerstone, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13766": "The mintToken function of a smart contract implementation for Easticoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13765": "The mintToken function of a smart contract implementation for LandCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13764": "The mintToken function of a smart contract implementation for BiquToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13763": "The mintToken function of a smart contract implementation for Ublasti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13762": "The mintToken function of a smart contract implementation for Yumerium, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13761": "The mintToken function of a smart contract implementation for NetkillerAdvancedTokenAirDrop, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13760": "The mintToken function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13759": "The mintToken function of a smart contract implementation for BIGCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13758": "The mintToken function of a smart contract implementation for LoliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13757": "The mintToken function of a smart contract implementation for Coinquer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13756": "The mintToken function of a smart contract implementation for CherryCoinFoundation, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13755": "The mintToken function of a smart contract implementation for OTAKUToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13754": "The mintToken function of a smart contract implementation for CryptosisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13753": "The mintToken function of a smart contract implementation for DeWeiSecurityServiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13752": "The mintToken function of a smart contract implementation for Thread, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13751": "The mintToken function of a smart contract implementation for JustWallet, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13750": "The mintToken function of a smart contract implementation for RichiumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13749": "The mintToken function of a smart contract implementation for FinalToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13748": "The mintToken function of a smart contract implementation for CarToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13747": "The mintToken function of a smart contract implementation for VanMinhCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13746": "The mintToken function of a smart contract implementation for kBit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13745": "The mintToken function of a smart contract implementation for STCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13744": "The mintToken function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13743": "The mintToken function of a smart contract implementation for SuperEnergy (SEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13742": "The mintToken function of a smart contract implementation for tickets (TKT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13741": "The mintToken function of a smart contract implementation for ABLGenesisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13740": "The mintToken function of a smart contract implementation for OneChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13739": "The mintToken function of a smart contract implementation for dopnetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13738": "The mintToken function of a smart contract implementation for PELOCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13737": "The mintToken function of a smart contract implementation for AnovaBace, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13736": "The mintToken function of a smart contract implementation for ELearningCoinERC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13735": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13734": "The mintToken function of a smart contract implementation for AZTToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13733": "The mintToken function of a smart contract implementation for ProjectJ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13732": "The mintToken function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13731": "The mintToken function of a smart contract implementation for TokenMACHU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13730": "The mintToken function of a smart contract implementation for HEY, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13729": "The mintToken function of a smart contract implementation for JPMD100B, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13728": "The mintToken function of a smart contract implementation for JixoCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13727": "The mintToken function of a smart contract implementation for Eastcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13726": "The mintToken function of a smart contract implementation for ISeeVoiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13725": "The mintToken function of a smart contract implementation for GlobalSuperGameToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13724": "The mint function of a smart contract implementation for HYIPCrowdsale1, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13723": "The mintToken function of a smart contract implementation for SERVVIZIOToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13722": "The mint function of a smart contract implementation for HYIPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13721": "The mintToken function of a smart contract implementation for GoMineWorld, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13720": "The mintToken function of a smart contract implementation for Antoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13719": "The mintToken function of a smart contract implementation for BiteduToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13718": "The mintToken function of a smart contract implementation for FuturXe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13717": "The mintToken function of a smart contract implementation for HormitechToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13716": "The mintToken function of a smart contract implementation for sexhdsolo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13715": "The mintToken function of a smart contract implementation for BpsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13714": "The mintToken function of a smart contract implementation for CM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13713": "The mintToken function of a smart contract implementation for Tradesman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13712": "The mintToken function of a smart contract implementation for PMET, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13711": "The mintToken function of a smart contract implementation for Databits, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13710": "The mintToken function of a smart contract implementation for Mjolnir, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13709": "The mintToken function of a smart contract implementation for Tube, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13708": "The mintToken function of a smart contract implementation for Order (ETH) (Contract Name: BuyToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13707": "The mintToken function of a smart contract implementation for YSS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13706": "The mintToken function of a smart contract implementation for IdeaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13705": "The mintToken function of a smart contract implementation for PMHToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13704": "The mintToken function of a smart contract implementation for eddToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13703": "The mintToken function of a smart contract implementation for CERB_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13702": "The mintToken function of a smart contract implementation for Essence, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13701": "The mintToken function of a smart contract implementation for KissMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13700": "The mintToken function of a smart contract implementation for IPMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13699": "The mintToken function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13698": "The mintTokens function of a smart contract implementation for Play2LivePromo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13697": "The mintToken function of a smart contract implementation for RobotBTC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13696": "The mintToken function of a smart contract implementation for RedTicket, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13695": "The mint function of a smart contract implementation for CTest7, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13694": "The mintToken function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13693": "The mintToken function of a smart contract implementation for GreenEnergyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13692": "The mintToken function of a smart contract implementation for MehdiTAZIToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13691": "The mintToken function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13690": "The mintToken function of a smart contract implementation for Instacocoa, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13689": "The mintToken function of a smart contract implementation for CJXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13688": "The mintToken function of a smart contract implementation for MallToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13687": "The mintToken function of a smart contract implementation for normikaivo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13686": "The mintToken function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13685": "The mintToken function of a smart contract implementation for Vornox (VRX) (Contract Name: VornoxCoinToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13684": "The mintToken function of a smart contract implementation for ZIP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13683": "The mintToken function of a smart contract implementation for exsulcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13682": "The mintToken function of a smart contract implementation for ViteMoneyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13681": "The mintToken function of a smart contract implementation for SOSCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13680": "The mintToken function of a smart contract implementation for LexitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13679": "The mintToken function of a smart contract implementation for ZPEcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13678": "The mintToken function of a smart contract implementation for Lottery, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13677": "The mintToken function of a smart contract implementation for Goochain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13676": "The mintToken function of a smart contract implementation for Orderbook Presale Token (OBP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13675": "The mintToken function of a smart contract implementation for YAMBYO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13674": "The mintToken function of a smart contract implementation for ComBillAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13673": "The mintToken function of a smart contract implementation for GoldTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13672": "The mintToken function of a smart contract implementation for OBTCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13671": "The mintToken function of a smart contract implementation for DinsteinCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13670": "The mintToken function of a smart contract implementation for GFCB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13669": "The mintToken function of a smart contract implementation for NCU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13668": "The mintToken function of a smart contract implementation for BTPCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13667": "The mintToken function of a smart contract implementation for UTBTokenTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13666": "The mintToken function of a smart contract implementation for EristicaICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13665": "The mintToken function of a smart contract implementation for BCaaS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13664": "The mintToken function of a smart contract implementation for CWS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13663": "The mintToken function of a smart contract implementation for BSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13662": "The mintToken function of a smart contract implementation for WorldOpctionChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13661": "The mintToken function of a smart contract implementation for APP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13660": "The mint function of a smart contract implementation for BillionRewardsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13659": "The mintToken function of a smart contract implementation for BrianCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13658": "The mintToken function of a smart contract implementation for TheGoDgital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13657": "The mintToken function of a smart contract implementation for Rice, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13656": "The mintToken function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13655": "The mintToken function of a smart contract implementation for GFC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13654": "The mintToken function of a smart contract implementation for ESTSToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13653": "The mintToken function of a smart contract implementation for ipshoots, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13652": "The mintToken function of a smart contract implementation for TheGoDigital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13651": "The mintToken function of a smart contract implementation for MicoinNetworkToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13650": "The mintToken function of a smart contract implementation for BitmaxerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13649": "The mintToken function of a smart contract implementation for Deploy, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13648": "The mintToken function of a smart contract implementation for BGC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13647": "The mintToken function of a smart contract implementation for TrueGoldCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13646": "The mintToken function of a smart contract implementation for Datiac, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13645": "The mintToken function of a smart contract implementation for Fiocoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13644": "The mintToken function of a smart contract implementation for RoyalClassicCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13643": "The mintToken function of a smart contract implementation for GCRTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13642": "The mintToken function of a smart contract implementation for SECoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13641": "The mintToken function of a smart contract implementation for MVGcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13640": "The mintToken function of a smart contract implementation for EthereumSmart, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13639": "The mintToken function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13638": "The mintToken function of a smart contract implementation for Bitpark, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13637": "The mintToken function of a smart contract implementation for CikkaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13636": "The mintToken function of a smart contract implementation for TurdCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13635": "The mintToken function of a smart contract implementation for HBCM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13634": "The mintToken function of a smart contract implementation for MediaCubeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13633": "The mintToken function of a smart contract implementation for Martcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13632": "The mintToken function of a smart contract implementation for NEXPARA, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13631": "The mintToken function of a smart contract implementation for doccoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13630": "The mintToken function of a smart contract implementation for DoccoinPreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13629": "The mintToken function of a smart contract implementation for CrimsonShilling, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13628": "The mintToken function of a smart contract implementation for MomentumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13627": "The mintToken function of a smart contract implementation for MyOffer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13626": "The mintToken function of a smart contract implementation for SemainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13625": "The mintlvlToken function of a smart contract implementation for Krown, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13624": "The mintToken function of a smart contract implementation for WXSLToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13623": "The mintToken function of a smart contract implementation for AirdropperCryptics, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13622": "The mintToken function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13621": "The mintToken function of a smart contract implementation for SoundTribeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13620": "The mintToken function of a smart contract implementation for TripCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13619": "The mintToken function of a smart contract implementation for MicoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13618": "The mintToken function of a smart contract implementation for VICETOKEN_ICO_IS_A_SCAM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13617": "The mintToken function of a smart contract implementation for CAPTOZ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13616": "The mintToken function of a smart contract implementation for IOCT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13615": "The mintToken function of a smart contract implementation for MJCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13614": "The mintToken function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13613": "The mintToken function of a smart contract implementation for CON0217, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13612": "The mintToken function of a smart contract implementation for Robincoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13611": "The mintToken function of a smart contract implementation for CDcurrency, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13610": "The mintToken function of a smart contract implementation for MedicayunLink, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13609": "The mintToken function of a smart contract implementation for CSAToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13608": "The mintToken function of a smart contract implementation for archercoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13607": "The mintToken function of a smart contract implementation for ResidualShare, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13606": "The mintToken function of a smart contract implementation for ARChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13605": "The mintToken function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13604": "The mintToken function of a smart contract implementation for wellieat, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13603": "The mintToken function of a smart contract implementation for Briant2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13602": "The mint function of a smart contract implementation for MiningToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13601": "The mintToken function of a smart contract implementation for GalacticX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13600": "The mintToken function of a smart contract implementation for AMToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13599": "The mintToken function of a smart contract implementation for ResidualValue, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13598": "The mintToken function of a smart contract implementation for SendMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13597": "The mintToken function of a smart contract implementation for testcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13596": "The mintToken function of a smart contract implementation for TESTAhihi, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13595": "The mintToken function of a smart contract implementation for BitStore, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13594": "The mintToken function of a smart contract implementation for CardFactory, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13593": "The mintToken function of a smart contract implementation for CardToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13592": "The mintToken function of a smart contract implementation for RajTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13591": "The mintToken function of a smart contract implementation for KAPcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13590": "The mintToken function of a smart contract implementation for SIPCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13589": "The mintToken function of a smart contract implementation for MooAdvToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13588": "The mintToken function of a smart contract implementation for Code47 (C47), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13587": "The mintToken function of a smart contract implementation for DECToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13586": "The mintToken function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13585": "The mintToken function of a smart contract implementation for CHERRYCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13584": "The mintToken function of a smart contract implementation for yasudem, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13583": "The mintToken function of a smart contract implementation for Shmoo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13582": "The mintToken function of a smart contract implementation for My2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13581": "The mintToken function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13580": "The mintToken function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13579": "The mintToken function of a smart contract implementation for ForeverCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13578": "The mintToken function of a smart contract implementation for GalaxyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13577": "The mintToken function of a smart contract implementation for ShitCoin (SHITC) (Contract Name: AdvancedShit), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13576": "The mintToken function of a smart contract implementation for Escut (ESCT) (Contract Name: JuntsPerCreixer), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13575": "The mintToken function of a smart contract implementation for YESToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13574": "The mintToken function of a smart contract implementation for DataShieldCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13573": "The mintToken function of a smart contract implementation for TripPay, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13572": "The mintToken function of a smart contract implementation for PGM_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13571": "The mintToken function of a smart contract implementation for GoramCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13570": "The mint function of a smart contract implementation for kkTestCoin1 (KTC1), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13569": "The mintToken function of a smart contract implementation for HitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13568": "The mintToken function of a smart contract implementation for MktCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13567": "The mintToken function of a smart contract implementation for SDR, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13566": "The mintToken function of a smart contract implementation for RETNToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13565": "The mintToken function of a smart contract implementation for Co2Bit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13564": "The mintToken function of a smart contract implementation for GATcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13563": "The mintToken function of a smart contract implementation for UPayToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13562": "The mintToken function of a smart contract implementation for BMVCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13561": "The mintToken function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13560": "The mintToken function of a smart contract implementation for KelvinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13559": "The mintToken function of a smart contract implementation for UTCT, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13558": "The mintToken function of a smart contract implementation for rhovit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13557": "The mintToken function of a smart contract implementation for Trabet_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13556": "The mintToken function of a smart contract implementation for COSMOTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13555": "The mintToken function of a smart contract implementation for JaxBox, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13554": "The mintToken function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13553": "The mintToken function of a smart contract implementation for Micro BTC (MBTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13552": "The mintToken function of a smart contract implementation for Trabet_Coin_PreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13551": "The mintToken function of a smart contract implementation for Bgamecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13550": "The mintToken function of a smart contract implementation for Coquinho Coin (CQNC) (Contract Name: CoquinhoERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13549": "The mintToken function of a smart contract implementation for NeuroToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13548": "The mintToken function of a smart contract implementation for Mimicoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13547": "The mintToken function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13546": "The mintToken function of a smart contract implementation for CCASH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13545": "The mintToken function of a smart contract implementation for HashShield, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13544": "The mintToken function of a smart contract implementation for Numisma, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13543": "The mintToken function of a smart contract implementation for GemstoneToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13542": "The mintToken function of a smart contract implementation for ZIBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13541": "The mintToken function of a smart contract implementation for CryptoLeu, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13540": "The mintToken function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13539": "The mintToken function of a smart contract implementation for Bcxss, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13538": "The mintToken function of a smart contract implementation for SIPCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13537": "The mintToken function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13536": "The mintToken function of a smart contract implementation for ERC20_ICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13535": "The mintToken function of a smart contract implementation for PACCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13534": "The mintToken function of a smart contract implementation for SpeedCashLite (SCSL), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13533": "The mintToken function of a smart contract implementation for ALUXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13532": "The mintToken function of a smart contract implementation for Mindexcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13531": "The mintToken function of a smart contract implementation for MaxHouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13530": "The mintToken function of a smart contract implementation for HunterCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13529": "The mintToken function of a smart contract implementation for BetterThanAdrien, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13528": "The mintToken function of a smart contract implementation for DhaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13527": "The mintToken function of a smart contract implementation for ElevateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13526": "The mintToken function of a smart contract implementation for WangWangToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13525": "The mintToken function of a smart contract implementation for Flow, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13524": "The mintToken function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13523": "The mintToken function of a smart contract implementation for SmartPayment, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13522": "The mintToken function of a smart contract implementation for EXGROUP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13521": "The mintToken function of a smart contract implementation for PinkyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13520": "The mintToken function of a smart contract implementation for TopscoinAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13519": "The mint function of a smart contract implementation for DigitalCloudToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13518": "The mintToken function of a smart contract implementation for TCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13517": "The mintToken function of a smart contract implementation for C3 Token (C3), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13516": "The mintToken function of a smart contract implementation for Super Cool Awesome Money (SCAM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13515": "The mintToken function of a smart contract implementation for aman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13514": "The mintToken function of a smart contract implementation for esportz, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13513": "The mintToken function of a smart contract implementation for Ubiou, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13512": "The mintToken function of a smart contract implementation for SmartHomeCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13511": "The mintToken function of a smart contract implementation for CorelliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13510": "The mintToken function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13509": "The mintToken function of a smart contract implementation for IamRich, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13508": "The mintToken function of a smart contract implementation for VITToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13507": "The mintToken function of a smart contract implementation for SLCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13506": "The mintToken function of a smart contract implementation for SDR22, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13505": "The mintToken function of a smart contract implementation for ecogreenhouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13504": "The mintToken function of a smart contract implementation for MMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13503": "The mintToken function of a smart contract implementation for South Park Token Token (SPTKN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13502": "The mintToken function of a smart contract implementation for HeliumNetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13501": "The mintToken function of a smart contract implementation for HRWtoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13500": "The mintToken function of a smart contract implementation for MSXAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13499": "The mintToken function of a smart contract implementation for Crowdsale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13498": "The mintToken function of a smart contract implementation for KAPAYcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13497": "The mintToken function of a smart contract implementation for COBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13496": "The mintToken function of a smart contract implementation for RajTestICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13495": "The mintToken function of a smart contract implementation for KMCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13494": "The mintToken function of a smart contract implementation for SusanTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13493": "The mintToken function of a smart contract implementation for DaddyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13492": "The mintToken function of a smart contract implementation for naga, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13491": "The mintToken function of a smart contract implementation for Carrot, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13490": "The mintToken function of a smart contract implementation for FILM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13489": "The mintToken function of a smart contract implementation for OllisCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13488": "The mintToken function of a smart contract implementation for Crypto Alley Shares (CAST), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13487": "The mintToken function of a smart contract implementation for PlatoToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13486": "The mintToken function of a smart contract implementation for HELP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13485": "The mintToken function of a smart contract implementation for BitcoinAgileToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13484": "The mintToken function of a smart contract implementation for CBRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13483": "The mintToken function of a smart contract implementation for mkethToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13482": "The mintToken function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13481": "The mintToken function of a smart contract implementation for TRIUM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13480": "The mintToken function of a smart contract implementation for QRG, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13479": "The mintToken function of a smart contract implementation for SlidebitsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13478": "The mintToken function of a smart contract implementation for DMPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13477": "The mintToken function of a smart contract implementation for CTESale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13476": "The mintToken function of a smart contract implementation for PhilCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13475": "The mintToken function of a smart contract implementation for VSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13474": "The mintToken function of a smart contract implementation for FansChainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13473": "The mintToken function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13472": "The mint function of a smart contract implementation for CloutToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13471": "The mintToken function of a smart contract implementation for BeyondCashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13470": "The mintToken function of a smart contract implementation for BuyerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13469": "The mintToken function of a smart contract implementation for IcoContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13468": "The mintToken function of a smart contract implementation for Cavecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13467": "The mintToken function of a smart contract implementation for EpiphanyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13466": "The mintToken function of a smart contract implementation for Crystals, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13465": "The mintToken function of a smart contract implementation for PaulyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13464": "The mintToken function of a smart contract implementation for t_swap, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13463": "The mintToken function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13462": "The mintToken function of a smart contract implementation for MoonToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13328": "The transfer, transferFrom, and mint functions of a smart contract implementation for PFGc, an Ethereum token, have an integer overflow.", - "CVE-2018-13327": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for ChuCunLingAIGO (CCLAG), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13326": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Bittelux (BTX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13325": "The _sell function of a smart contract implementation for GROWCHAIN (GROW), an Ethereum token, has an integer overflow.", - "CVE-2018-13233": "The sell function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13232": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13231": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13230": "The sell function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13229": "The sell function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13228": "The sell function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13227": "The sell function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13226": "The sell function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13225": "The sell function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13224": "The sell function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13223": "The sell function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13222": "The sell function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13221": "The sell function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13220": "The sell function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13219": "The sell function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13218": "The sell function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13217": "The sell function of a smart contract implementation for CoinToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13216": "The sell function of a smart contract implementation for GreenMed (GRMD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13215": "The sell function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13214": "The sell function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13213": "The sell function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13212": "The sell function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13211": "The sell function of a smart contract implementation for MyToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13210": "The sell function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13209": "The sell function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13208": "The sell function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13207": "The sell function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13206": "The sell function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13205": "The sell function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13204": "The sell function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13203": "The sellBuyerTokens function of a smart contract implementation for SwapToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13202": "The sell function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13201": "The sell function of a smart contract implementation for TiTok - Ticket Token (Contract Name: MyAdvancedToken7), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13200": "The sell function of a smart contract implementation for DateMe (DMX) (Contract Name: ProgressiveToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13199": "The sell function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13198": "The sell function of a smart contract implementation for STeX Exchange ICO (STE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13197": "The sell function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13196": "The sell function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13195": "The mintToken function of a smart contract implementation for Cranoo (CRN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13194": "The mintToken function of a smart contract implementation for TongTong Coin (TTCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13193": "The mintToken function of a smart contract implementation for hentaisolo (HAO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13192": "The mintToken function of a smart contract implementation for Jobscoin (JOB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13191": "The mintToken function of a smart contract implementation for Super Carbon Coin (SCC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13190": "The mintToken function of a smart contract implementation for DVChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13189": "The mint function of a smart contract implementation for Unolabo (UNLB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13188": "The mintToken function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13187": "The mintToken function of a smart contract implementation for CIBN Live Token (CIBN LIVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13186": "The mintToken function of a smart contract implementation for MMTCoin (MMT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13185": "The mintToken function of a smart contract implementation for appcoins (APPC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13184": "The mintToken function of a smart contract implementation for TravelZedi Token (ZEDI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13183": "The mintToken function of a smart contract implementation for JWC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13182": "The mintToken function of a smart contract implementation for loncoin (LON), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13181": "The mintToken function of a smart contract implementation for Troo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13180": "The mintToken function of a smart contract implementation for IMM Coin (IMC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13179": "The mintToken function of a smart contract implementation for Air-Contact Token (AIR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13178": "The mintToken function of a smart contract implementation for ECToints (ECT) (Contract Name: ECPoints), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13177": "The mintToken function of a smart contract implementation for MiningRigRentals Token (MRR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13176": "The mintToken function of a smart contract implementation for Trust Zen Token (ZEN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13175": "The mintToken function of a smart contract implementation for AIChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13174": "The mintToken function of a smart contract implementation for CryptoABS (ABS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13173": "The mintToken function of a smart contract implementation for EliteShipperToken (ESHIP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13172": "The mintToken function of a smart contract implementation for bzxcoin (BZX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13171": "The mintToken function of a smart contract implementation for LadaToken (LDT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13170": "The mintToken function of a smart contract implementation for Snoqualmie Coin (SNOW), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13169": "The mintToken function of a smart contract implementation for Ethereum Cash Pro (ECP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13168": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO) (Contract Name: NetkillerBatchToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13167": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13166": "The mintToken function of a smart contract implementation for AthletiCoin (ATHA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13165": "The mintToken function of a smart contract implementation for JustDCoin (JustD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13164": "The mintToken function of a smart contract implementation for EPPCOIN (EPP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13163": "The mintToken function of a smart contract implementation for Ethernet Cash (ENC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13162": "The mintToken function of a smart contract implementation for ALEX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13161": "The mintToken function of a smart contract implementation for MultiGames (MLT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13160": "The mintToken function of a smart contract implementation for etktokens (ETK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13159": "The mintToken function of a smart contract implementation for bankcoin (BNK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13158": "The mintToken function of a smart contract implementation for AssetToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13157": "The mintToken function of a smart contract implementation for CryptonitexCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13156": "The mintToken function of a smart contract implementation for bonusToken (BNS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13155": "The mintToken function of a smart contract implementation for GEMCHAIN (GEM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13146": "The mintToken, buy, and sell functions of a smart contract implementation for LEF, an Ethereum token, have an integer overflow.", - "CVE-2018-13145": "The mintToken function of a smart contract implementation for JavaSwapTest (JST), an Ethereum token, has an integer overflow.", - "CVE-2018-13144": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Pandora (PDX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13132": "Spadeico is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13131": "SpadePreSale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13130": "Bitotal (TFUND) is a smart contract running on Ethereum. The mintTokens function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13129": "SP8DE Token (SPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13128": "Etherty Token (ETY) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13127": "SP8DE PreSale Token (DSPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13126": "MoxyOnePresale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13113": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Easy Trading Token (ETT), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13092": "The mintToken function of a smart contract implementation for Reimburse Token (REIM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13091": "The mintToken function of a smart contract implementation for sumocoin (SUMO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13090": "The mintToken function of a smart contract implementation for YiTongCoin (YTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13089": "The mintToken function of a smart contract implementation for Universal Coin (UCOIN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13088": "The mintToken function of a smart contract implementation for Futures Pease (FP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13087": "The mintToken function of a smart contract implementation for Coinstar (CSTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13086": "The mintToken function of a smart contract implementation for IADOWR Coin (IAD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13085": "The mintToken function of a smart contract implementation for FreeCoin (FREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13084": "The mintToken function of a smart contract implementation for Good Time Coin (GTY), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13083": "The mintToken function of a smart contract implementation for Plaza Token (PLAZA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13082": "The mintToken function of a smart contract implementation for MODI Token (MODI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13081": "The mintToken function of a smart contract implementation for GZS Token (GZS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13080": "The mintToken function of a smart contract implementation for Goutex (GTX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13079": "The mintToken function of a smart contract implementation for GoodTo (GTO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13078": "The mintToken function of a smart contract implementation for Jitech (JTH), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13077": "The mintToken function of a smart contract implementation for CTB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13076": "The mintToken function of a smart contract implementation for Betcash (BC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13075": "The mintToken function of a smart contract implementation for Carbon Exchange Coin Token (CEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13074": "The mintToken function of a smart contract implementation for FIBToken (FIB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13073": "The mintToken function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13072": "The mintToken function of a smart contract implementation for Coffeecoin (COFFEE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13071": "The mintToken function of a smart contract implementation for CCindex10 (T10), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13070": "The mintToken function of a smart contract implementation for EncryptedToken (ECC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13069": "The mintToken function of a smart contract implementation for DYchain (DYC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13068": "The mintToken function of a smart contract implementation for AzurionToken (AZU), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13041": "The mint function of a smart contract implementation for Link Platform (LNK), an Ethereum ERC20 token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-12975": "The random() function of the smart contract implementation for CryptoSaga, an Ethereum game, generates a random value with publicly readable variables such as timestamp, the current block's blockhash, and a private variable (which can be read with a getStorageAt call). Therefore, attackers can precompute the random number and manipulate the game (e.g., get powerful characters or get critical damages).", - "CVE-2018-12959": "The approveAndCall function of a smart contract implementation for Aditus (ADI), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all contract balances into their account).", - "CVE-2018-12885": "The randMod() function of the smart contract implementation for MyCryptoChamp, an Ethereum game, generates a random value with publicly readable variables such as the current block information and a private variable, (which can be read with a getStorageAt call). Therefore, attackers can get powerful champs/items and get rewards.", - "CVE-2018-12703": "The approveAndCallcode function of a smart contract implementation for Block 18 (18T), an tradable Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", - "CVE-2018-12702": "The approveAndCallcode function of a smart contract implementation for Globalvillage ecosystem (GVE), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", - "CVE-2018-12511": "In the mintToken function of a smart contract implementation for Substratum (SUB), an Ethereum ERC20 token, the administrator can control mintedAmount, leverage an integer overflow, and modify a user account's balance arbitrarily.", - "CVE-2018-12454": "The _addguess function of a simplelottery smart contract implementation for 1000 Guess, an Ethereum gambling game, generates a random value with publicly readable variables such as the current block information and a private variable (which can be read with a getStorageAt call). Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-12230": "An wrong logical check identified in the transferFrom function of a smart contract implementation for RemiCoin (RMC), an Ethereum ERC20 token, allows the attacker to steal tokens or conduct resultant integer underflow attacks.", - "CVE-2018-12084": "The mintToken function of a smart contract implementation for BitAsean (BAS), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12083": "The mintToken function of a smart contract implementation for GOAL Bonanza (GOAL), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12082": "The mintToken function of a smart contract implementation for Fujinto (NTO), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12081": "The mintToken function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12080": "The mintToken function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12079": "The mintToken function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12078": "The mintToken function of a smart contract implementation for PolyAI (AI), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12070": "The sell function of a smart contract implementation for SEC, a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12068": "The sell function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12067": "The sell function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12063": "The sell function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12062": "The sell function of a smart contract implementation for SwftCoin (SWFTC), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12056": "The maxRandom function of a smart contract implementation for All For One, an Ethereum gambling game, generates a random value with publicly readable variables because the _seed value can be retrieved with a getStorageAt call. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-12025": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", - "CVE-2018-11687": "An integer overflow in the distributeBTR function of a smart contract implementation for Bitcoin Red (BTCR), an Ethereum ERC20 token, allows the owner to accomplish an unauthorized increase of digital assets by providing a large address[] array, as exploited in the wild in May 2018, aka the \"ownerUnderflow\" issue.", - "CVE-2018-11561": "An integer overflow in the unprotected distributeToken function of a smart contract implementation for EETHER (EETHER), an Ethereum ERC20 token, will lead to an unauthorized increase of an attacker's digital assets.", - "CVE-2018-11446": "The buy function of a smart contract implementation for Gold Reward (GRX), an Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the buyer because of overflow of the multiplication of its argument amount and a manipulable variable buyPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-11429": "ATLANT (ATL) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-11411": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect.", - "CVE-2018-11335": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-11329": "The DrugDealer function of a smart contract implementation for Ether Cartel, an Ethereum game, allows attackers to take over the contract's ownership, aka ceoAnyone. After that, all the digital assets (including Ether balance and tokens) might be manipulated by the attackers, as exploited in the wild in May 2018.", - "CVE-2018-11239": "An integer overflow in the _transfer function of a smart contract implementation for Hexagon (HXG), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets by providing a _to argument in conjunction with a large _value argument, as exploited in the wild in May 2018, aka the \"burnOverflow\" issue.", - "CVE-2018-10973": "An integer overflow in the transferMulti function of a smart contract implementation for KoreaShow, an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _value parameters.", - "CVE-2018-10944": "The request_dividend function of a smart contract implementation for ROC (aka Rasputin Online Coin), an Ethereum ERC20 token, allows attackers to steal all of the contract's Ether.", - "CVE-2018-10769": "The transferProxy and approveProxy functions of a smart contract implementation for SmartMesh (SMT), an Ethereum ERC20 token, allow attackers to accomplish an unauthorized transfer of digital assets because replay attacks can occur with the same-named functions (with the same signatures) in other tokens: First (FST), GG Token (GG), M2C Mesh Network (MTC), M2C Mesh Network (mesh), and UG Token (UGT).", - "CVE-2018-10706": "An integer overflow in the transferMulti function of a smart contract implementation for Social Chain (SCA), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets, aka the \"multiOverflow\" issue.", - "CVE-2018-10705": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", - "CVE-2018-10666": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", - "CVE-2018-10468": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue.", - "CVE-2018-10376": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", - "CVE-2018-10299": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", - "CVE-2017-14457": "An exploitable information leak/denial of service vulnerability exists in the libevm (Ethereum Virtual Machine) `create2` opcode handler of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read leading to memory disclosure or denial of service. An attacker can create/send malicious a smart contract to trigger this vulnerability.", - "CVE-2017-14451": "An exploitable out-of-bounds read vulnerability exists in libevm (Ethereum Virtual Machine) of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read which can subsequently trigger an out-of-bounds write resulting in remote code execution. An attacker can create/send malicious smart contract to trigger this vulnerability." -} \ No newline at end of file diff --git a/data_full/CVE_label/CVE2label.json b/data_full/CVE_label/CVE2label.json deleted file mode 100644 index ad74a711..00000000 --- a/data_full/CVE_label/CVE2label.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "CVE-2018-10299": "Integer Overflow", - "CVE-2018-10376": "Integer Overflow", - "CVE-2018-11335": "Integer Overflow", - "CVE-2018-13836": "Integer Overflow", - "CVE-2018-17882": "Integer Overflow", - "CVE-2018-10468": "Wrong Logic", - "CVE-2018-11411": "Wrong Logic", - "CVE-2018-12025": "Wrong Logic", - "CVE-2021-3004": "Wrong Logic", - "CVE-2018-15552": "Bad Randomness", - "CVE-2018-14715": "Bad Randomness", - "CVE-2018-17877": "Bad Randomness", - "CVE-2018-10666": "Access Control", - "CVE-2018-10705": "Access Control", - "CVE-2018-19830": "Access Control", - "CVE-2019-15078": "Typo Constructor", - "CVE-2019-15079": "Typo Constructor", - "CVE-2019-15080": "Typo Constructor", - "CVE-2018-18425": "Token Devalue" -} \ No newline at end of file diff --git a/data_sample/CVE/2018-13071.sol b/data_sample/CVE/2018-13071.sol deleted file mode 100644 index 66840e87..00000000 --- a/data_sample/CVE/2018-13071.sol +++ /dev/null @@ -1,231 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-11-18 -*/ - -//ERC20 Token -pragma solidity ^0.4.17; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "T10 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /*************************************************/ - mapping(address=>uint256) public indexes; - mapping(uint256=>address) public addresses; - uint256 public lastIndex = 0; - /*************************************************/ - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - /*****************************************/ - addresses[1] = msg.sender; - indexes[msg.sender] = 1; - lastIndex = 1; - /*****************************************/ - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract CCindexToken is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 40000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "CCindex10"; - string public tokenSymbol = "T10"; - function CCindexToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - // if(!canHolderTransfer()) throw; - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - if(_value > 0){ - if(balanceOf[msg.sender] == 0){ - addresses[indexes[msg.sender]] = addresses[lastIndex]; - indexes[addresses[lastIndex]] = indexes[msg.sender]; - indexes[msg.sender] = 0; - delete addresses[lastIndex]; - lastIndex--; - } - if(indexes[_to]==0){ - lastIndex++; - addresses[lastIndex] = _to; - indexes[_to] = lastIndex; - } - } - } - - function getAddresses() constant returns (address[]){ - address[] memory addrs = new address[](lastIndex); - for(uint i = 0; i < lastIndex; i++){ - addrs[i] = addresses[i+1]; - } - return addrs; - } - - function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { - // if(balanceOf[owner] < _amount) throw; - uint distributed = 0; - require(startIndex < endIndex); - - for(uint i = startIndex; i < lastIndex; i++){ - address holder = addresses[i+1]; - uint reward = balanceOf[holder] * 3 / 100; - balanceOf[holder] += reward; - distributed += reward; - Transfer(0, holder, reward); - } - - // balanceOf[owner] -= distributed; - totalSupply += distributed; - return distributed; - } - - /************************************************************************/ - - /************************************************************************/ - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_sample/CVE/2018-13072.sol b/data_sample/CVE/2018-13072.sol deleted file mode 100644 index c19de863..00000000 --- a/data_sample/CVE/2018-13072.sol +++ /dev/null @@ -1,168 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-08-16 -*/ - -pragma solidity ^0.4.2; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - revert(); // Prevents accidental sending of ether - } -} - -contract Coffeecoin is owned, token { - - uint public buyRate = 4000; // price of one token - bool public isSelling = true; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function Coffeecoin( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (frozenAccount[msg.sender]) revert(); // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); // Check if frozen - if (balanceOf[_from] < _value) revert(); // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows - if (_value > allowance[_from][msg.sender]) revert(); // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - - function buy() payable { - if(isSelling == false) revert(); - uint amount = msg.value * buyRate; // calculates the amount - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[owner] -= amount; // subtracts amount from seller's balance - Transfer(owner, msg.sender, amount); // execute an event reflecting the change - } - - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_sample/CVE/2018-13073.sol b/data_sample/CVE/2018-13073.sol deleted file mode 100644 index 58a0f14c..00000000 --- a/data_sample/CVE/2018-13073.sol +++ /dev/null @@ -1,175 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2017-10-30 -*/ - -//ERC20 Token -pragma solidity ^0.4.17; -contract owned { - address public owner; - - function owned() { - owner = msg.sender; - } - - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} - -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } - -contract token { - /* Public variables of the token */ - string public standard = "ETHEREUMBLACK"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - - /* This creates an array with all balances */ - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - /* This generates a public event on the blockchain that will notify clients */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens - totalSupply = initialSupply; // Update total supply - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - decimals = decimalUnits; // Amount of decimals for display purposes - } - - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - /* Allow another contract to spend some tokens in your behalf */ - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /* Approve and then communicate the approved contract in a single tx */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /* A contract attempts _ to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - /* This unnamed function is called whenever someone tries to send ether to it */ - function () { - throw; // Prevents accidental sending of ether - } -} - -contract ETHEREUMBLACK is owned, token { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping(address=>bool) public frozenAccount; - - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - uint256 public constant initialSupply = 200000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "ETHEREUMBLACK"; - string public tokenSymbol = "ETCBK"; - function ETHEREUMBLACK() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - /* Send coins */ - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (frozenAccount[msg.sender]) throw; // Check if frozen - balanceOf[msg.sender] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place - } - - - /* A contract attempts to get the coins */ - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; // Check if frozen - if (balanceOf[_from] < _value) throw; // Check if the sender has enough - if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows - if (_value > allowance[_from][msg.sender]) throw; // Check allowance - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - - function buy() payable { - uint amount = msg.value / buyPrice; // calculates the amount - if (balanceOf[this] < amount) throw; // checks if it has enough to sell - balanceOf[msg.sender] += amount; // adds the amount to buyer's balance - balanceOf[this] -= amount; // subtracts amount from seller's balance - Transfer(this, msg.sender, amount); // execute an event reflecting the change - } - - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell - balanceOf[this] += amount; // adds the amount to owner's balance - balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance - if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important - throw; // to do this last to avoid recursion attacks - } else { - Transfer(msg.sender, this, amount); // executes an event reflecting on the change - } - } -} \ No newline at end of file diff --git a/data_sample/CVE/2018-13074.sol b/data_sample/CVE/2018-13074.sol deleted file mode 100644 index e63dfe32..00000000 --- a/data_sample/CVE/2018-13074.sol +++ /dev/null @@ -1,227 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2018-06-29 -*/ - -pragma solidity ^0.4.16; - -contract owned { - address public owner; - - function owned() public { - owner = msg.sender; - } - - modifier onlyOwner { - require(msg.sender == owner); - _; - } - - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} - -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } - -contract TokenERC20 { - // Public variables of the token - string public name; - string public symbol; - uint8 public decimals = 18; - // 18 decimals is the strongly suggested default, avoid changing it - uint256 public totalSupply; - uint256 initialSupply=5000000000; - string tokenName='FIB'; - string tokenSymbol='FIB'; - - // This creates an array with all balances - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - - // This generates a public event on the blockchain that will notify clients - event Transfer(address indexed from, address indexed to, uint256 value); - - // This notifies clients about the amount burnt - event Burn(address indexed from, uint256 value); - - /** - * Constrctor function - * - * Initializes contract with initial supply tokens to the creator of the contract - */ - function TokenERC20( - - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount - balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens - name = tokenName; // Set the name for display purposes - symbol = tokenSymbol; // Set the symbol for display purposes - } - - /** - * Internal transfer, only can be called by this contract - */ - function _transfer(address _from, address _to, uint _value) internal { - // Prevent transfer to 0x0 address. Use burn() instead - require(_to != 0x0); - // Check if the sender has enough - require(balanceOf[_from] >= _value); - // Check for overflows - require(balanceOf[_to] + _value > balanceOf[_to]); - // Save this for an assertion in the future - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - // Subtract from the sender - balanceOf[_from] -= _value; - // Add the same to the recipient - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - // Asserts are used to use static analysis to find bugs in your code. They should never fail - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - - /** - * Transfer tokens - * - * Send `_value` tokens to `_to` from your account - * - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - - /** - * Transfer tokens from other address - * - * Send `_value` tokens to `_to` in behalf of `_from` - * - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value the amount to send - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); // Check allowance - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - - /** - * Set allowance for other address - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - */ - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - - /** - * Set allowance for other address and notify - * - * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it - * - * @param _spender The address authorized to spend - * @param _value the max amount they can spend - * @param _extraData some extra information to send to the approved contract - */ - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - - /** - * Destroy tokens - * - * Remove `_value` tokens from the system irreversibly - * - * @param _value the amount of money to burn - */ - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); // Check if the sender has enough - balanceOf[msg.sender] -= _value; // Subtract from the sender - totalSupply -= _value; // Updates totalSupply - emit Burn(msg.sender, _value); - return true; - } - - /** - * Destroy tokens from other account - * - * Remove `_value` tokens from the system irreversibly on behalf of `_from`. - * - * @param _from the address of the sender - * @param _value the amount of money to burn - */ - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); // Check if the targeted balance is enough - require(_value <= allowance[_from][msg.sender]); // Check allowance - balanceOf[_from] -= _value; // Subtract from the targeted balance - allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance - totalSupply -= _value; // Update totalSupply - emit Burn(_from, _value); - return true; - } -} - -/******************************************/ -/* ADVANCED TOKEN STARTS HERE */ -/******************************************/ - -contract FIBToken is owned, TokenERC20 { - - uint256 public sellPrice; - uint256 public buyPrice; - - mapping (address => bool) public frozenAccount; - - /* This generates a public event on the blockchain that will notify clients */ - event FrozenFunds(address target, bool frozen); - - /* Initializes contract with initial supply tokens to the creator of the contract */ - function FIBToken( - - ) TokenERC20() public {} - - /* Internal transfer, only can be called by this contract */ - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead - require (balanceOf[_from] >= _value); // Check if the sender has enough - require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows - require(!frozenAccount[_from]); // Check if sender is frozen - require(!frozenAccount[_to]); // Check if recipient is frozen - balanceOf[_from] -= _value; // Subtract from the sender - balanceOf[_to] += _value; // Add the same to the recipient - emit Transfer(_from, _to, _value); - } - - /// @notice Create `mintedAmount` tokens and send it to `target` - /// @param target Address to receive the tokens - /// @param mintedAmount the amount of tokens it will receive - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - - /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens - /// @param target Address to be frozen - /// @param freeze either to freeze it or not - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } - - -} \ No newline at end of file diff --git a/data_sample/CVE_clean/2018-13071.sol b/data_sample/CVE_clean/2018-13071.sol deleted file mode 100644 index 1d178d14..00000000 --- a/data_sample/CVE_clean/2018-13071.sol +++ /dev/null @@ -1,171 +0,0 @@ -pragma solidity ^0.4.17; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "T10 1.0"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - mapping(address=>uint256) public indexes; - mapping(uint256=>address) public addresses; - uint256 public lastIndex = 0; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - addresses[1] = msg.sender; - indexes[msg.sender] = 1; - lastIndex = 1; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract CCindexToken is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 40000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "CCindex10"; - string public tokenSymbol = "T10"; - function CCindexToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - if(_value > 0){ - if(balanceOf[msg.sender] == 0){ - addresses[indexes[msg.sender]] = addresses[lastIndex]; - indexes[addresses[lastIndex]] = indexes[msg.sender]; - indexes[msg.sender] = 0; - delete addresses[lastIndex]; - lastIndex--; - } - if(indexes[_to]==0){ - lastIndex++; - addresses[lastIndex] = _to; - indexes[_to] = lastIndex; - } - } - } - function getAddresses() constant returns (address[]){ - address[] memory addrs = new address[](lastIndex); - for(uint i = 0; i < lastIndex; i++){ - addrs[i] = addresses[i+1]; - } - return addrs; - } - function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { - uint distributed = 0; - require(startIndex < endIndex); - for(uint i = startIndex; i < lastIndex; i++){ - address holder = addresses[i+1]; - uint reward = balanceOf[holder] * 3 / 100; - balanceOf[holder] += reward; - distributed += reward; - Transfer(0, holder, reward); - } - totalSupply += distributed; - return distributed; - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_sample/CVE_clean/2018-13072.sol b/data_sample/CVE_clean/2018-13072.sol deleted file mode 100644 index ff7b130d..00000000 --- a/data_sample/CVE_clean/2018-13072.sol +++ /dev/null @@ -1,125 +0,0 @@ -pragma solidity ^0.4.2; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) revert(); - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - revert(); - } -} -contract Coffeecoin is owned, token { - uint public buyRate = 4000; - bool public isSelling = true; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function Coffeecoin( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (frozenAccount[msg.sender]) revert(); - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) revert(); - if (balanceOf[_from] < _value) revert(); - if (balanceOf[_to] + _value < balanceOf[_to]) revert(); - if (_value > allowance[_from][msg.sender]) revert(); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - Transfer(0, owner, mintedAmount); - Transfer(owner, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setBuyRate(uint newBuyRate) onlyOwner { - buyRate = newBuyRate; - } - function setSelling(bool newStatus) onlyOwner { - isSelling = newStatus; - } - function buy() payable { - if(isSelling == false) revert(); - uint amount = msg.value * buyRate; - balanceOf[msg.sender] += amount; - balanceOf[owner] -= amount; - Transfer(owner, msg.sender, amount); - } - function withdrawToOwner(uint256 amountWei) onlyOwner { - owner.transfer(amountWei); - } -} \ No newline at end of file diff --git a/data_sample/CVE_clean/2018-13073.sol b/data_sample/CVE_clean/2018-13073.sol deleted file mode 100644 index ac445982..00000000 --- a/data_sample/CVE_clean/2018-13073.sol +++ /dev/null @@ -1,131 +0,0 @@ -pragma solidity ^0.4.17; -contract owned { - address public owner; - function owned() { - owner = msg.sender; - } - modifier onlyOwner { - if (msg.sender != owner) throw; - _; - } - function transferOwnership(address newOwner) onlyOwner { - owner = newOwner; - } -} -contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } -contract token { - string public standard = "ETHEREUMBLACK"; - string public name; - string public symbol; - uint8 public decimals; - uint256 public totalSupply; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - function token( - uint256 initialSupply, - string tokenName, - uint8 decimalUnits, - string tokenSymbol - ) { - balanceOf[msg.sender] = initialSupply; - totalSupply = initialSupply; - name = tokenName; - symbol = tokenSymbol; - decimals = decimalUnits; - } - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function approve(address _spender, uint256 _value) - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function () { - throw; - } -} -contract ETHEREUMBLACK is owned, token { - uint256 public sellPrice; - uint256 public buyPrice; - mapping(address=>bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - uint256 public constant initialSupply = 200000000 * 10**18; - uint8 public constant decimalUnits = 18; - string public tokenName = "ETHEREUMBLACK"; - string public tokenSymbol = "ETCBK"; - function ETHEREUMBLACK() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} - function transfer(address _to, uint256 _value) { - if (balanceOf[msg.sender] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (frozenAccount[msg.sender]) throw; - balanceOf[msg.sender] -= _value; - balanceOf[_to] += _value; - Transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { - if (frozenAccount[_from]) throw; - if (balanceOf[_from] < _value) throw; - if (balanceOf[_to] + _value < balanceOf[_to]) throw; - if (_value > allowance[_from][msg.sender]) throw; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - allowance[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); - return true; - } - function mintToken(address target, uint256 mintedAmount) onlyOwner { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - Transfer(0, this, mintedAmount); - Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner { - frozenAccount[target] = freeze; - FrozenFunds(target, freeze); - } - function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { - sellPrice = newSellPrice; - buyPrice = newBuyPrice; - } - function buy() payable { - uint amount = msg.value / buyPrice; - if (balanceOf[this] < amount) throw; - balanceOf[msg.sender] += amount; - balanceOf[this] -= amount; - Transfer(this, msg.sender, amount); - } - function sell(uint256 amount) { - if (balanceOf[msg.sender] < amount ) throw; - balanceOf[this] += amount; - balanceOf[msg.sender] -= amount; - if (!msg.sender.send(amount * sellPrice)) { - throw; - } else { - Transfer(msg.sender, this, amount); - } - } -} \ No newline at end of file diff --git a/data_sample/CVE_clean/2018-13074.sol b/data_sample/CVE_clean/2018-13074.sol deleted file mode 100644 index 871884f0..00000000 --- a/data_sample/CVE_clean/2018-13074.sol +++ /dev/null @@ -1,112 +0,0 @@ -pragma solidity ^0.4.16; -contract owned { - address public owner; - function owned() public { - owner = msg.sender; - } - modifier onlyOwner { - require(msg.sender == owner); - _; - } - function transferOwnership(address newOwner) onlyOwner public { - owner = newOwner; - } -} -interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } -contract TokenERC20 { - string public name; - string public symbol; - uint8 public decimals = 18; - uint256 public totalSupply; - uint256 initialSupply=5000000000; - string tokenName='FIB'; - string tokenSymbol='FIB'; - mapping (address => uint256) public balanceOf; - mapping (address => mapping (address => uint256)) public allowance; - event Transfer(address indexed from, address indexed to, uint256 value); - event Burn(address indexed from, uint256 value); - function TokenERC20( - ) public { - totalSupply = initialSupply * 10 ** uint256(decimals); - balanceOf[msg.sender] = totalSupply; - name = tokenName; - symbol = tokenSymbol; - } - function _transfer(address _from, address _to, uint _value) internal { - require(_to != 0x0); - require(balanceOf[_from] >= _value); - require(balanceOf[_to] + _value > balanceOf[_to]); - uint previousBalances = balanceOf[_from] + balanceOf[_to]; - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - assert(balanceOf[_from] + balanceOf[_to] == previousBalances); - } - function transfer(address _to, uint256 _value) public { - _transfer(msg.sender, _to, _value); - } - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - require(_value <= allowance[_from][msg.sender]); - allowance[_from][msg.sender] -= _value; - _transfer(_from, _to, _value); - return true; - } - function approve(address _spender, uint256 _value) public - returns (bool success) { - allowance[msg.sender][_spender] = _value; - return true; - } - function approveAndCall(address _spender, uint256 _value, bytes _extraData) - public - returns (bool success) { - tokenRecipient spender = tokenRecipient(_spender); - if (approve(_spender, _value)) { - spender.receiveApproval(msg.sender, _value, this, _extraData); - return true; - } - } - function burn(uint256 _value) public returns (bool success) { - require(balanceOf[msg.sender] >= _value); - balanceOf[msg.sender] -= _value; - totalSupply -= _value; - emit Burn(msg.sender, _value); - return true; - } - function burnFrom(address _from, uint256 _value) public returns (bool success) { - require(balanceOf[_from] >= _value); - require(_value <= allowance[_from][msg.sender]); - balanceOf[_from] -= _value; - allowance[_from][msg.sender] -= _value; - totalSupply -= _value; - emit Burn(_from, _value); - return true; - } -} -contract FIBToken is owned, TokenERC20 { - uint256 public sellPrice; - uint256 public buyPrice; - mapping (address => bool) public frozenAccount; - event FrozenFunds(address target, bool frozen); - function FIBToken( - ) TokenERC20() public {} - function _transfer(address _from, address _to, uint _value) internal { - require (_to != 0x0); - require (balanceOf[_from] >= _value); - require (balanceOf[_to] + _value >= balanceOf[_to]); - require(!frozenAccount[_from]); - require(!frozenAccount[_to]); - balanceOf[_from] -= _value; - balanceOf[_to] += _value; - emit Transfer(_from, _to, _value); - } - function mintToken(address target, uint256 mintedAmount) onlyOwner public { - balanceOf[target] += mintedAmount; - totalSupply += mintedAmount; - emit Transfer(0, this, mintedAmount); - emit Transfer(this, target, mintedAmount); - } - function freezeAccount(address target, bool freeze) onlyOwner public { - frozenAccount[target] = freeze; - emit FrozenFunds(target, freeze); - } -} \ No newline at end of file diff --git a/data_sample/CVE_label/CVE2description.json b/data_sample/CVE_label/CVE2description.json deleted file mode 100644 index e05f122c..00000000 --- a/data_sample/CVE_label/CVE2description.json +++ /dev/null @@ -1,564 +0,0 @@ -{ - "CVE-2023-41052": "Vyper is a Pythonic Smart Contract Language. In affected versions the order of evaluation of the arguments of the builtin functions `uint256_addmod`, `uint256_mulmod`, `ecadd` and `ecmul` does not follow source order. This behaviour is problematic when the evaluation of one of the arguments produces side effects that other arguments depend on. A patch is currently being developed on pull request #3583. When using builtins from the list above, users should make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", - "CVE-2023-40015": "Vyper is a Pythonic Smart Contract Language. For the following (probably non-exhaustive) list of expressions, the compiler evaluates the arguments from right to left instead of left to right. `unsafe_add, unsafe_sub, unsafe_mul, unsafe_div, pow_mod256, |, &, ^ (bitwise operators), bitwise_or (deprecated), bitwise_and (deprecated), bitwise_xor (deprecated), raw_call, <, >, <=, >=, ==, !=, in, not in (when lhs and rhs are enums)`. This behaviour becomes a problem when the evaluation of one of the arguments produces side effects that other arguments depend on. The following expressions can produce side-effect: state modifying external call , state modifying internal call, `raw_call`, `pop()` when used on a Dynamic Array stored in the storage, `create_minimal_proxy_to`, `create_copy_of`, `create_from_blueprint`. This issue has not yet been patched. Users are advised to make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", - "CVE-2023-40014": "OpenZeppelin Contracts is a library for secure smart contract development. Starting in version 4.0.0 and prior to version 4.9.3, contracts using `ERC2771Context` along with a custom trusted forwarder may see `_msgSender` return `address(0)` in calls that originate from the forwarder with calldata shorter than 20 bytes. This combination of circumstances does not appear to be common, in particular it is not the case for `MinimalForwarder` from OpenZeppelin Contracts, or any deployed forwarder the team is aware of, given that the signer address is appended to all calls that originate from these forwarders. The problem has been patched in v4.9.3.", - "CVE-2023-39363": "Vyer is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a `.vy` contract compiled with `vyper` versions `0.2.15`, `0.2.16`, or `0.3.0`; a primary function that utilizes the `@nonreentrant` decorator with a specific `key` and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same `key` and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.", - "CVE-2023-34459": "OpenZeppelin Contracts is a library for smart contract development. Starting in version 4.7.0 and prior to version 4.9.2, when the `verifyMultiProof`, `verifyMultiProofCalldata`, `procesprocessMultiProof`, or `processMultiProofCalldat` functions are in use, it is possible to construct merkle trees that allow forging a valid multiproof for an arbitrary set of leaves. A contract may be vulnerable if it uses multiproofs for verification and the merkle tree that is processed includes a node with value 0 at depth 1 (just under the root). This could happen inadvertedly for balanced trees with 3 leaves or less, if the leaves are not hashed. This could happen deliberately if a malicious tree builder includes such a node in the tree. A contract is not vulnerable if it uses single-leaf proving (`verify`, `verifyCalldata`, `processProof`, or `processProofCalldata`), or if it uses multiproofs with a known tree that has hashed leaves. Standard merkle trees produced or validated with the @openzeppelin/merkle-tree library are safe. The problem has been patched in version 4.9.2. Some workarounds are available. For those using multiproofs: When constructing merkle trees hash the leaves and do not insert empty nodes in your trees. Using the @openzeppelin/merkle-tree package eliminates this issue. Do not accept user-provided merkle roots without reconstructing at least the first level of the tree. Verify the merkle tree structure by reconstructing it from the leaves.", - "CVE-2023-34449": "ink! is an embedded domain specific language to write smart contracts in Rust for blockchains built on the Substrate framework. Starting in version 4.0.0 and prior to version 4.2.1, the return value when using delegate call mechanics, either through `CallBuilder::delegate` or `ink_env::invoke_contract_delegate`, is decoded incorrectly. This bug was related to the mechanics around decoding a call's return buffer, which was changed as part of pull request 1450. Since this feature was only released in ink! 4.0.0, no previous versions are affected. Users who have an ink! 4.x series contract should upgrade to 4.2.1 to receive a patch.", - "CVE-2023-34234": "OpenZeppelin Contracts is a library for smart contract development. By frontrunning the creation of a proposal, an attacker can become the proposer and gain the ability to cancel it. The attacker can do this repeatedly to try to prevent a proposal from being proposed at all. This impacts the `Governor` contract in v4.9.0 only, and the `GovernorCompatibilityBravo` contract since v4.3.0. This problem has been patched in 4.9.1 by introducing opt-in frontrunning protection. Users are advised to upgrade. Users unable to upgrade may submit the proposal creation transaction to an endpoint with frontrunning protection as a workaround.", - "CVE-2023-32675": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In contracts with more than one regular nonpayable function, it is possible to send funds to the default function, even if the default function is marked `nonpayable`. This applies to contracts compiled with vyper versions prior to 0.3.8. This issue was fixed by the removal of the global `calldatasize` check in commit `02339dfda`. Users are advised to upgrade to version 0.3.8. Users unable to upgrade should avoid use of nonpayable default functions.", - "CVE-2023-32059": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, internal calls with default arguments are compiled incorrectly. Depending on the number of arguments provided in the call, the defaults are added not right-to-left, but left-to-right. If the types are incompatible, typechecking is bypassed. The ability to pass kwargs to internal functions is an undocumented feature that is not well known about. The issue is patched in version 0.3.8.", - "CVE-2023-32058": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, due to missing overflow check for loop variables, by assigning the iterator of a loop to a variable, it is possible to overflow the type of the latter. The issue seems to happen only in loops of type `for i in range(a, a + N)` as in loops of type `for i in range(start, stop)` and `for i in range(stop)`, the compiler is able to raise a `TypeMismatch` when trying to overflow the variable. The problem has been patched in version 0.3.8.", - "CVE-2023-31146": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, during codegen, the length word of a dynarray is written before the data, which can result in out-of-bounds array access in the case where the dynarray is on both the lhs and rhs of an assignment. The issue can cause data corruption across call frames. The expected behavior is to revert due to out-of-bounds array access. Version 0.3.8 contains a patch for this issue.", - "CVE-2023-30837": "Vyper is a pythonic smart contract language for the EVM. The storage allocator does not guard against allocation overflows in versions prior to 0.3.8. An attacker can overwrite the owner variable. This issue was fixed in version 0.3.8.", - "CVE-2023-30629": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions 0.3.1 through 0.3.7, the Vyper compiler generates the wrong bytecode. Any contract that uses the `raw_call` with `revert_on_failure=False` and `max_outsize=0` receives the wrong response from `raw_call`. Depending on the memory garbage, the result can be either `True` or `False`. A patch is available and, as of time of publication, anticipated to be part of Vyper 0.3.8. As a workaround, one may always put `max_outsize>0`.", - "CVE-2023-30542": "OpenZeppelin Contracts is a library for secure smart contract development. The proposal creation entrypoint (`propose`) in `GovernorCompatibilityBravo` allows the creation of proposals with a `signatures` array shorter than the `calldatas` array. This causes the additional elements of the latter to be ignored, and if the proposal succeeds the corresponding actions would eventually execute without any calldata. The `ProposalCreated` event correctly represents what will eventually execute, but the proposal parameters as queried through `getActions` appear to respect the original intended calldata. This issue has been patched in 4.8.3. As a workaround, ensure that all proposals that pass through governance have equal length `signatures` and `calldatas` parameters.", - "CVE-2023-30541": "OpenZeppelin Contracts is a library for secure smart contract development. A function in the implementation contract may be inaccessible if its selector clashes with one of the proxy's own selectors. Specifically, if the clashing function has a different signature with incompatible ABI encoding, the proxy could revert while attempting to decode the arguments from calldata. The probability of an accidental clash is negligible, but one could be caused deliberately and could cause a reduction in availability. The issue has been fixed in version 4.8.3. As a workaround if a function appears to be inaccessible for this reason, it may be possible to craft the calldata such that ABI decoding does not fail at the proxy and the function is properly proxied through.", - "CVE-2023-26488": "OpenZeppelin Contracts is a library for secure smart contract development. The ERC721Consecutive contract designed for minting NFTs in batches does not update balances when a batch has size 1 and consists of a single token. Subsequent transfers from the receiver of that token may overflow the balance as reported by `balanceOf`. The issue exclusively presents with batches of size 1. The issue has been patched in 4.8.2.", - "CVE-2023-23940": "OpenZeppelin Contracts for Cairo is a library for secure smart contract development written in Cairo for StarkNet, a decentralized ZK Rollup. `is_valid_eth_signature` is missing a call to `finalize_keccak` after calling `verify_eth_signature`. As a result, any contract using `is_valid_eth_signature` from the account library (such as the `EthAccount` preset) is vulnerable to a malicious sequencer. Specifically, the malicious sequencer would be able to bypass signature validation to impersonate an instance of these accounts. The issue has been patched in 0.6.1.", - "CVE-2022-46173": "Elrond-GO is a go implementation for the Elrond Network protocol. Versions prior to 1.3.50 are subject to a processing issue where nodes are affected when trying to process a cross-shard relayed transaction with a smart contract deploy transaction data. The problem was a bad correlation between the transaction caches and the processing component. If the above-mentioned transaction was sent with more gas than required, the smart contract result (SCR transaction) that should have returned the leftover gas, would have been wrongly added to a cache that the processing unit did not consider. The node stopped notarizing metachain blocks. The fix was actually to extend the SCR transaction search in all other caches if it wasn't found in the correct (expected) sharded-cache. There are no known workarounds at this time. This issue has been patched in version 1.3.50.", - "CVE-2022-39384": "OpenZeppelin Contracts is a library for secure smart contract development. Before version 4.4.1 but after 3.2.0, initializer functions that are invoked separate from contract creation (the most prominent example being minimal proxies) may be reentered if they make an untrusted non-view external call. Once an initializer has finished running it can never be re-executed. However, an exception put in place to support multiple inheritance made reentrancy possible in the scenario described above, breaking the expectation that there is a single execution. Note that upgradeable proxies are commonly initialized together with contract creation, where reentrancy is not feasible, so the impact of this issue is believed to be minor. This issue has been patched, please upgrade to version 4.4.1. As a workaround, avoid untrusted external calls during initialization.", - "CVE-2022-36061": "Elrond go is the go implementation for the Elrond Network protocol. In versions prior to 1.3.35, read only calls between contracts can generate smart contracts results. For example, if contract A calls in read only mode contract B and the called function will make changes upon the contract's B state, the state will be altered for contract B as if the call was not made in the read-only mode. This can lead to some effects not designed by the original smart contracts programmers. This issue was patched in version 1.3.35. There are no known workarounds.", - "CVE-2022-35961": "OpenZeppelin Contracts is a library for secure smart contract development. The functions `ECDSA.recover` and `ECDSA.tryRecover` are vulnerable to a kind of signature malleability due to accepting EIP-2098 compact signatures in addition to the traditional 65 byte signature format. This is only an issue for the functions that take a single `bytes` argument, and not the functions that take `r, v, s` or `r, vs` as separate arguments. The potentially affected contracts are those that implement signature reuse or replay protection by marking the signature itself as used rather than the signed message or a nonce included in it. A user may take a signature that has already been submitted, submit it again in a different form, and bypass this protection. The issue has been patched in 4.7.3.", - "CVE-2022-35916": "OpenZeppelin Contracts is a library for secure smart contract development. Contracts using the cross chain utilities for Arbitrum L2, `CrossChainEnabledArbitrumL2` or `LibArbitrumL2`, will classify direct interactions of externally owned accounts (EOAs) as cross chain calls, even though they are not started on L1. This issue has been patched in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-35915": "OpenZeppelin Contracts is a library for secure smart contract development. The target contract of an EIP-165 `supportsInterface` query can cause unbounded gas consumption by returning a lot of data, while it is generally assumed that this operation has a bounded cost. The issue has been fixed in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-31198": "OpenZeppelin Contracts is a library for secure smart contract development. This issue concerns instances of Governor that use the module `GovernorVotesQuorumFraction`, a mechanism that determines quorum requirements as a percentage of the voting token's total supply. In affected instances, when a proposal is passed to lower the quorum requirements, past proposals may become executable if they had been defeated only due to lack of quorum, and the number of votes it received meets the new quorum requirement. Analysis of instances on chain found only one proposal that met this condition, and we are actively monitoring for new occurrences of this particular issue. This issue has been patched in v4.7.2. Users are advised to upgrade. Users unable to upgrade should consider avoiding lowering quorum requirements if a past proposal was defeated for lack of quorum.", - "CVE-2022-31172": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.1.0 until 4.7.1 are vulnerable to the SignatureChecker reverting. `SignatureChecker.isValidSignatureNow` is not expected to revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-1271 as expected. The contracts that may be affected are those that use `SignatureChecker` to check the validity of a signature and handle invalid signatures in a way other than reverting. The issue was patched in version 4.7.1.", - "CVE-2022-31170": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.0.0 until 4.7.1 are vulnerable to ERC165Checker reverting instead of returning `false`. `ERC165Checker.supportsInterface` is designed to always successfully return a boolean, and under no circumstance revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-165 as expected, specifically if it returns a value other than 0 or 1. The contracts that may be affected are those that use `ERC165Checker` to check for support for an interface and then handle the lack of support in a way other than reverting. The issue was patched in version 4.7.1.", - "CVE-2022-29255": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions prior to 0.3.4 when a calling an external contract with no return value, the contract address (including side effects) could be evaluated twice. This may result in incorrect outcomes for contracts. This issue has been addressed in v0.3.4.", - "CVE-2022-27134": "EOSIO batdappboomx v327c04cf has an Access-control vulnerability in the `transfer` function of the smart contract which allows remote attackers to win the cryptocurrency without paying ticket fee via the `std::string memo` parameter.", - "CVE-2022-24845": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In affected versions, the return of `<iface>.returns_int128()` is not validated to fall within the bounds of `int128`. This issue can result in a misinterpretation of the integer value and lead to incorrect behavior. As of v0.3.0, `<iface>.returns_int128()` is validated in simple expressions, but not complex expressions. Users are advised to upgrade. There is no known workaround for this issue.", - "CVE-2022-24788": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. Versions of vyper prior to 0.3.2 suffer from a potential buffer overrun. Importing a function from a JSON interface which returns `bytes` generates bytecode which does not clamp bytes length, potentially resulting in a buffer overrun. Users are advised to upgrade. There are no known workarounds for this issue.", - "CVE-2022-24787": "Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. In version 0.3.1 and prior, bytestrings can have dirty bytes in them, resulting in the word-for-word comparisons giving incorrect results. Even without dirty nonzero bytes, two bytestrings can compare to equal if one ends with `\"\\x00\"` because there is no comparison of the length. A patch is available and expected to be part of the 0.3.2 release. There are currently no known workarounds.", - "CVE-2021-41264": "OpenZeppelin Contracts is a library for smart contract development. In affected versions upgradeable contracts using `UUPSUpgradeable` may be vulnerable to an attack affecting uninitialized implementation contracts. A fix is included in version 4.3.2 of `@openzeppelin/contracts` and `@openzeppelin/contracts-upgradeable`. For users unable to upgrade; initialize implementation contracts using `UUPSUpgradeable` by invoking the initializer function (usually called `initialize`). An example is provided [in the forum](https://forum.openzeppelin.com/t/security-advisory-initialize-uups-implementation-contracts/15301).", - "CVE-2021-41122": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions external functions did not properly validate the bounds of decimal arguments. The can lead to logic errors. This issue has been resolved in version 0.3.0.", - "CVE-2021-41121": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions when performing a function call inside a literal struct, there is a memory corruption issue that occurs because of an incorrect pointer to the the top of the stack. This issue has been resolved in version 0.3.0.", - "CVE-2021-39168": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", - "CVE-2021-39167": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", - "CVE-2021-34273": "A security flaw in the 'owned' function of a smart contract implementation for BTC2X (B2X), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", - "CVE-2021-34272": "A security flaw in the 'owned' function of a smart contract implementation for RobotCoin (RBTC), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", - "CVE-2021-34270": "An integer overflow in the mintToken function of a smart contract implementation for Doftcoin Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses.", - "CVE-2021-33403": "An integer overflow in the transfer function of a smart contract implementation for Lancer Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses between two large accounts during a transaction.", - "CVE-2021-3006": "The breed function in the smart contract implementation for Farm in Seal Finance (Seal), an Ethereum token, lacks access control and thus allows price manipulation, as exploited in the wild in December 2020 and January 2021.", - "CVE-2021-3004": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", - "CVE-2020-35962": "The sellTokenForLRC function in the vault protocol in the smart contract implementation for Loopring (LRC), an Ethereum token, lacks access control for fee swapping and thus allows price manipulation.", - "CVE-2020-17753": "An issue was discovered in function addMeByRC in the smart contract implementation for RC, an Ethereum token, allows attackers to transfer an arbitrary amount of tokens to an arbitrary address.", - "CVE-2020-17752": "Integer overflow vulnerability in payable function of a smart contract implementation for an Ethereum token, as demonstrated by the smart contract implemented at address 0xB49E984A83d7A638E7F2889fc8328952BA951AbE, an implementation for MillionCoin (MON).", - "CVE-2019-15080": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", - "CVE-2019-15079": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", - "CVE-2019-15078": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", - "CVE-2018-19834": "The quaker function of a smart contract implementation for BOMBBA (BOMB), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19833": "The owned function of a smart contract implementation for DDQ, an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19832": "The NETM() function of a smart contract implementation for NewIntelTechMedia (NETM), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19831": "The ToOwner() function of a smart contract implementation for Cryptbond Network (CBN), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", - "CVE-2018-19830": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", - "CVE-2018-18425": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", - "CVE-2018-17987": "The determineWinner function of a smart contract implementation for HashHeroes Tiles, an Ethereum game, uses a certain blockhash value in an attempt to generate a random number for the case where NUM_TILES equals the number of people who purchased a tile, which allows an attacker to control the awarding of the prize by being the last person to purchase a tile.", - "CVE-2018-17968": "A gambling smart contract implementation for RuletkaIo, an Ethereum gambling game, generates a random value that is predictable by an external contract call. The developer wrote a random() function that uses a block timestamp and block hash from the Ethereum blockchain. This can be predicted by writing the same random function code in an exploit contract to determine the deadSeat value.", - "CVE-2018-17882": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", - "CVE-2018-17877": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-17111": "The onlyOwner modifier of a smart contract implementation for Coinlancer (CL), an Ethereum ERC20 token, has a potential access control vulnerability. All contract users can access functions that use this onlyOwner modifier, because the comparison between msg.sender and owner is incorrect.", - "CVE-2018-17071": "The fallback function of a simple lottery smart contract implementation for Lucky9io, an Ethereum gambling game, generates a random value with the publicly readable variable entry_number. This variable is private, yet it is readable by eth.getStorageAt function. Also, attackers can purchase a ticket at a low price by directly calling the fallback function with small msg.value, because the developer set the currency unit incorrectly. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-17050": "The mintToken function of a smart contract implementation for PolyAi (AI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-15552": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-14715": "The endCoinFlip function and throwSlammer function of the smart contract implementations for Cryptogs, an Ethereum game, generate random numbers with an old block's hash. Therefore, attackers can predict the random number and always win the game.", - "CVE-2018-14576": "The mintTokens function of a smart contract implementation for SunContract, an Ethereum token, has an integer overflow via the _amount variable.", - "CVE-2018-14089": "An issue was discovered in a smart contract implementation for Virgo_ZodiacToken, an Ethereum token. In this contract, 'bool sufficientAllowance = allowance <= _value' will cause an arbitrary transfer in the function transferFrom because '<=' is used instead of '>=' (which was intended). An attacker can transfer from any address to his address, and does not need to meet the 'allowance > value' condition.", - "CVE-2018-14088": "An issue was discovered in a smart contract implementation for STeX White List (STE(WL)), an Ethereum token. The contract has an integer overflow. If the owner sets the value of amount to a large number then the \"amount * 1000000000000000\" will cause an integer overflow in withdrawToFounders().", - "CVE-2018-14087": "An issue was discovered in a smart contract implementation for EUC (EUC), an Ethereum token. The contract has an integer overflow. If the owner sets the value of buyPrice to a large number in setPrices() then the \"msg.value * buyPrice\" will cause an integer overflow in the fallback function.", - "CVE-2018-14086": "An issue was discovered in a smart contract implementation for SingaporeCoinOrigin (SCO), an Ethereum token. The contract has an integer overflow. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", - "CVE-2018-14085": "An issue was discovered in a smart contract implementation for UserWallet 0x0a7bca9FB7AfF26c6ED8029BB6f0F5D291587c42, an Ethereum token. First, suppose that the owner adds the evil contract address to his sweepers. The evil contract looks like this: contract Exploit { uint public start; function sweep(address _token, uint _amount) returns (bool) { start = 0x123456789; return true;} }. Then, when one calls the function sweep() in the UserWallet contract, it will change the sweeperList to 0X123456789.", - "CVE-2018-14084": "An issue was discovered in a smart contract implementation for MKCB, an Ethereum token. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", - "CVE-2018-14063": "The increaseApproval function of a smart contract implementation for Tracto (TRCT), an Ethereum ERC20 token, has an integer overflow.", - "CVE-2018-14006": "An integer overflow vulnerability exists in the function multipleTransfer of Neo Genesis Token (NGT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14005": "An integer overflow vulnerability exists in the function transferAny of Malaysia coins (Xmc), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14004": "An integer overflow vulnerability exists in the function transfer_tokens_after_ICO of GlobeCoin (GLB), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14003": "An integer overflow vulnerability exists in the function batchTransfer of WeMediaChain (WMC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14002": "An integer overflow vulnerability exists in the function distribute of MP3 Coin (MP3), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-14001": "An integer overflow vulnerability exists in the function batchTransfer of SHARKTECH (SKT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-13877": "The doPayouts() function of the smart contract implementation for MegaCryptoPolis, an Ethereum game, has a Denial of Service vulnerability. If a smart contract that has a fallback function always causing exceptions buys a land, users cannot buy lands near that contract's land, because those purchase attempts will not be completed unless the doPayouts() function successfully sends Ether to certain neighbors.", - "CVE-2018-13836": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", - "CVE-2018-13783": "The mintToken function of a smart contract implementation for JiucaiToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13782": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13781": "The mintToken function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13780": "The mintToken function of a smart contract implementation for ESH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13779": "The mintToken function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13778": "The mintToken function of a smart contract implementation for CGCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13777": "The mintToken function of a smart contract implementation for RRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13776": "The mintToken function of a smart contract implementation for AppleToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13775": "The mintToken function of a smart contract implementation for RCKT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13774": "The mintToken function of a smart contract implementation for Bitstarti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13773": "The mintToken function of a smart contract implementation for Enterprise Token Ecosystem (ETE) (Contract Name: NetkillerToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13772": "The mintToken function of a smart contract implementation for TheFlashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13771": "The mintToken function of a smart contract implementation for ExacoreContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13770": "The mintToken function of a smart contract implementation for UltimateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13769": "The mintToken function of a smart contract implementation for JeansToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13768": "The mintToken function of a smart contract implementation for ZToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13767": "The mintToken function of a smart contract implementation for Cornerstone, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13766": "The mintToken function of a smart contract implementation for Easticoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13765": "The mintToken function of a smart contract implementation for LandCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13764": "The mintToken function of a smart contract implementation for BiquToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13763": "The mintToken function of a smart contract implementation for Ublasti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13762": "The mintToken function of a smart contract implementation for Yumerium, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13761": "The mintToken function of a smart contract implementation for NetkillerAdvancedTokenAirDrop, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13760": "The mintToken function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13759": "The mintToken function of a smart contract implementation for BIGCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13758": "The mintToken function of a smart contract implementation for LoliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13757": "The mintToken function of a smart contract implementation for Coinquer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13756": "The mintToken function of a smart contract implementation for CherryCoinFoundation, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13755": "The mintToken function of a smart contract implementation for OTAKUToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13754": "The mintToken function of a smart contract implementation for CryptosisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13753": "The mintToken function of a smart contract implementation for DeWeiSecurityServiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13752": "The mintToken function of a smart contract implementation for Thread, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13751": "The mintToken function of a smart contract implementation for JustWallet, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13750": "The mintToken function of a smart contract implementation for RichiumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13749": "The mintToken function of a smart contract implementation for FinalToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13748": "The mintToken function of a smart contract implementation for CarToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13747": "The mintToken function of a smart contract implementation for VanMinhCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13746": "The mintToken function of a smart contract implementation for kBit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13745": "The mintToken function of a smart contract implementation for STCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13744": "The mintToken function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13743": "The mintToken function of a smart contract implementation for SuperEnergy (SEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13742": "The mintToken function of a smart contract implementation for tickets (TKT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13741": "The mintToken function of a smart contract implementation for ABLGenesisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13740": "The mintToken function of a smart contract implementation for OneChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13739": "The mintToken function of a smart contract implementation for dopnetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13738": "The mintToken function of a smart contract implementation for PELOCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13737": "The mintToken function of a smart contract implementation for AnovaBace, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13736": "The mintToken function of a smart contract implementation for ELearningCoinERC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13735": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13734": "The mintToken function of a smart contract implementation for AZTToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13733": "The mintToken function of a smart contract implementation for ProjectJ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13732": "The mintToken function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13731": "The mintToken function of a smart contract implementation for TokenMACHU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13730": "The mintToken function of a smart contract implementation for HEY, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13729": "The mintToken function of a smart contract implementation for JPMD100B, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13728": "The mintToken function of a smart contract implementation for JixoCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13727": "The mintToken function of a smart contract implementation for Eastcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13726": "The mintToken function of a smart contract implementation for ISeeVoiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13725": "The mintToken function of a smart contract implementation for GlobalSuperGameToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13724": "The mint function of a smart contract implementation for HYIPCrowdsale1, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13723": "The mintToken function of a smart contract implementation for SERVVIZIOToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13722": "The mint function of a smart contract implementation for HYIPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13721": "The mintToken function of a smart contract implementation for GoMineWorld, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13720": "The mintToken function of a smart contract implementation for Antoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13719": "The mintToken function of a smart contract implementation for BiteduToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13718": "The mintToken function of a smart contract implementation for FuturXe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13717": "The mintToken function of a smart contract implementation for HormitechToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13716": "The mintToken function of a smart contract implementation for sexhdsolo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13715": "The mintToken function of a smart contract implementation for BpsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13714": "The mintToken function of a smart contract implementation for CM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13713": "The mintToken function of a smart contract implementation for Tradesman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13712": "The mintToken function of a smart contract implementation for PMET, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13711": "The mintToken function of a smart contract implementation for Databits, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13710": "The mintToken function of a smart contract implementation for Mjolnir, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13709": "The mintToken function of a smart contract implementation for Tube, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13708": "The mintToken function of a smart contract implementation for Order (ETH) (Contract Name: BuyToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13707": "The mintToken function of a smart contract implementation for YSS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13706": "The mintToken function of a smart contract implementation for IdeaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13705": "The mintToken function of a smart contract implementation for PMHToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13704": "The mintToken function of a smart contract implementation for eddToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13703": "The mintToken function of a smart contract implementation for CERB_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13702": "The mintToken function of a smart contract implementation for Essence, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13701": "The mintToken function of a smart contract implementation for KissMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13700": "The mintToken function of a smart contract implementation for IPMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13699": "The mintToken function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13698": "The mintTokens function of a smart contract implementation for Play2LivePromo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13697": "The mintToken function of a smart contract implementation for RobotBTC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13696": "The mintToken function of a smart contract implementation for RedTicket, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13695": "The mint function of a smart contract implementation for CTest7, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13694": "The mintToken function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13693": "The mintToken function of a smart contract implementation for GreenEnergyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13692": "The mintToken function of a smart contract implementation for MehdiTAZIToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13691": "The mintToken function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13690": "The mintToken function of a smart contract implementation for Instacocoa, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13689": "The mintToken function of a smart contract implementation for CJXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13688": "The mintToken function of a smart contract implementation for MallToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13687": "The mintToken function of a smart contract implementation for normikaivo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13686": "The mintToken function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13685": "The mintToken function of a smart contract implementation for Vornox (VRX) (Contract Name: VornoxCoinToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13684": "The mintToken function of a smart contract implementation for ZIP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13683": "The mintToken function of a smart contract implementation for exsulcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13682": "The mintToken function of a smart contract implementation for ViteMoneyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13681": "The mintToken function of a smart contract implementation for SOSCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13680": "The mintToken function of a smart contract implementation for LexitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13679": "The mintToken function of a smart contract implementation for ZPEcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13678": "The mintToken function of a smart contract implementation for Lottery, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13677": "The mintToken function of a smart contract implementation for Goochain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13676": "The mintToken function of a smart contract implementation for Orderbook Presale Token (OBP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13675": "The mintToken function of a smart contract implementation for YAMBYO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13674": "The mintToken function of a smart contract implementation for ComBillAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13673": "The mintToken function of a smart contract implementation for GoldTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13672": "The mintToken function of a smart contract implementation for OBTCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13671": "The mintToken function of a smart contract implementation for DinsteinCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13670": "The mintToken function of a smart contract implementation for GFCB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13669": "The mintToken function of a smart contract implementation for NCU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13668": "The mintToken function of a smart contract implementation for BTPCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13667": "The mintToken function of a smart contract implementation for UTBTokenTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13666": "The mintToken function of a smart contract implementation for EristicaICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13665": "The mintToken function of a smart contract implementation for BCaaS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13664": "The mintToken function of a smart contract implementation for CWS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13663": "The mintToken function of a smart contract implementation for BSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13662": "The mintToken function of a smart contract implementation for WorldOpctionChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13661": "The mintToken function of a smart contract implementation for APP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13660": "The mint function of a smart contract implementation for BillionRewardsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13659": "The mintToken function of a smart contract implementation for BrianCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13658": "The mintToken function of a smart contract implementation for TheGoDgital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13657": "The mintToken function of a smart contract implementation for Rice, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13656": "The mintToken function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13655": "The mintToken function of a smart contract implementation for GFC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13654": "The mintToken function of a smart contract implementation for ESTSToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13653": "The mintToken function of a smart contract implementation for ipshoots, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13652": "The mintToken function of a smart contract implementation for TheGoDigital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13651": "The mintToken function of a smart contract implementation for MicoinNetworkToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13650": "The mintToken function of a smart contract implementation for BitmaxerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13649": "The mintToken function of a smart contract implementation for Deploy, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13648": "The mintToken function of a smart contract implementation for BGC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13647": "The mintToken function of a smart contract implementation for TrueGoldCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13646": "The mintToken function of a smart contract implementation for Datiac, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13645": "The mintToken function of a smart contract implementation for Fiocoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13644": "The mintToken function of a smart contract implementation for RoyalClassicCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13643": "The mintToken function of a smart contract implementation for GCRTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13642": "The mintToken function of a smart contract implementation for SECoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13641": "The mintToken function of a smart contract implementation for MVGcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13640": "The mintToken function of a smart contract implementation for EthereumSmart, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13639": "The mintToken function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13638": "The mintToken function of a smart contract implementation for Bitpark, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13637": "The mintToken function of a smart contract implementation for CikkaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13636": "The mintToken function of a smart contract implementation for TurdCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13635": "The mintToken function of a smart contract implementation for HBCM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13634": "The mintToken function of a smart contract implementation for MediaCubeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13633": "The mintToken function of a smart contract implementation for Martcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13632": "The mintToken function of a smart contract implementation for NEXPARA, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13631": "The mintToken function of a smart contract implementation for doccoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13630": "The mintToken function of a smart contract implementation for DoccoinPreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13629": "The mintToken function of a smart contract implementation for CrimsonShilling, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13628": "The mintToken function of a smart contract implementation for MomentumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13627": "The mintToken function of a smart contract implementation for MyOffer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13626": "The mintToken function of a smart contract implementation for SemainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13625": "The mintlvlToken function of a smart contract implementation for Krown, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13624": "The mintToken function of a smart contract implementation for WXSLToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13623": "The mintToken function of a smart contract implementation for AirdropperCryptics, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13622": "The mintToken function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13621": "The mintToken function of a smart contract implementation for SoundTribeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13620": "The mintToken function of a smart contract implementation for TripCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13619": "The mintToken function of a smart contract implementation for MicoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13618": "The mintToken function of a smart contract implementation for VICETOKEN_ICO_IS_A_SCAM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13617": "The mintToken function of a smart contract implementation for CAPTOZ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13616": "The mintToken function of a smart contract implementation for IOCT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13615": "The mintToken function of a smart contract implementation for MJCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13614": "The mintToken function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13613": "The mintToken function of a smart contract implementation for CON0217, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13612": "The mintToken function of a smart contract implementation for Robincoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13611": "The mintToken function of a smart contract implementation for CDcurrency, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13610": "The mintToken function of a smart contract implementation for MedicayunLink, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13609": "The mintToken function of a smart contract implementation for CSAToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13608": "The mintToken function of a smart contract implementation for archercoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13607": "The mintToken function of a smart contract implementation for ResidualShare, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13606": "The mintToken function of a smart contract implementation for ARChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13605": "The mintToken function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13604": "The mintToken function of a smart contract implementation for wellieat, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13603": "The mintToken function of a smart contract implementation for Briant2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13602": "The mint function of a smart contract implementation for MiningToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13601": "The mintToken function of a smart contract implementation for GalacticX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13600": "The mintToken function of a smart contract implementation for AMToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13599": "The mintToken function of a smart contract implementation for ResidualValue, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13598": "The mintToken function of a smart contract implementation for SendMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13597": "The mintToken function of a smart contract implementation for testcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13596": "The mintToken function of a smart contract implementation for TESTAhihi, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13595": "The mintToken function of a smart contract implementation for BitStore, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13594": "The mintToken function of a smart contract implementation for CardFactory, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13593": "The mintToken function of a smart contract implementation for CardToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13592": "The mintToken function of a smart contract implementation for RajTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13591": "The mintToken function of a smart contract implementation for KAPcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13590": "The mintToken function of a smart contract implementation for SIPCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13589": "The mintToken function of a smart contract implementation for MooAdvToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13588": "The mintToken function of a smart contract implementation for Code47 (C47), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13587": "The mintToken function of a smart contract implementation for DECToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13586": "The mintToken function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13585": "The mintToken function of a smart contract implementation for CHERRYCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13584": "The mintToken function of a smart contract implementation for yasudem, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13583": "The mintToken function of a smart contract implementation for Shmoo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13582": "The mintToken function of a smart contract implementation for My2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13581": "The mintToken function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13580": "The mintToken function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13579": "The mintToken function of a smart contract implementation for ForeverCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13578": "The mintToken function of a smart contract implementation for GalaxyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13577": "The mintToken function of a smart contract implementation for ShitCoin (SHITC) (Contract Name: AdvancedShit), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13576": "The mintToken function of a smart contract implementation for Escut (ESCT) (Contract Name: JuntsPerCreixer), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13575": "The mintToken function of a smart contract implementation for YESToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13574": "The mintToken function of a smart contract implementation for DataShieldCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13573": "The mintToken function of a smart contract implementation for TripPay, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13572": "The mintToken function of a smart contract implementation for PGM_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13571": "The mintToken function of a smart contract implementation for GoramCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13570": "The mint function of a smart contract implementation for kkTestCoin1 (KTC1), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13569": "The mintToken function of a smart contract implementation for HitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13568": "The mintToken function of a smart contract implementation for MktCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13567": "The mintToken function of a smart contract implementation for SDR, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13566": "The mintToken function of a smart contract implementation for RETNToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13565": "The mintToken function of a smart contract implementation for Co2Bit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13564": "The mintToken function of a smart contract implementation for GATcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13563": "The mintToken function of a smart contract implementation for UPayToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13562": "The mintToken function of a smart contract implementation for BMVCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13561": "The mintToken function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13560": "The mintToken function of a smart contract implementation for KelvinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13559": "The mintToken function of a smart contract implementation for UTCT, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13558": "The mintToken function of a smart contract implementation for rhovit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13557": "The mintToken function of a smart contract implementation for Trabet_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13556": "The mintToken function of a smart contract implementation for COSMOTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13555": "The mintToken function of a smart contract implementation for JaxBox, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13554": "The mintToken function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13553": "The mintToken function of a smart contract implementation for Micro BTC (MBTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13552": "The mintToken function of a smart contract implementation for Trabet_Coin_PreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13551": "The mintToken function of a smart contract implementation for Bgamecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13550": "The mintToken function of a smart contract implementation for Coquinho Coin (CQNC) (Contract Name: CoquinhoERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13549": "The mintToken function of a smart contract implementation for NeuroToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13548": "The mintToken function of a smart contract implementation for Mimicoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13547": "The mintToken function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13546": "The mintToken function of a smart contract implementation for CCASH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13545": "The mintToken function of a smart contract implementation for HashShield, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13544": "The mintToken function of a smart contract implementation for Numisma, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13543": "The mintToken function of a smart contract implementation for GemstoneToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13542": "The mintToken function of a smart contract implementation for ZIBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13541": "The mintToken function of a smart contract implementation for CryptoLeu, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13540": "The mintToken function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13539": "The mintToken function of a smart contract implementation for Bcxss, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13538": "The mintToken function of a smart contract implementation for SIPCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13537": "The mintToken function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13536": "The mintToken function of a smart contract implementation for ERC20_ICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13535": "The mintToken function of a smart contract implementation for PACCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13534": "The mintToken function of a smart contract implementation for SpeedCashLite (SCSL), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13533": "The mintToken function of a smart contract implementation for ALUXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13532": "The mintToken function of a smart contract implementation for Mindexcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13531": "The mintToken function of a smart contract implementation for MaxHouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13530": "The mintToken function of a smart contract implementation for HunterCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13529": "The mintToken function of a smart contract implementation for BetterThanAdrien, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13528": "The mintToken function of a smart contract implementation for DhaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13527": "The mintToken function of a smart contract implementation for ElevateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13526": "The mintToken function of a smart contract implementation for WangWangToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13525": "The mintToken function of a smart contract implementation for Flow, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13524": "The mintToken function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13523": "The mintToken function of a smart contract implementation for SmartPayment, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13522": "The mintToken function of a smart contract implementation for EXGROUP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13521": "The mintToken function of a smart contract implementation for PinkyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13520": "The mintToken function of a smart contract implementation for TopscoinAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13519": "The mint function of a smart contract implementation for DigitalCloudToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13518": "The mintToken function of a smart contract implementation for TCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13517": "The mintToken function of a smart contract implementation for C3 Token (C3), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13516": "The mintToken function of a smart contract implementation for Super Cool Awesome Money (SCAM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13515": "The mintToken function of a smart contract implementation for aman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13514": "The mintToken function of a smart contract implementation for esportz, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13513": "The mintToken function of a smart contract implementation for Ubiou, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13512": "The mintToken function of a smart contract implementation for SmartHomeCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13511": "The mintToken function of a smart contract implementation for CorelliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13510": "The mintToken function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13509": "The mintToken function of a smart contract implementation for IamRich, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13508": "The mintToken function of a smart contract implementation for VITToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13507": "The mintToken function of a smart contract implementation for SLCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13506": "The mintToken function of a smart contract implementation for SDR22, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13505": "The mintToken function of a smart contract implementation for ecogreenhouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13504": "The mintToken function of a smart contract implementation for MMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13503": "The mintToken function of a smart contract implementation for South Park Token Token (SPTKN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13502": "The mintToken function of a smart contract implementation for HeliumNetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13501": "The mintToken function of a smart contract implementation for HRWtoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13500": "The mintToken function of a smart contract implementation for MSXAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13499": "The mintToken function of a smart contract implementation for Crowdsale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13498": "The mintToken function of a smart contract implementation for KAPAYcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13497": "The mintToken function of a smart contract implementation for COBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13496": "The mintToken function of a smart contract implementation for RajTestICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13495": "The mintToken function of a smart contract implementation for KMCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13494": "The mintToken function of a smart contract implementation for SusanTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13493": "The mintToken function of a smart contract implementation for DaddyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13492": "The mintToken function of a smart contract implementation for naga, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13491": "The mintToken function of a smart contract implementation for Carrot, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13490": "The mintToken function of a smart contract implementation for FILM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13489": "The mintToken function of a smart contract implementation for OllisCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13488": "The mintToken function of a smart contract implementation for Crypto Alley Shares (CAST), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13487": "The mintToken function of a smart contract implementation for PlatoToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13486": "The mintToken function of a smart contract implementation for HELP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13485": "The mintToken function of a smart contract implementation for BitcoinAgileToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13484": "The mintToken function of a smart contract implementation for CBRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13483": "The mintToken function of a smart contract implementation for mkethToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13482": "The mintToken function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13481": "The mintToken function of a smart contract implementation for TRIUM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13480": "The mintToken function of a smart contract implementation for QRG, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13479": "The mintToken function of a smart contract implementation for SlidebitsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13478": "The mintToken function of a smart contract implementation for DMPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13477": "The mintToken function of a smart contract implementation for CTESale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13476": "The mintToken function of a smart contract implementation for PhilCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13475": "The mintToken function of a smart contract implementation for VSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13474": "The mintToken function of a smart contract implementation for FansChainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13473": "The mintToken function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13472": "The mint function of a smart contract implementation for CloutToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13471": "The mintToken function of a smart contract implementation for BeyondCashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13470": "The mintToken function of a smart contract implementation for BuyerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13469": "The mintToken function of a smart contract implementation for IcoContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13468": "The mintToken function of a smart contract implementation for Cavecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13467": "The mintToken function of a smart contract implementation for EpiphanyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13466": "The mintToken function of a smart contract implementation for Crystals, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13465": "The mintToken function of a smart contract implementation for PaulyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13464": "The mintToken function of a smart contract implementation for t_swap, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13463": "The mintToken function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13462": "The mintToken function of a smart contract implementation for MoonToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13328": "The transfer, transferFrom, and mint functions of a smart contract implementation for PFGc, an Ethereum token, have an integer overflow.", - "CVE-2018-13327": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for ChuCunLingAIGO (CCLAG), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13326": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Bittelux (BTX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13325": "The _sell function of a smart contract implementation for GROWCHAIN (GROW), an Ethereum token, has an integer overflow.", - "CVE-2018-13233": "The sell function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13232": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13231": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13230": "The sell function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13229": "The sell function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13228": "The sell function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13227": "The sell function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13226": "The sell function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13225": "The sell function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13224": "The sell function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13223": "The sell function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13222": "The sell function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13221": "The sell function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13220": "The sell function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13219": "The sell function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13218": "The sell function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13217": "The sell function of a smart contract implementation for CoinToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13216": "The sell function of a smart contract implementation for GreenMed (GRMD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13215": "The sell function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13214": "The sell function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13213": "The sell function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13212": "The sell function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13211": "The sell function of a smart contract implementation for MyToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13210": "The sell function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13209": "The sell function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13208": "The sell function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13207": "The sell function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13206": "The sell function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13205": "The sell function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13204": "The sell function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13203": "The sellBuyerTokens function of a smart contract implementation for SwapToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13202": "The sell function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13201": "The sell function of a smart contract implementation for TiTok - Ticket Token (Contract Name: MyAdvancedToken7), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13200": "The sell function of a smart contract implementation for DateMe (DMX) (Contract Name: ProgressiveToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13199": "The sell function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13198": "The sell function of a smart contract implementation for STeX Exchange ICO (STE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13197": "The sell function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13196": "The sell function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", - "CVE-2018-13195": "The mintToken function of a smart contract implementation for Cranoo (CRN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13194": "The mintToken function of a smart contract implementation for TongTong Coin (TTCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13193": "The mintToken function of a smart contract implementation for hentaisolo (HAO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13192": "The mintToken function of a smart contract implementation for Jobscoin (JOB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13191": "The mintToken function of a smart contract implementation for Super Carbon Coin (SCC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13190": "The mintToken function of a smart contract implementation for DVChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13189": "The mint function of a smart contract implementation for Unolabo (UNLB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13188": "The mintToken function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13187": "The mintToken function of a smart contract implementation for CIBN Live Token (CIBN LIVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13186": "The mintToken function of a smart contract implementation for MMTCoin (MMT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13185": "The mintToken function of a smart contract implementation for appcoins (APPC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13184": "The mintToken function of a smart contract implementation for TravelZedi Token (ZEDI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13183": "The mintToken function of a smart contract implementation for JWC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13182": "The mintToken function of a smart contract implementation for loncoin (LON), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13181": "The mintToken function of a smart contract implementation for Troo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13180": "The mintToken function of a smart contract implementation for IMM Coin (IMC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13179": "The mintToken function of a smart contract implementation for Air-Contact Token (AIR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13178": "The mintToken function of a smart contract implementation for ECToints (ECT) (Contract Name: ECPoints), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13177": "The mintToken function of a smart contract implementation for MiningRigRentals Token (MRR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13176": "The mintToken function of a smart contract implementation for Trust Zen Token (ZEN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13175": "The mintToken function of a smart contract implementation for AIChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13174": "The mintToken function of a smart contract implementation for CryptoABS (ABS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13173": "The mintToken function of a smart contract implementation for EliteShipperToken (ESHIP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13172": "The mintToken function of a smart contract implementation for bzxcoin (BZX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13171": "The mintToken function of a smart contract implementation for LadaToken (LDT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13170": "The mintToken function of a smart contract implementation for Snoqualmie Coin (SNOW), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13169": "The mintToken function of a smart contract implementation for Ethereum Cash Pro (ECP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13168": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO) (Contract Name: NetkillerBatchToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13167": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13166": "The mintToken function of a smart contract implementation for AthletiCoin (ATHA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13165": "The mintToken function of a smart contract implementation for JustDCoin (JustD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13164": "The mintToken function of a smart contract implementation for EPPCOIN (EPP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13163": "The mintToken function of a smart contract implementation for Ethernet Cash (ENC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13162": "The mintToken function of a smart contract implementation for ALEX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13161": "The mintToken function of a smart contract implementation for MultiGames (MLT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13160": "The mintToken function of a smart contract implementation for etktokens (ETK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13159": "The mintToken function of a smart contract implementation for bankcoin (BNK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13158": "The mintToken function of a smart contract implementation for AssetToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13157": "The mintToken function of a smart contract implementation for CryptonitexCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13156": "The mintToken function of a smart contract implementation for bonusToken (BNS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13155": "The mintToken function of a smart contract implementation for GEMCHAIN (GEM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13146": "The mintToken, buy, and sell functions of a smart contract implementation for LEF, an Ethereum token, have an integer overflow.", - "CVE-2018-13145": "The mintToken function of a smart contract implementation for JavaSwapTest (JST), an Ethereum token, has an integer overflow.", - "CVE-2018-13144": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Pandora (PDX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13132": "Spadeico is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13131": "SpadePreSale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13130": "Bitotal (TFUND) is a smart contract running on Ethereum. The mintTokens function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13129": "SP8DE Token (SPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13128": "Etherty Token (ETY) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13127": "SP8DE PreSale Token (DSPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13126": "MoxyOnePresale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-13113": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Easy Trading Token (ETT), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", - "CVE-2018-13092": "The mintToken function of a smart contract implementation for Reimburse Token (REIM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13091": "The mintToken function of a smart contract implementation for sumocoin (SUMO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13090": "The mintToken function of a smart contract implementation for YiTongCoin (YTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13089": "The mintToken function of a smart contract implementation for Universal Coin (UCOIN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13088": "The mintToken function of a smart contract implementation for Futures Pease (FP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13087": "The mintToken function of a smart contract implementation for Coinstar (CSTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13086": "The mintToken function of a smart contract implementation for IADOWR Coin (IAD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13085": "The mintToken function of a smart contract implementation for FreeCoin (FREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13084": "The mintToken function of a smart contract implementation for Good Time Coin (GTY), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13083": "The mintToken function of a smart contract implementation for Plaza Token (PLAZA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13082": "The mintToken function of a smart contract implementation for MODI Token (MODI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13081": "The mintToken function of a smart contract implementation for GZS Token (GZS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13080": "The mintToken function of a smart contract implementation for Goutex (GTX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13079": "The mintToken function of a smart contract implementation for GoodTo (GTO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13078": "The mintToken function of a smart contract implementation for Jitech (JTH), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13077": "The mintToken function of a smart contract implementation for CTB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13076": "The mintToken function of a smart contract implementation for Betcash (BC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13075": "The mintToken function of a smart contract implementation for Carbon Exchange Coin Token (CEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13074": "The mintToken function of a smart contract implementation for FIBToken (FIB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13073": "The mintToken function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13072": "The mintToken function of a smart contract implementation for Coffeecoin (COFFEE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13071": "The mintToken function of a smart contract implementation for CCindex10 (T10), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13070": "The mintToken function of a smart contract implementation for EncryptedToken (ECC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13069": "The mintToken function of a smart contract implementation for DYchain (DYC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13068": "The mintToken function of a smart contract implementation for AzurionToken (AZU), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-13041": "The mint function of a smart contract implementation for Link Platform (LNK), an Ethereum ERC20 token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", - "CVE-2018-12975": "The random() function of the smart contract implementation for CryptoSaga, an Ethereum game, generates a random value with publicly readable variables such as timestamp, the current block's blockhash, and a private variable (which can be read with a getStorageAt call). Therefore, attackers can precompute the random number and manipulate the game (e.g., get powerful characters or get critical damages).", - "CVE-2018-12959": "The approveAndCall function of a smart contract implementation for Aditus (ADI), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all contract balances into their account).", - "CVE-2018-12885": "The randMod() function of the smart contract implementation for MyCryptoChamp, an Ethereum game, generates a random value with publicly readable variables such as the current block information and a private variable, (which can be read with a getStorageAt call). Therefore, attackers can get powerful champs/items and get rewards.", - "CVE-2018-12703": "The approveAndCallcode function of a smart contract implementation for Block 18 (18T), an tradable Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", - "CVE-2018-12702": "The approveAndCallcode function of a smart contract implementation for Globalvillage ecosystem (GVE), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", - "CVE-2018-12511": "In the mintToken function of a smart contract implementation for Substratum (SUB), an Ethereum ERC20 token, the administrator can control mintedAmount, leverage an integer overflow, and modify a user account's balance arbitrarily.", - "CVE-2018-12454": "The _addguess function of a simplelottery smart contract implementation for 1000 Guess, an Ethereum gambling game, generates a random value with publicly readable variables such as the current block information and a private variable (which can be read with a getStorageAt call). Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-12230": "An wrong logical check identified in the transferFrom function of a smart contract implementation for RemiCoin (RMC), an Ethereum ERC20 token, allows the attacker to steal tokens or conduct resultant integer underflow attacks.", - "CVE-2018-12084": "The mintToken function of a smart contract implementation for BitAsean (BAS), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12083": "The mintToken function of a smart contract implementation for GOAL Bonanza (GOAL), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12082": "The mintToken function of a smart contract implementation for Fujinto (NTO), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12081": "The mintToken function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12080": "The mintToken function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12079": "The mintToken function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12078": "The mintToken function of a smart contract implementation for PolyAI (AI), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", - "CVE-2018-12070": "The sell function of a smart contract implementation for SEC, a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12068": "The sell function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12067": "The sell function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12063": "The sell function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12062": "The sell function of a smart contract implementation for SwftCoin (SWFTC), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-12056": "The maxRandom function of a smart contract implementation for All For One, an Ethereum gambling game, generates a random value with publicly readable variables because the _seed value can be retrieved with a getStorageAt call. Therefore, it allows attackers to always win and get rewards.", - "CVE-2018-12025": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", - "CVE-2018-11687": "An integer overflow in the distributeBTR function of a smart contract implementation for Bitcoin Red (BTCR), an Ethereum ERC20 token, allows the owner to accomplish an unauthorized increase of digital assets by providing a large address[] array, as exploited in the wild in May 2018, aka the \"ownerUnderflow\" issue.", - "CVE-2018-11561": "An integer overflow in the unprotected distributeToken function of a smart contract implementation for EETHER (EETHER), an Ethereum ERC20 token, will lead to an unauthorized increase of an attacker's digital assets.", - "CVE-2018-11446": "The buy function of a smart contract implementation for Gold Reward (GRX), an Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the buyer because of overflow of the multiplication of its argument amount and a manipulable variable buyPrice, aka the \"tradeTrap\" issue.", - "CVE-2018-11429": "ATLANT (ATL) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-11411": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect.", - "CVE-2018-11335": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", - "CVE-2018-11329": "The DrugDealer function of a smart contract implementation for Ether Cartel, an Ethereum game, allows attackers to take over the contract's ownership, aka ceoAnyone. After that, all the digital assets (including Ether balance and tokens) might be manipulated by the attackers, as exploited in the wild in May 2018.", - "CVE-2018-11239": "An integer overflow in the _transfer function of a smart contract implementation for Hexagon (HXG), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets by providing a _to argument in conjunction with a large _value argument, as exploited in the wild in May 2018, aka the \"burnOverflow\" issue.", - "CVE-2018-10973": "An integer overflow in the transferMulti function of a smart contract implementation for KoreaShow, an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _value parameters.", - "CVE-2018-10944": "The request_dividend function of a smart contract implementation for ROC (aka Rasputin Online Coin), an Ethereum ERC20 token, allows attackers to steal all of the contract's Ether.", - "CVE-2018-10769": "The transferProxy and approveProxy functions of a smart contract implementation for SmartMesh (SMT), an Ethereum ERC20 token, allow attackers to accomplish an unauthorized transfer of digital assets because replay attacks can occur with the same-named functions (with the same signatures) in other tokens: First (FST), GG Token (GG), M2C Mesh Network (MTC), M2C Mesh Network (mesh), and UG Token (UGT).", - "CVE-2018-10706": "An integer overflow in the transferMulti function of a smart contract implementation for Social Chain (SCA), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets, aka the \"multiOverflow\" issue.", - "CVE-2018-10705": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", - "CVE-2018-10666": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", - "CVE-2018-10468": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue.", - "CVE-2018-10376": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", - "CVE-2018-10299": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", - "CVE-2017-14457": "An exploitable information leak/denial of service vulnerability exists in the libevm (Ethereum Virtual Machine) `create2` opcode handler of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read leading to memory disclosure or denial of service. An attacker can create/send malicious a smart contract to trigger this vulnerability.", - "CVE-2017-14451": "An exploitable out-of-bounds read vulnerability exists in libevm (Ethereum Virtual Machine) of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read which can subsequently trigger an out-of-bounds write resulting in remote code execution. An attacker can create/send malicious smart contract to trigger this vulnerability." -} \ No newline at end of file diff --git a/data_sample/CVE_label/CVE2label.json b/data_sample/CVE_label/CVE2label.json deleted file mode 100644 index ad74a711..00000000 --- a/data_sample/CVE_label/CVE2label.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "CVE-2018-10299": "Integer Overflow", - "CVE-2018-10376": "Integer Overflow", - "CVE-2018-11335": "Integer Overflow", - "CVE-2018-13836": "Integer Overflow", - "CVE-2018-17882": "Integer Overflow", - "CVE-2018-10468": "Wrong Logic", - "CVE-2018-11411": "Wrong Logic", - "CVE-2018-12025": "Wrong Logic", - "CVE-2021-3004": "Wrong Logic", - "CVE-2018-15552": "Bad Randomness", - "CVE-2018-14715": "Bad Randomness", - "CVE-2018-17877": "Bad Randomness", - "CVE-2018-10666": "Access Control", - "CVE-2018-10705": "Access Control", - "CVE-2018-19830": "Access Control", - "CVE-2019-15078": "Typo Constructor", - "CVE-2019-15079": "Typo Constructor", - "CVE-2019-15080": "Typo Constructor", - "CVE-2018-18425": "Token Devalue" -} \ No newline at end of file diff --git a/data_sample/prompts.py b/data_sample/prompts.py deleted file mode 100644 index 530209fe..00000000 --- a/data_sample/prompts.py +++ /dev/null @@ -1,91 +0,0 @@ - -####### Basic Prompt ######## -topk_prompt1 = '''Output {topk} most severe vulnerabilities.\n''' -topk_prompt2 = '''If no vulnerability is detected, you should only output in this json format {"output_list": []}.\n''' - -####### Auditor Prompt ####### -auditor_prompt = '''You are a smart contract auditor, identify and explain severe vulnerabilities in the provided smart contract. Make sure that they are exploitable in real world and beneficial to attackers. Provide each identified vulnerability with intermediate reasoning and its associated function. Remember, you must provide the entire function code and do not use "...". Make your reasoning comprehensive and detailed. Smart contract code:\n\n''' -auditor_format_constrain = '''\nYou should only output in below json format: -{ - "output_list": [ - { - "function_name": "", - "code": "", - "vulnerability": "", - "reason": "" - }, - { - "function_name": "", - "code": "", - "vulnerability": "", - "reason": "" - } - ] -} -''' - -####### Critic Prompt ####### -critic_zero_shot_prompt = '''Below vulnerabilities and reasoning are likely contain mistakes. As a harsh vulnerability critic, your duty is to scrutinize the function and evaluate the correctness, severity and profitability of given vulnerabilities and associated reasoning with corresponding scores ranging from 0 (lowest) to 9 (highest). Your also need to provide criticism, which must include explanations for your scoring. Make your criticism comprehensive and detailed\n''' -critic_few_shot_prompt = '''Below vulnerabilities and reasoning are likely contain mistakes. As a harsh vulnerability critic, your duty is to scrutinize the function and evaluate the correctness, severity and profitability of given vulnerabilities and associated reasoning with corresponding scores ranging from 0 (lowest) to 9 (highest). Your also need to provide criticism, which must include explanations for your scoring. Make your criticism comprehensive and detailed. Below are three examples:\n -Input: -"function_name": "mintToken", -"code": "function mintToken(address target, uint256 mintedAmount) onlyOwner{ balances[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0,owner,mintedAmount); Transfer(owner,target,mintedAmount); }", -"vulnerability": "Arbitrary Minting". -"reason" -Output: -"function_name": "mintToken", -"criticism": "The reasoning is correct. The owner of the contract can mint arbitrary tokens. This could lead to an arbitrary increase in the token supply, devaluing existing tokens. However, isn't inherently a vulnerability, but rather a design decision that might be questionable. The severity is moderate because it is based on the owner's intention. The profitability is low because an external attacker cannot profit from it.", -"correctness": 7, -"severity": 4, -"profitability": 0 - -Input: -"function_name": "transferFrom", -"code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; transfer(_from, _to, _value); return true;}", -"vulnerability": "Unchecked Transfer", -"reason": "The transferFrom function does not check if the _to address is a valid address before transferring tokens. This allows an attacker to send tokens to an invalid address, resulting in a loss of tokens."" -Output: -"function_name": "transferFrom", -"vulnerability": "Unchecked Transfer", -"criticism": "The reasoning is correct that there is no address check in the transferFrom function. However, the severity and profitability of this vulnerability are very low, because it does not cause severe exploitation and an external attacker cannot profit from this vulnerability." -"correctness": 7, -"severity": 2, -"profitability": 0 - -Input: -"function_name": "approve", -"code": "function approve(address _spender, uint256 _value) returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", -"vulnerability": "Race condition (front-running)", -"reason": "The approve function is vulnerable to front-running because it does not require the spender to have a zero allowance before setting a new one. An attacker can call the approve function and then the transferFrom function before the original transaction is mined." -Output: -"function_name": "approve", -"criticism": "The statement is correct in pointing out that this function does not inherently reset the allowance. However, the function does include a check to ensure that if the allowance is non-zero, the new value must be zero (and vice versa). Therefore, the risk is not as serve as stated, and also not profitable.", -"correctness": 3, -"severity": 0, -"profitability": 0 -''' - -critic_format_constrain = '''\nYou should only output in below json format: -{ - "output_list": [ - { - "function_name": "", - "vulnerability": "", - "criticism": "", - "correctness": <0~9>, - "severity": <0~9>, - "profitability": <0~9>, - }, - { - "function_name": "", - "vulnerability": "", - "criticism": "", - "correctness": <0~9>, - "severity": <0~9>, - "profitability": <0~9>, - } - ] -} -''' - - diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index d6ab2479..00000000 --- a/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -# This file may be used to create an environment using: -# $ conda create --name --file -# platform: win-64 -openai==1.11.1 -streamlit==1.31.0 -tqdm==4.66.1 -STqdm -# pyautogui -# python-xlib -streamlit_js_eval \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json deleted file mode 100644 index 82491755..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "function_name": "transfer", - "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (frozenAccount[msg.sender]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); if(_value > 0){ if(balanceOf[msg.sender] == 0){ addresses[indexes[msg.sender]] = addresses[lastIndex]; indexes[addresses[lastIndex]] = indexes[msg.sender]; indexes[msg.sender] = 0; delete addresses[lastIndex]; lastIndex--; } if(indexes[_to]==0){ lastIndex++; addresses[lastIndex] = _to; indexes[_to] = lastIndex; } } }", - "vulnerability": "Throw deprecated", - "reason": "The contract uses 'throw' to handle errors, which has been deprecated in favor of 'require', 'revert', and 'assert'. Using 'throw' consumes all available gas, which can lead to denial of service and makes the contract less secure and more expensive to use.", - "file_name": "2018-13071.sol" - }, - { - "function_name": "mintToken", - "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); }", - "vulnerability": "Unchecked minting", - "reason": "The 'mintToken' function allows the contract owner to mint an arbitrary amount of tokens to any address without any checks or limits. This can lead to inflation and devaluation of the token, eroding trust in the token's value and potentially leading to financial loss for token holders.", - "file_name": "2018-13071.sol" - }, - { - "function_name": "distributeTokens", - "code": "function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { uint distributed = 0; require(startIndex < endIndex); for(uint i = startIndex; i < lastIndex; i++){ address holder = addresses[i+1]; uint reward = balanceOf[holder] * 3 / 100; balanceOf[holder] += reward; distributed += reward; Transfer(0, holder, reward); } totalSupply += distributed; return distributed; }", - "vulnerability": "Integer overflow", - "reason": "The calculation for 'reward' in 'distributeTokens' does not prevent integer overflow. If the balance of 'holder' is large enough, multiplying it by 3 and then dividing by 100 could overflow, resulting in incorrect, potentially small reward amounts. This can be exploited to disrupt the token distribution process.", - "file_name": "2018-13071.sol" - } -] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json deleted file mode 100644 index 524c030b..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "function_name": "mintToken", - "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner { balanceOf[target] += mintedAmount; Transfer(0, owner, mintedAmount); Transfer(owner, target, mintedAmount); }", - "vulnerability": "Arbitrary minting", - "reason": "The 'mintToken' function allows the contract owner to mint an arbitrary amount of tokens to any address. This can lead to inflation, diluting the value of existing tokens.", - "file_name": "2018-13072.sol" - }, - { - "function_name": "buy", - "code": "function buy() payable { if(isSelling == false) revert(); uint amount = msg.value * buyRate; balanceOf[msg.sender] += amount; balanceOf[owner] -= amount; Transfer(owner, msg.sender, amount); }", - "vulnerability": "Unchecked token transfer", - "reason": "The 'buy' function calculates the amount of tokens to transfer based on the sent Ether and a fixed rate but does not check if the owner has enough tokens to sell, potentially leading to an underflow in the owner's balance.", - "file_name": "2018-13072.sol" - }, - { - "function_name": "transfer", - "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) revert(); if (balanceOf[_to] + _value < balanceOf[_to]) revert(); if (frozenAccount[msg.sender]) revert(); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); }", - "vulnerability": "Reentrancy", - "reason": "Though not directly exploitable for reentrancy in this context as the function does not call an untrusted contract, the pattern of making state changes after calling an external contract (Transfer event in this case) could be risky if the code evolves or is reused without considering reentrancy attacks.", - "file_name": "2018-13072.sol" - } -] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json deleted file mode 100644 index 2c3802fc..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "function_name": "transfer", - "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (frozenAccount[msg.sender]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); }", - "vulnerability": "reentrancy", - "reason": "This function directly modifies the state without considering the potential for a reentrant attack. A malicious contract could take advantage of the call to 'Transfer' event to re-enter and drain funds in an unexpected manner.", - "file_name": "2018-13073.sol" - }, - { - "function_name": "sell", - "code": "function sell(uint256 amount) { if (balanceOf[msg.sender] < amount ) throw; balanceOf[this] += amount; balanceOf[msg.sender] -= amount; if (!msg.sender.send(amount * sellPrice)) { throw; } else { Transfer(msg.sender, this, amount); } }", - "vulnerability": "DoS with (unexpected) revert", - "reason": "This function uses 'throw' for error handling, which will revert all state changes and consume all provided gas. An attacker can intentionally fail the 'send' function to cause the transaction to fail, leading to a denial of service.", - "file_name": "2018-13073.sol" - }, - { - "function_name": "transferFrom", - "code": "function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (frozenAccount[_from]) throw; if (balanceOf[_from] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (_value > allowance[_from][msg.sender]) throw; balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; }", - "vulnerability": "Integer overflow", - "reason": "The check 'if (balanceOf[_to] + _value < balanceOf[_to])' is intended to prevent overflow, but it could be bypassed or incorrectly trigger due to the arithmetic properties of unsigned integers in Solidity, leading to unintended behavior.", - "file_name": "2018-13073.sol" - } -] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json deleted file mode 100644 index e726b43e..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "function_name": "_transfer", - "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", - "vulnerability": "Integer Overflow and Underflow", - "reason": "The function does not properly validate the input values to prevent overflows and underflows. Although there is a check to ensure that the balance after transfer is greater than before, it does not protect against overflow in the addition operation. This could allow attackers to exploit the contract by manipulating balances.", - "file_name": "2018-13074.sol" - }, - { - "function_name": "mintToken", - "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); }", - "vulnerability": "Arbitrary Minting", - "reason": "This function allows the contract owner to mint an arbitrary amount of tokens to any account. There is no check on the amount being minted, potentially leading to inflation or devaluation of the token by creating tokens out of thin air and transferring them to any account, including the owner's.", - "file_name": "2018-13074.sol" - }, - { - "function_name": "burnFrom", - "code": "function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; }", - "vulnerability": "Unchecked Burn Permissions", - "reason": "The function burns tokens from a user's account with the caller's permission but does not check if the caller is allowed to initiate the burn. This could potentially allow an attacker to burn tokens from another's account without explicit permission, reducing the victim's balance unfairly.", - "file_name": "2018-13074.sol" - } -] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json deleted file mode 100644 index 0637a088..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json deleted file mode 100644 index 0637a088..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json deleted file mode 100644 index fc2cce48..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "function_name": "transfer", - "vulnerability": "reentrancy", - "criticism": "The criticism of reentrancy vulnerability in the 'transfer' function is misplaced. The function does not make an external call to an untrusted contract but merely emits an event. Reentrancy attacks are primarily a concern when a contract interacts with external contracts in a way that allows control to be handed over to an untrusted contract before all internal state changes are completed. Since the 'Transfer' event does not allow for external code execution, it does not pose a reentrancy risk. Therefore, the reasoning is incorrect, and the severity and profitability of this supposed vulnerability are overestimated.", - "correctness": 1, - "severity": 0, - "profitability": 0, - "reason": "This function directly modifies the state without considering the potential for a reentrant attack. A malicious contract could take advantage of the call to 'Transfer' event to re-enter and drain funds in an unexpected manner.", - "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (frozenAccount[msg.sender]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); }", - "file_name": "2018-13073.sol" - }, - { - "function_name": "sell", - "vulnerability": "DoS with (unexpected) revert", - "criticism": "The reasoning correctly identifies a potential denial of service (DoS) vulnerability due to the use of 'throw' for error handling in the 'sell' function. Using 'throw' reverts all state changes and consumes all gas when a transaction fails, which can indeed be exploited by an attacker to cause a DoS by intentionally failing the 'send' operation. However, the criticism should also note that modern Solidity practices recommend using 'require' for error handling to avoid such issues. The severity is moderate because it can disrupt the contract's functionality, but the profitability is low as it does not directly result in financial gain for the attacker.", - "correctness": 7, - "severity": 5, - "profitability": 1, - "reason": "This function uses 'throw' for error handling, which will revert all state changes and consume all provided gas. An attacker can intentionally fail the 'send' function to cause the transaction to fail, leading to a denial of service.", - "code": "function sell(uint256 amount) { if (balanceOf[msg.sender] < amount ) throw; balanceOf[this] += amount; balanceOf[msg.sender] -= amount; if (!msg.sender.send(amount * sellPrice)) { throw; } else { Transfer(msg.sender, this, amount); } }", - "file_name": "2018-13073.sol" - }, - { - "function_name": "transferFrom", - "vulnerability": "Integer overflow", - "criticism": "The criticism regarding the integer overflow vulnerability due to the check 'if (balanceOf[_to] + _value < balanceOf[_to])' is partially correct. This check is indeed intended to prevent overflow, and while Solidity's unsigned integers are prone to overflow, the condition described is actually a safeguard against it. The reasoning seems to misunderstand the nature of the check, which is correctly implemented to catch overflows. However, the overall concern for integer overflow is valid in the context of Solidity contracts. The correctness of identifying an overflow risk is appreciated, but the specific criticism of the check is misplaced. The severity of potential overflow issues is high due to the unpredictable behavior they can cause, but the profitability depends on the specific context and whether an attacker can exploit such a vulnerability for gain.", - "correctness": 5, - "severity": 7, - "profitability": 4, - "reason": "The check 'if (balanceOf[_to] + _value < balanceOf[_to])' is intended to prevent overflow, but it could be bypassed or incorrectly trigger due to the arithmetic properties of unsigned integers in Solidity, leading to unintended behavior.", - "code": "function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (frozenAccount[_from]) throw; if (balanceOf[_from] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (_value > allowance[_from][msg.sender]) throw; balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; }", - "file_name": "2018-13073.sol" - } -] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json deleted file mode 100644 index de2f619e..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "function_name": "_transfer", - "vulnerability": "Integer Overflow and Underflow", - "criticism": "The criticism of the function not validating input values to prevent overflows and underflows is partially correct. The function does include checks to ensure that the balance is sufficient and that the transfer does not result in an overflow for the recipient's balance. However, the specific mention of overflow in the addition operation is misleading because the 'require' statement that checks if the recipient's new balance is greater than the old balance indirectly prevents overflow. Solidity's 'require' statements are effective in preventing such vulnerabilities if correctly implemented. The severity is overestimated because the function's checks mitigate the risk of overflow and underflow to a significant extent. The profitability of exploiting such a vulnerability, if it existed, would be high, but given the safeguards in place, the actual risk is low.", - "correctness": 5, - "severity": 3, - "profitability": 2, - "reason": "The function does not properly validate the input values to prevent overflows and underflows. Although there is a check to ensure that the balance after transfer is greater than before, it does not protect against overflow in the addition operation. This could allow attackers to exploit the contract by manipulating balances.", - "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", - "file_name": "2018-13074.sol" - }, - { - "function_name": "mintToken", - "vulnerability": "Arbitrary Minting", - "criticism": "The criticism is valid in highlighting the potential for arbitrary minting by the contract owner, which could indeed lead to inflation or devaluation of the token. This design choice places a significant amount of trust in the contract owner and could be seen as a vulnerability if the intention was to create a decentralized system. However, the severity of this issue depends largely on the governance model of the contract and whether such control by the owner is within the expected use case. The profitability for the owner could be high if the minted tokens are sold or used to manipulate the market, but this does not constitute a vulnerability in the traditional sense where an external attacker benefits. Therefore, the profitability score is adjusted to reflect this.", - "correctness": 8, - "severity": 6, - "profitability": 3, - "reason": "This function allows the contract owner to mint an arbitrary amount of tokens to any account. There is no check on the amount being minted, potentially leading to inflation or devaluation of the token by creating tokens out of thin air and transferring them to any account, including the owner's.", - "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); }", - "file_name": "2018-13074.sol" - }, - { - "function_name": "burnFrom", - "vulnerability": "Unchecked Burn Permissions", - "criticism": "The reasoning provided is incorrect. The function does check if the caller is allowed to initiate the burn through the 'require' statement that ensures the value to be burned is less than or equal to the allowance the '_from' account has given to the caller. This mechanism is designed to prevent unauthorized burning of tokens. The criticism fails to recognize the role of allowances in ERC-20 token contracts, which are a standard way to manage permissions for token operations like burning. Therefore, the identified 'vulnerability' is not a vulnerability but rather a misunderstanding of how ERC-20 token allowances work. The severity and profitability of exploiting such a non-existent vulnerability are both non-applicable.", - "correctness": 1, - "severity": 0, - "profitability": 0, - "reason": "The function burns tokens from a user's account with the caller's permission but does not check if the caller is allowed to initiate the burn. This could potentially allow an attacker to burn tokens from another's account without explicit permission, reducing the victim's balance unfairly.", - "code": "function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; }", - "file_name": "2018-13074.sol" - } -] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json deleted file mode 100644 index 0637a088..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json deleted file mode 100644 index 0637a088..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json deleted file mode 100644 index 6dfa6dc5..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "function_name": "transferFrom", - "vulnerability": "Integer overflow", - "criticism": "The criticism regarding the integer overflow vulnerability due to the check 'if (balanceOf[_to] + _value < balanceOf[_to])' is partially correct. This check is indeed intended to prevent overflow, and while Solidity's unsigned integers are prone to overflow, the condition described is actually a safeguard against it. The reasoning seems to misunderstand the nature of the check, which is correctly implemented to catch overflows. However, the overall concern for integer overflow is valid in the context of Solidity contracts. The correctness of identifying an overflow risk is appreciated, but the specific criticism of the check is misplaced. The severity of potential overflow issues is high due to the unpredictable behavior they can cause, but the profitability depends on the specific context and whether an attacker can exploit such a vulnerability for gain.", - "correctness": 5, - "severity": 7, - "profitability": 4, - "reason": "The check 'if (balanceOf[_to] + _value < balanceOf[_to])' is intended to prevent overflow, but it could be bypassed or incorrectly trigger due to the arithmetic properties of unsigned integers in Solidity, leading to unintended behavior.", - "code": "function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (frozenAccount[_from]) throw; if (balanceOf[_from] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (_value > allowance[_from][msg.sender]) throw; balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; }", - "file_name": "2018-13073.sol", - "final_score": 5.25 - }, - { - "function_name": "sell", - "vulnerability": "DoS with (unexpected) revert", - "criticism": "The reasoning correctly identifies a potential denial of service (DoS) vulnerability due to the use of 'throw' for error handling in the 'sell' function. Using 'throw' reverts all state changes and consumes all gas when a transaction fails, which can indeed be exploited by an attacker to cause a DoS by intentionally failing the 'send' operation. However, the criticism should also note that modern Solidity practices recommend using 'require' for error handling to avoid such issues. The severity is moderate because it can disrupt the contract's functionality, but the profitability is low as it does not directly result in financial gain for the attacker.", - "correctness": 7, - "severity": 5, - "profitability": 1, - "reason": "This function uses 'throw' for error handling, which will revert all state changes and consume all provided gas. An attacker can intentionally fail the 'send' function to cause the transaction to fail, leading to a denial of service.", - "code": "function sell(uint256 amount) { if (balanceOf[msg.sender] < amount ) throw; balanceOf[this] += amount; balanceOf[msg.sender] -= amount; if (!msg.sender.send(amount * sellPrice)) { throw; } else { Transfer(msg.sender, this, amount); } }", - "file_name": "2018-13073.sol", - "final_score": 5.0 - }, - { - "function_name": "transfer", - "vulnerability": "reentrancy", - "criticism": "The criticism of reentrancy vulnerability in the 'transfer' function is misplaced. The function does not make an external call to an untrusted contract but merely emits an event. Reentrancy attacks are primarily a concern when a contract interacts with external contracts in a way that allows control to be handed over to an untrusted contract before all internal state changes are completed. Since the 'Transfer' event does not allow for external code execution, it does not pose a reentrancy risk. Therefore, the reasoning is incorrect, and the severity and profitability of this supposed vulnerability are overestimated.", - "correctness": 1, - "severity": 0, - "profitability": 0, - "reason": "This function directly modifies the state without considering the potential for a reentrant attack. A malicious contract could take advantage of the call to 'Transfer' event to re-enter and drain funds in an unexpected manner.", - "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (frozenAccount[msg.sender]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); }", - "file_name": "2018-13073.sol", - "final_score": 0.5 - } -] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json deleted file mode 100644 index f2aecd76..00000000 --- a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "function_name": "mintToken", - "vulnerability": "Arbitrary Minting", - "criticism": "The criticism is valid in highlighting the potential for arbitrary minting by the contract owner, which could indeed lead to inflation or devaluation of the token. This design choice places a significant amount of trust in the contract owner and could be seen as a vulnerability if the intention was to create a decentralized system. However, the severity of this issue depends largely on the governance model of the contract and whether such control by the owner is within the expected use case. The profitability for the owner could be high if the minted tokens are sold or used to manipulate the market, but this does not constitute a vulnerability in the traditional sense where an external attacker benefits. Therefore, the profitability score is adjusted to reflect this.", - "correctness": 8, - "severity": 6, - "profitability": 3, - "reason": "This function allows the contract owner to mint an arbitrary amount of tokens to any account. There is no check on the amount being minted, potentially leading to inflation or devaluation of the token by creating tokens out of thin air and transferring them to any account, including the owner's.", - "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); }", - "file_name": "2018-13074.sol", - "final_score": 6.25 - }, - { - "function_name": "_transfer", - "vulnerability": "Integer Overflow and Underflow", - "criticism": "The criticism of the function not validating input values to prevent overflows and underflows is partially correct. The function does include checks to ensure that the balance is sufficient and that the transfer does not result in an overflow for the recipient's balance. However, the specific mention of overflow in the addition operation is misleading because the 'require' statement that checks if the recipient's new balance is greater than the old balance indirectly prevents overflow. Solidity's 'require' statements are effective in preventing such vulnerabilities if correctly implemented. The severity is overestimated because the function's checks mitigate the risk of overflow and underflow to a significant extent. The profitability of exploiting such a vulnerability, if it existed, would be high, but given the safeguards in place, the actual risk is low.", - "correctness": 5, - "severity": 3, - "profitability": 2, - "reason": "The function does not properly validate the input values to prevent overflows and underflows. Although there is a check to ensure that the balance after transfer is greater than before, it does not protect against overflow in the addition operation. This could allow attackers to exploit the contract by manipulating balances.", - "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", - "file_name": "2018-13074.sol", - "final_score": 3.75 - }, - { - "function_name": "burnFrom", - "vulnerability": "Unchecked Burn Permissions", - "criticism": "The reasoning provided is incorrect. The function does check if the caller is allowed to initiate the burn through the 'require' statement that ensures the value to be burned is less than or equal to the allowance the '_from' account has given to the caller. This mechanism is designed to prevent unauthorized burning of tokens. The criticism fails to recognize the role of allowances in ERC-20 token contracts, which are a standard way to manage permissions for token operations like burning. Therefore, the identified 'vulnerability' is not a vulnerability but rather a misunderstanding of how ERC-20 token allowances work. The severity and profitability of exploiting such a non-existent vulnerability are both non-applicable.", - "correctness": 1, - "severity": 0, - "profitability": 0, - "reason": "The function burns tokens from a user's account with the caller's permission but does not check if the caller is allowed to initiate the burn. This could potentially allow an attacker to burn tokens from another's account without explicit permission, reducing the victim's balance unfairly.", - "code": "function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; }", - "file_name": "2018-13074.sol", - "final_score": 0.5 - } -] \ No newline at end of file diff --git a/src/CS8903_Aditya_PAL_GPTLens_Demo.pdf b/src/CS8903_Aditya_PAL_GPTLens_Demo.pdf deleted file mode 100644 index bfec0a0514af0c4675089ba48e61830a1b97da90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797910 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%0DAPWhXu8QN zTpR0)XU3*hGCLB#b>nz5E}WR zJYVYpFxgsomlvLAxMu614x@c%wE#SJ!|;E$-1@!c(+GXPm5{6Jeze|^d}R)YEcv^= zAD<02!=?t)n0jhcmWDf`fPV}a*Jf+x34LO!At@vy3~kXuZXz&Qn13 zt16RjtRwcG`(?$BG`GgSeC;l>Ya#56j^v-kaCz$ zNdCJcsL2x+ln2|ztjYQE{AqU!P1w_=gvayuP;qV>88iC(8sX&I?@V*nUNl;IyUL4Q zPb$1g60&=t+*bB=-#9(}LFWBC+rO-a=Yr2a!dq;Nd#*$}a=v5P=hL6?mz0W~qKsgi zMiuq*_APF6%GHtxAte6Cl&7@+9m4(xX8FtVa-J4sc*gDW2HCzms+p;oj6lg_BQsmm zt_YAm-l+*ni>)?AxiznarL_JC_YM==b40k~sw%5YP5Gy!jIfrUYGj(6*xVe^x`G!) zvc~&ZCps!5B=y3cPQKF&NGrdn@d$=t|SII1h;x@9o=7-fps+3-E(! zi?U{6f|%e=XIm@=t{=#Qgk}2iQWIFJ*5~S3G!IFDoxf%b+OM{{t*Pd0s%k6}OthVU zsEbp*a!cjkS4%lqHXH-q*Q0L(Weqr%RQ4`S^8W3}?}-u&bh|^UH!pW;Hf9Sa*9QwE}R7wpz z%x7BJD872As&NVo$*8GGFlriI_j#Tm6Sjf%0AM{z*uE@C9O|wtGB+Tts5rSwCv)P{ z2=g$jF*bhR&-5zvT;IWwLm?#^>w$GtnA#H(OgT)$zFcZo zxLLf-oY;I=GFG+AhzH4N?P-CwixcU7A*bzjJ+HEM2i-B}_f0VkD!Xobv2~bw<;3xu zJ2r4p$H26WiAVa4(oMY4fxWH!!d?kb3iEaDc6e@|1#i=gyHL{!IShWO} zmqyGR>L}-(8}gNXvhuFtrh7PkWIfHYd(`TJSXj~)Y?cLDJ9}?P=oZ+3`HKIkbm~Gh zvR8!31YGgSZ>Z_>j?3wGlU~J_%v9KN-y}D4s0-n@gYhPB0WzupLRmme(r%2dA zU)4KG&wz($O=q7j5Ja^(=K|w$cgH{CZ~vf7E~9>%RF>`;Gd^%8alCYVZe~>MQf>HB z-y%S>97-;Fj638MeWdFuv%)?nYA|03SF7jE#tA)OUE2QSBTv?^vRJ}FRi`|4h2KiN zJHz9*mUoPBFfm%abH|()BHegnxUis$$4-UXcZ^We0+IS4#n$8eS)HNPLzQu`C-=>F z{hN=Hc7!Jpv)wEF?|#{)99;tuu+UfZke0bEdK5l!vwcH+iKv_EtG6qsGldze(;Dv5Ac|Mh0D`&0g1TL@!%g7EEH~C(Ufy~lLxivjb^Zqa7xDc6EJ#!k zjN+LyAw|21dIl!QbdY7*Qlh%@ZQ_P)GnBiY#WP9)Y3(lrCP6 zf3WUD@H~XF6|4?Tqtz#$&sE1_Zk3DvgraY2OUT2$*S#MAZ-{5wZzV2$(CT+*Mr%%x zX`ha{6|u}yNqQ*7_jLE2DfOku2<>ZCreU{iRqetxZ3FjHv z6)UzH{e=RmUw@1ukQRvWkxsZ2ktyU@=CZcfcx&_k(1`Soyf_eT0@16MS7a|->QV;l zjK*l3e+YINmgSB1*vo_mv#)r{luUFqbB`fD|I}JItTk*x73=Si=y})ptFhzqb}x#0 z4xCiTiewrRjSiah?ot`2`g|nts1J6iQC?OILxByI_X=YdW<%%8xdpRW_oq z9+x*=4xs6Z**)cWu)FZ{F@HYjFnW^{ettwlcrj^sF)be8lIAj3^-X^6IMM%F6S^*6 z!5#nzHi;b10!0)sG_yJ5I@=~57BNQ~dtbz&+oeIm+mvlV$iz@PnVco5$%t`@*pG*| z6dLYQP)ux19A#BUmPTr4^3!}dz4(puF{6^_-e$fdk$kw&rDRk$kNK5xas)qOZ#u=3 zAU8*6xvinEF342A1GR*6-Hbj>{GV*PM9Xf8V$@HJNgO=)tU1V_u#=JY`t`=j-HhkU zMb$%_X#+>dn5Z=LD)UK35XoLaD1fyU09oeQ`K5$y=nyj@O73FzIfkC#+0mw;yvvpb zBAhZCECv9e0Z^7wF$$hjU;Wf;b=XN)C41oe#0@qLr}Kd* z6+CKXxJ|iw11lx7OvF#<)5+ykepZ<55z9gGhJeJo*tgOSsK%sPgP9k}Sa{NVsk0wO zfo02Wmj1Ssm;~^P>vKnFt`}FgH|FyEs%lA1MDNr&OJh>%b3`MDh{ll!8glp!SrcWf8XNu6!_A4!T#&#(v z$GM4wi`f)?{wS)1ob&yCD`rd5M9td&$}Tje4?-|xyVQIJu_yp$w-};>-l7JeO|_Mj zuBG`GRU_X)^+6r2hv9184&2mbk?!}96t^ZJ%SK6Z2_`IjYO3HTMiwMXNu^rFM{%yG z5IzW=buy*Ij%UHW9Z64ngJX-eZad$Z3q(!0?5F8-&qUF*xJ~VrlVo^wy8_i|vp4;p z9yIldUwzN7P4-&0gP*wx)%TFf9N^=<9#jCJHQ8TzQBT8?sPoP1d5Y#7qBnS^R)e)C zA+PhoexO%xQNRnG>X!o6SqSz}tgVmB(OdJhfv-(`j|EhFg|CakvG-~y$WAs(LJD>T zS*jC_glxS(%Q{Qi^L`1e)--`=(XFORq$hM4KZjOZC|vxJN8Lz}zJ`!1 zRqXhc zj6nIO-4pj<`YIEW<3~KCyTT11N7lp8)5ASb96SVjI(sEPak_s`8+)jz8)MZhQcb4F zK9imbe5*e4W|l7$f$MHzTq(ia$}Q)B)-IR%3{dz(jMgq$4b*=R`KVIEd108uthHxA z-2k%K7-M-`nc)4lG$@r@1e0#4u7?I480LsSvb#igCkCso9S3W%B?oSX6`{goY<}L< z&Z@cjZ)l3EbvCvKcTFP1ZmsX;!bsKYpIgmPfMLxS-+-I(0(aYGxfb>3dwc^{bE3JH z*cA(|HSE@6iipZ#FZdAyi*$MUzv_7VXrV-Nviiz+#+77`#Befy_mvQ8!t>L$7w!XO z-+&S$`Q@xdgoiz6zXNr$nn_P*!fsBn&)^VQuWADMdS^pvujTDvKnrTOy>ik_o4tL4 zT?~Rc6~kH>1EyxbbI6~d`c3omhbq8V@TEgAwyc*q^Dju|+&%g!C1hLQIlu#zcBCGNLwwPV3n40tC$AwEp2=}V(!$#^gNtUOA7CJb$= z<2i<{c+pQR-L28JSbcrX-M|}Gw{E_bVKY{j&Eu-IbumvWd$DtLq?SN-yx91ox#L+e zZ5HdFn(B{F&Y4PNZ%wP1xz($ENR^gBi99>L8-}O(CLu^@$K&*!msO z7vqmj)yA>7bXQmcPXkvdzZ%Tzq35)t8V!Go)0L&cw#;YZWMhrxMuU=HK5genTgEn0 z?WVr94f0~05#|!Lt=b)JiuRnZ?cMZhv_slsUAr-*o&wu0 zw^2^llRUxS2EK0DFh8Nc_iOoGD)q1ZcQjOF?E5VCjK+yJLF*}?kjLbjZzo-BJZZ-8^*1qXBJP9qX`$LgfD^Ia@NeqK+6%uJk@F#iiJPusjI?bFHZ|qufMHm+h*jnT@Wr9%|C3m#YQff&M zwPHeyPpl!QNUeS=MX1a=6@|}??cT}-0)jnUAH0=yN`84&>6)`cKyYo^`m-T*Z=-{x zSL`ibfq-dS-^!yNfwj5^KoH4vgUQL(mf^vEl3X|1U~2y%?|dW`+7_+e5k<&yvJ!X6 zfg20e7g>Ohv~p@pq*1=5bL{xh=n?al%sFmjDoYgK*Z4oZw`=9X#Lnb1fe57v3xX@b zU#jgj_HB;m%o{msi2mBvb#H~aS(KXC$x)LFyrz3|*|5m=Vd6_;R2zQDMr|E?MkQ7O zD}D&Czz$$Nv42vOR@@@pf+UN?>ioX`?tpWC`*jD^@M+{(*2ltn`Q~^q{RKo+_KT4#;$ocbW;StqgklZDU91*uAus^nl$>LSYvR!2PwW0&` zy)Nwrx%T1|=uU>Mm;y64=9^6p!x9}TBOt;DD7bxDN-(rKP|Ut}#nF+wh&%#Sp#}o? zOF!}-Lv=4;Y3(^$^awdF0G9C$%Jv0m?5{91U78 z*BazX;TK8Bx|*}h3@`6R3Uo?D1hxdSeH^kgw=b-W5}TxTq+PdMrP$m3zs9!bEhxA5 z>HRwJ4!iFG@VnTJR&%1N5Sx3UDW>Q<&tQ&4Fi!J!J_^z1{e@`%S$elldEl;kT1DsW zXmAPa)BnOBK|KEs(OE`0;@1p)mMHu}6M3#mGi8&*%MI9-;bhS_lhUmeyk*;Ra6jQ- zL1}mM(wiE(CQg(up0Wa=U%n!@+9WRRArlIT$U-i`Q&5T+N>TKxdP7}LNx};Op4|&2 zbQHnf?y&y8Wd`V4LZeNVG9L{e>SLKV4ecSBye& z6;*Alr@Us-z`?W7aeQ5_O5T)i7Utddgr6T6W{u;glX8s+5OyumXSnOLl&nZ=HTH^8 zl#X{nThkwo0UllGdm{EVflflu{lmmdw+w=e2Y;-{WHhKruP_m5L^-RhmQs$243O0-Kc+mbXUmF!$W>EDo19S|)oebImRbQKE5}ZJd>5Y_-@>zQ3uw(!oWO5x zIKN9Yl@8SqgAMwO?)g}8nw;1R1PhwsTjsT?>m5*ob|V_AhL2I9eXovdCibUcfx?G3 z(#|3vHuaP*6(&%TZlg-~>kO`FC%oM*sr5#IQoUUYrpn3UzWVr0(;x*t2J+eKA?L)F z&c#neSK`jLSJ6{n0_>#^8`I+N0r*=ao{_OzOz(LEY_yYpllPUJ-%*V7Q`g93EY~Cu zyWV;mWMgp`NK5o~ep^-0aIcVq1R-f^IxFPN94H`DvbY+y>FBrLng}~61j|mbT8v^D zn0aWGx~ILKQxv!dpEZ=eoD+X7;w$^~>2d-IFy%UbL?CF+9>kd9~1ei_`|s)uA*K3LBrMTb0BQT7wW+ zP`nyPE*I$qeq({*VKtM$}1S{Ga8>j8T z1EAbhsIf9-_M%kb#L(XnM2TSmqDZkqv8b{%;jb%&IDKSk+@~J^SE321$t3%VcPA~Y zVifdiBa}OCHBb+Z0-ZjN>WNJj0gec<6T~ zsq&8UGipTv=ib8&Pcr}c%WoX|)9cRVm;1;UliUNuW}t+r56=RGqrIn ztV+RKZC(9!2c0T5P&G2KMdeq8Q+}JECb+7ZgQPGsv>)Bnzg%`CxwQO`q@WV|PQ%w1 zEtv530rAN-m(2Qb$lUpvlx*u0H}@HHXvMqwzf!kbH*m!;mfeyRY@6hB{w-z^ZM!2= z&l32`Lo=t#{#5MXV;jDl3|9oF8`iC+MJ|f$Ce;PG{>dfSBj9$3QS7L@=1D1SqFN zi?dk zUrFoeyeIAirM>WADbn*SA+_LcKxXXALulJBTh}j!j3{3sWKYJ1BTIB#e8${#_ZT(@ z!o}8oFX@_4>ZY@5cnTyFyP4_4zc6RTL6~W~;{o7_1<_d=M^eM3H5sex4}UxDk_~Ng zAV{Az*knE{<1s{o8|t9nNr;yxBozjJKtWY+R-An?!u3P}HEw$*6iF#CBw8yg`U37m z$ChQdPa?EUec)UKK)h7kSBA7dS_k3WJVi*sg7yvm^0tLCu{1G1bNl#QL$`~eOL(H02SY)3cf$p*NI;BU8_#3IDgLLdPOSr=TE7%hX!SEV7E zhIuJb!SjkYZ~_A%IKuIv{N>XmI+o5x@t`ou^Pcij?b^w z2S2=2yVJDOyABm*T%wDUh_s2tIarhu>VE3b$m*rM<67b$ACJO|fBUX<&eJGeR1Qm% zI^DjqYOvH)w_PO|k)3#Y!FHy|PMNRHK0E-NBpD&NvRP9JvQ zUx8$OY%_KDPtE%1<6m@8^aiXcPEJ@AsmeCDjFmQyh>okg4a7;5>FbYhGdeHE46%Ld z;2tQg1`9uiv^D`LK>l_XvlkY9{5d8++}5eoJ@v7N!@v9WeM$JJ+-QeNMgM1Y`gX z&d^$93cmn@3g6rZfw`DfWfXcx3ZHJmRwa)72(vFU?1Pm6Wua}I^$od%edJs&MUDw{+U1ec-eGXK;Jv1+2D(js!@6}jx zf64SMtpml-#kDahGD|Ei%cW_D7J4ihU#519YD!vtCKuHri}xUxR82KQA(&xL>F$%y zo5Crg3*|D%J+ANQ(+!5fZquciJG_*$Gc87S^)12k!)H@h{`@hOD4SoqK%b1}mzjnfZya>382@gT#u~9w%7|J1jZt8fCwpvd75Rxc0cK8F}*KA8W ztPy7=2^AP_Xo{;nZtxy>;(fZIyNX z&@JVKDs7h zR~!Qhe8i|Oh3%#rEZ^(s4j_t1mq!psF3s6l@DQbwxNz+05C{B2WVSUk?`gVyuW)I- z^inHXWMl-W`ZOkNbGmY6m&H0Kh6Scfb4c=)p{d5X@t z9I?J}R9cYw<}`cLrh)QLb=ysv*5AJ0wORf>QB@aeO==jfZtO1tRIM@jDU{T}@K#+I zyYBlV;j0k|y=DJIYrY;Nqg)}j_-o`IL3O-#?-)PsN*X)s*hqfKRj~8)Mz)EOU-g~z zPY>0#=UWrUB}JE-a!Ib%EU6y+`o*MAo|KA-Q&U{}qE_JPQrld(#a8*R1-Uh@yoD~3 z<2ymo^>f@Ej_7@Za!J}uMOX_C{A-i#HlznhwtiexO1V}Y=@vUd`f*}gmJY*->2>Xs zixK?1`soZ0<2ivbGZL5TH`sE(2DW6Y-B6^!RdGK^Cg^%mQ#2R#wHdU8p@wEr9HM;A zz+SMpvl%Ky^lBz{bOF`Tabt-1tBK6$mH7^pR3=K^zc#P0zQoLO$zTKvh~8xMj#1uC z{o#c_yhp+o2n(|`B=4|bCUkSSaq~){5jSu_UuMSWH9cS&O+T5Au`cM#Z^J5E=)K!G zD>0E-EDx>vT8+x#FQ}l7!k;RiLFWc#?)ld5JOB#GaDp>iPKRQ`0}c<^tPX4=F}4JU!kso z32u!cqghbPvkw>uY*K?o33t6U1imfyRnr=2iWJ5Xm`OxD6S}6pFqRG|NC!F^m329x zf)952?j3A5)w#poD2x`TVhb+!%aZkOrlh2VJN*rwZT=lR=j}v*txotK02@CnDX$2k zQRK^v+`7=bE+xK)NL@p1FvdHftSIRh1;Wi)sWC&SWq}4w3B@c{rQPyYIflP5p9}9w z8c=+tecv!r=D#;6PmOQ*%LZUZg!gF5l9ITQ)QGc-{30$?>lsKZgz-Eyb~n7cVK!Sf zUDilITB+YtyadvjiZ@|)B3hWGrKPLW!&3QF<{bv-GimWX#?lUXZCE&9H(JJlTlwZS zid9G^`6f7r^6vfZr1@@$d0cYL=Al=^$2nLI;-vW|%~I|JeddN^c?`m7U&0URP_;bk zay(D@bXhXXx&D<3yZK&ll-p75Kg*E#hYtr=PgmU4mbPh-V+hL^)bq|?gW@O2Inyy< z-{4h4wAu;wu=VUwnq-|v7kz20;v#Tcq;N9tH;(AZac3BpW&?6?G9ylUS~H-ckyI9V z5Z!?@-5_Sq$ruobc$@B0G1EKEOr1t)uYA^jx9s-I34w75yV z6mcHmemBZBomWEHwv2m#5NEP*%QBLiNf$DyNGPwpO-H`f?|S^g=o0T1^>{P{KUzFO z;1qTc(IzgI2cITk3l1MEP8`vTdU%TmV?Y(`pfbA`rRgaIAC19SMeO2axCX#A&o{_d z#g?PHaS*c!n5;I9=I0xhnawYp=rA)4mcmROE@dar&vnJI%b0e45#L!d_gV}Ux7AX) zh&#S7FCH->P*K<4Cf4m0wUa##FD?q?-`LJyr`3|pyb&55VH^7Lc;i-st}*SDtLlef zGqoB2POfOvzGF%ET+e=R_sj$~$em0}i_|LgnTsgQF(pgV#D&0vqCBMG&tgRF_h7r| zP)Gc!MyE2F+n=q}KiiyvU`V!|plB{dQc)jAXcEW|(13eZlP}_3(v%LpPmi)64t8cl zJA1Q#j40eWiB^b`bJ*l4v#hi=m9(<4H6sjgu3h%PP^rX1IB2fw^*YoO zNZfwO>%ih){C+kBk}p>SX&j>XNAUM}wwEz3Tv4tiY3 zm9lcrbm;uEPdLEjzw!3gVNt#N-tZs_iiDIjNF!|^(kN0Q42X1zG(&ffh=6p1f^^4# z#LyuPBAwCdrn%PP?uM-9(C)m$wR|K2g{@JhFP{9o;Vhl4&t&h3D#Gf)wk=;5?DFDMWW)5Gy!6 zV~la)!As>Ig__O;oXD&$$b9l4YT4}m4U*EtT~Kc>9p+*IC4Ffc84OU*0lL&Yzd`uF zLBmnQxEnH<5yI@UPn$%@CAn00Z<-)UsX~mws#-<9jWUNvkV>>_46B0*nf}Qvs2BBE ze|J`bJGAfv!__Lu(;s^WnCUpo(J+F;n7ql~1=nFDX@5+?i5Da3Q9f>jl8Ls1m!|nY z>VUXgMtv$gCL5B1grk5^k$Uo@Y};)YJwtW4{KTT^mfQxxJBTM-97TTuITH?Ahy{s+ZUN_5$_8NpmM(WPj!uysa81035cC3b1(+Vzd<_4^Hew zS1rxbafIjnyu=h zYcWCK*Za{FoNwIF@L_1yAni*$E!*oOWp;Zljfr?4qT~k0FqR`#KOjUH16%bLS0FHf zy3O7WML)JN!BDjUYt0`6aOOuw^P$VHe}kedyhPgrXd4fWqojI6(fyY3Lr*+?-|%-8 z^>b4LiRw-6k8NA}W6(o#nU438`}>Zhn9WtjyQ9N4B{oMkuN8$7S025T<`!FSs~rMrp@s}mqKcI@pQ8$t?!B?|F(-l-Z+qwu zr9a6mGRQlv7MzaiB?N?eWhrk_Xz2mXptnR-Uq47$SMXN1PDoSP#%=32S1owGUOD}> zBr0GHegQr8-x~tlAJ50 zE$cp+PjbB1I~9YTvou+`!Tu z4M@Ig$}&JnBxOAFwkU1IzYSHFy>fKCg}m)jjKLqTDnw#mRg&O}aBUQFASYAMA{W)ws=57ZCP_ zo<|cWGMm&>7?qXNgcSu}_>zCAYJzmG>+#FAlioAM@#8E~-{*&1#Rvg4mOGe})zmlV zu*ZoT42~YSV`!!=`unx_AP^~tso47esz}rymAC)hi%?)yh+28&i`&!HTD{+(8aVCl zOmffnUjt;C-EQvPeoCWo68+T%%th}0dJc$K4f}bosIXg}XEYaUmq}%fHuI@L| zo8}FF#yt<>-v<;eW!f+>+cSl^7nP9dEsnTI>wvG6F|OeRc3y4mn+Dc!sVB>Nkh`5{ znyaD4$i>C0(w>yA>wP=EWXY%>qs{f4bb;;dzd`f|kK3r`y$XA5a*;aDoQ<-E@)mr& z{oL6Ox8M3O>PR6Dhzz~nT|gq;N0LDDLQKg+6S6)7Agz@$YFUe2M(9 zqDSRFqZ9MpT}D&im~1SeCv~ukf6&Gh62uQZ8dLWnGu<(qOiO=`lu!{NKxlr{BTJTf z((S`xOc>K?OwrobIALBl2|7;QU)0uMCL{u_gidI`$@cV!Dpk!lA68T0dsAh=dL3%{ zW`>QIXb;`(T@j6?%iCgRX`QM`iXU4MyBSIBm*G@KDnqQz^#x_trDA3~uCKdL&BNgN zPzi@M*Oc^L)j~0+7jBzaG*vd)v^UfwsnI$2+(h!_H?ha@HPNP$hLM&c1|N1Dc{4L4 z@?Q!U2JQ^{w#KY12tA9i%(SjdIQx3Ei4r-Uc+hQHGy}GKMRUt7oQ`($`jK=Jy5nn3 zrmaS5d?T-ulgGPh1{6c5cxD({MaeBpAbx-9NFwp_87t{{#^kTpT6esGHglwOD-bzb z0T*R@QLO37Vd2%WC}uimRMzkq_8Ua&?|1(<$Zrt$*b&pYvjV={a70ze=e%#&G{6a8 zU^H>(X;|9>pj$}g6{<5Ovd7(J^H$KUSAM~=jB1VX3gORJUqRw8)J-3t9Hq7 zdwXONc|(cs4vRZksb#F;HdY=XrP52^wMcmwxxuG2v;fvNX`-NPPl@&9|=j{amH&?}?{8=f|s;g>#7tXDo3Kln!EXj`g zT+E=z&IHh<-AyQlZOVRGi~E1|Ozr+ju#)TDT%R4LbYtN?_w}#D_xsTmBIAjI4C68P~qLCf#`k&CCtSC6sK@~kt*izT$lw4BdU&uQh>?BF5{ueyFT?}71m zSlh;TUUgKxFgqRSIFhKmm2X<$#GZ6ob7arnbaLH#+nA-A^cn$k zkDWopf{TDOlBZxa4O|tXtH<><>Zic~yVKfxJUS7xE`8%%(N2$T& zGM_Z){=u^`v0O@A%E)JGUaF3DiY7X*u?`s?da=AegZ;Ss{fubY9U>v6gQ!in_l1z= zL$1>A3;+0_yZm+_^xomE?bL%$eeK(ZjM|6WZFgb2=py#&x)il|NME*57@q^4Zqcd} z$MJM3O;;;4f$$I@5JUlR(Gf2*qnhy(3EjQNrJp|4wNUtlBV{J5mT#;Ua^)}!Oqw5l zY-J02zI4ZoL!GWKUd0JIW#)K2`Z*4szG_c#*(;tHz(@{;lcJ9Q_(O|^4I zpQ;!o(5zb83(1wO^N_KkG%}+3{;6)^)!X&PHFGoSTh|uAtQz5OOV;;)Q^Pbjf$9q4ss?k*o;Wx)er%rYO?8sL>d(GS>1$8S@LK<>$ zQjHHTRtZnag}P)=teD|!B-DdRf1zxhJKKF7`V#bKJoJV2PZD6*_CZp^6Csg#N8X)E zsnH|nw9@_xilnGM3fP=D-!{y#J_{t_G^ z2Rq)F5FqJ#Fi7dHOeHK6SPp)J(OHJ+CTGglMh#2s9p7U45G(U?*E);rLE5rn(0UT5 z;v}nAACFn%dcYTg7T%k|EzM4)k8Y0Kvl8RRr{iuY2Bun{ujHkH7wAa?pf}5u&}B@U z%S*x_AZ{W zG&Rh6DENNSP}pFvds^;7=U_kXk?w`)m2j1&rQ9Mk`A%t~9DDQL`)5cJugq>9bc6|w z%{HU3!gXSYyHudHjNA6*6SF>#0=t#FuCkG2;@>*H1D$;V^VBy=oR$U^E;;S)MO z&8m(C*~ILoA!&0=!PeM&xPcUnDfVCZYMf*scZLqLlFhF=-_++EwaLSy!*uUOu|}Ci zJ1+aSQXsY@Q^jvVfyEs!dR4)7}${%<3;6ik)g;hM&Us-|dBi5h*)2XO( zCH+eH+%gd3WzzT!hCBw}^^(yT6$wSfe3;ffNZpW0HV^QP%mz@Z+CG=LzK$CQY`%OkHBTq?gjW3x6Zj60gd zK|Ls$Pwx(UB4-n8Q)qb0X$I{Mm4jmtJeT8g?qrI+#dql#%$Hoc8 zSe3(qm|}3@A~L|}CrRxKapcUIEo zB7WI*_huU5PQ1Ew{8nRrQe`<2twxK5P&H?6PcK_e-4b&#`pP! z-cjn$E0`reRGKgR@N^@PmicB|HTc?=?X-HxU5#tEqop+fWs2D+CdX%lS6J#UXh-59 z;T7mN=*ZFp#~XurodJBE#e#b^0K^Yd7Dqq!NEc)D@;W) z+KGzvWOd4iB@|1DO1|+e%8s8Pg=3s1=@acRN2Q1x(8Gwh$k;e8!_wGu<0tt)3&r)z zlEg0gnM|CLJsEHJsB)Q^J=-O7l&^SQR~Iri%jfGg_4J+kr-)J6Wg-J#U4B?D93IU2 zfs-gM>$|!HQT*o*03hI|g9B_AwunHQhfvX3#k~jlLq0ZP8ghhYr8{8aoxNW-%^mz{ zN?E?^Wcul&IEUbfgskrdyUD5{QP60x55l3$0zm()-Vy=?8p8rwGhgm?nkH!ta;bPo zq$?tNKf#s5=blyvyF52gpjWs^9zH4q{P9@sY|px-?%w6r7%yLkO0l2kDG(<2o>Rxz z6v1F$NA$=YEF$w#7(7+D6c;qG?AT4XXB(L$xNr+fx=^kcIWk|xPxSCe!i8F1?O`I@ z*vq~m)A3%?Y zZ!K-E|3oFFeu66=p@97POM2;zM6G~-{<}w`g#C7nVop+7y51b zut82Z-)Ga;LJLJm`OBL3`hTPd{|q0r+a~zYP4^vz_TSakhIvX>ebdr75wUD=r1K(F zLXGJaR0tq@ZGZM9AKPgQ#5CU&>v?*S3R*si@;OFCj_KM=bH6&YduZQ0VeTk!@L-Zs zie~x*EfIU#KWA6?A&`moqZu|4i4hWW0XV5Zd2&1{zK}6l9s6u6}#TKd~`#0#IybT6&GC552+UaJu3Tb}mHlVW&EoG`_&Uw&(Ws6HW z%osE1nrJpCHuMTrCv>7Av?I?vHDiQ=ZPEHXc$K}35BN3M@~nk{)Qn8_{=~mYcmLDa z<*#hz|LVJ!J62j`T$<0w`m|Lrc}nVq$kbP%J1WFq*Sd!n*uUbOR`|P>($y`})2$LTi3B5An!FK|DyBtEE zAX{mwr&t;3(EX=%SBJm2(ZvD*54=2w?p}1!heWt8O6*t~vJ~~PMDvZt3P;J+Zh)?R zH{+hBrd~+O$8s?Y=sK`Ty|(U*=^MF0B4jk?UW6TdqycX>v=V;F!jfbSXk|;tk29=t zf2wdR<*~P`nW32AzYTu{8({Q*C_{AO^Nxt8o+`66Nw|HNG@Gi|`rM&MUdM_g#A~~l*b)?k-+mEzJ>J2?Kg&s(Bca!% zxb${@y~*bgsfT0(na{3PckfdP2GdST>Nzr=f$bl}T+v%6CNNaoq|7!Q* zk_Zq}&4naqk`=~uiEca9I>l04lZ}mOG&k$NAnU2OY)tJj5>+>djj{5GVwAONz16Fh z0bjtHPQRG-j}Eh5&ue6}NdoiHu30g+o}@FlYAzKO#vNuyz2U}CD$fNY{KZ)#b zPu#q0iS<1xnQbkobNTfm*IY$Es*A?p8Ql&e%aeH&MeB^u=>GwMp85}`r>{u+so`+cMB<^ui@_h zriZU((4yAS!Opp`cIO^)Oo=L>2G2Ge0cVMjzBR5wIQ=#~^l&!l!7%nZ{SP3AtCY^| z4Q*yBx7FL`lUsiQT~>UGEy5ow<$H6upHgPn>FRww)A~I*$Q>I_UY-}no}UHCF*9Q?5ILd*oPVu|;&K3rSR9k+9jdWG)JPlN8xltqw{ zFB%|)inf-Bv2p_Q5#PXo&AP|tQ-bGnieqp}gmHyi;A5fC+4)LfJ^`i;l#!N~ximp^ zpA9;$z*y8Y$MEVqUSzttEq$+bU0XUTEIezvsQPj8^_ql~V zRy>vIP8+g9F^9e*gFrl7WDc?wv8>QL8^1v&D5h8+`9feGGL?mY>5HiHKOnHFGP_I- zC)=Gyj+wg1?WG_i8y0@ZZ~Z<@Q9<(VvP zs{kg`KG#s$G{39P^OG}s!e#w%Arlzx?BdmC*b=TM2sg+SHN9_dt1ZIlZrS^Tut2%o z`220q*-MQ)#&3~p_)7vF-etWn;Hl_s_=EkI>Ui9cxl-6 z!0^UZgw5Hp-nJ(n6hfIa;H1e^2PMDI?hSlgO5zKU_X_IT;BmRf_IX`Hp%_`l8z%x< z?kZe|6`u;m+^oVkxPuLECp33}4as|DUJjKstCi75l;ra5%%pXQYp1|=Y^=(`0?l6* zs0-%#XMTem+s4DEF_lHSzijni-F;09r_~KOr3?v?d`lb+y=F^x9iz`ejr2SyHU^VS zrSp2T4XK0n)%MQ|{9c6*yqa=rc{pjdz`XM%!f!3%`y!a%_d>G(Mky)ZlB?mcXil%z zg7{2pY_Q`hQ1X>`3GwU!8bs22xV@u08=dQ2f+**%i=*O914Z}~7D6-Ip z-kIcP%h+1}hX!J6I(6fPhpbwdnKh&hx(jJ@Vt&J0rfVr!b0^LSDNW;SUu49iGVr#Y zy~*hN2iNa!WyOAjxTkoshyec^NP+%be-!FP(agy;*x#pimh)b|FPhUg8%ELR8?MRm zD(04s#ccI4;Q=h8Wvwho%2}JccV0C)b7=RKiJe?);i^6vWS%n_b*O1-J{P^I9yj4b zjv2WwO>+;Usl<-+`!g(-hv+2EST9jxMQj_5zc?3|=(ZoVa}FV(xA#v&!a+|Du%X49xO*%~PbzxxZM#Xt6sFm-%*^^2`m-V_sPSP|q$S3I+$Bh7*0L@YpPZdE?_pGg_f@%)D)3$r(3DH!F| z)|0H?aR!z?qC(BfXwnpSlai!c_gF%&~m2jn!~-+CriR_&Cdf94unrcW_FGY>$--?2X4Td zV<_K(ozDb%SwtnR#>L9@k+;g34XQa3xDGNlUcDa#NFs+qXXYxdV7YXAJYN~!`|rEz z&e-{G%FG*YE+uT;aKti=^H(%OfCS}B#^kG7B$nWvlZnki_*%_Q8lP|qjdNQ6oejQs z&a~3y{!*bP`Yi=sCBH#RC_Cx~T0dBM)&hKJGiLfZGHeM1Z-^xj1&qu!b3 zsxUtCmR*p{Ju|Hwavrq9GSd5>VL8Ozu__|y;jjp|cd~p4iGv}#LoL678db$zSGcNJ?a%%>B(`|m-3lWmLsIA+jP{-L@C5M=3qKC z#_c(+>S_~92qY`&R`ez&1wX|C${uLsC~ z4U+%I-peJrWysNvBtQAhjzt8FFcIKthBfY5=QAihXlE^sEh;ZAiCjVD!S`#;2ilmg z(~Uvai#NyT3@1X##8LKycGYN^Q05a=Np?gVbK|_%7 zkZaRO{Xx&hLw(kO`$d>DCSfAeRhIEd(%}!Im**leOtu0rTl|ga3BTHJzBh0}6`QGO z-Bl$sU4*>SgsGMSi21!{>Fuso;ZaF$n@!|&F(u21Q^g=h=;#|4YkZFqq-W)JqtWE< zV6B8#s)F=;;^|MoqsA;gZ8m-*zowOO^h9N%`h()rh6GR67TPCv8W zE=kB5c+ba)x5H1OAzGMHC(LqtGr}ZY=d$$JRB;3!&`TxVOqJ7F!=7i}G!I`l7I4dZaB#GIhpC96h~s-P4f@C91nF`vZz^^3>*nI|M7m zIam?-INevFndUXEyTrX8ArAx8i8c$r_$6-o$X(4V`^i|4rU#4F6BN%+NmAB^+VR(&1=Ea^v zr_5Pj);jjHL=vJk{w=!#Rjt-B#0_omxl_ zy+Yr-vIe50FCxA7;(*r1;};-Z3Q+|Tn$}>J!}4Y=@1a5zgQk-Y4A$6rQH)Cj^hhefb{qK zCps(=P<7$PJ(zqtf@4{_;n*aY%TtHHL|Cz@CUdv>Mm|~fcI3F|GwR@kw^uhontv{N z5P*D&C428~lX&&ZQK?SuAj29DT8-mJV&`pV1;glY4AzlVWS2X<)-1O++s>QiR#iRK zS-KftpOa@|ZuS)0~b=Pu2$SVHMttK|5-uP6Yo9yC5{It!NLgI+H>sC@-ig z10Q3x;&$w?_jtmzKOX0QezE`b>OKr5x3c(AGF{x)!{LLJ_(*I(unr3hYv=IY_*w(dYaO2yAv?$OqA_UF98>vt z2j~$6x+-5)pv(Y5Z4BVEFgDr9P@3=nD4}pkTN9eMGh6{Q*Fo3iFy;c4AC=(~At8+U zvxwYSK6{_lw1ZDR^HEEE8aJ;Ufom3h3WDUz5qs#Zlh~{|zcZ z>4a&pVGeGz9{fy<#z?N|Pc`;G4Dv+f{Vz z$^zP=Yi4vNJH|=!An)F8PWy+)odH~tcV_)BdhfH$2Z)_ks3_{O>u4suy(yj35W~F9 zG6(b|%Vf`I3EZSQh1gk=Bvv-Qxes5n5sh>eif51Yd3dO}twjFQ>jl)*PZOo~F+kVh z$I|zfR>x+-u@<)G&0e`nN`zvtr{?jFnN@d60AhDx+UCzoZB=*@Yl3`sa%<;3e5K8umRa6c{OR(uo1 z`Ssj6v+)UlA3?aYU*!fG&q&@_S^o54O!d>;WWXpFzR%TujmokR*{dVT+W5XB|5HfV zEys#MS!RJ1dwl`?uKk##Z_OPI{CZkVcfX&ve(8RsQ7@hnCZhUmV;&}&K)cFHQ-~ja z8h3cs`Fv4Hx?}N8+YZgJpXhXk?b84TjQ+wCxk4(#&D)Qnq2l3jE>UsgA1mmowUqe) z&H8JQDPtBC>{oi%UC}4rR!MDPGR5d}NS9~|{eGKwnc@8?OS@-x#dLdLU05x)w1Pug zsgp+6##O2qKa7iQ9v72!wh_k#z3syP>U}Uh4SUL!YpKANXRGBJUS;+EmraUJdj=1R zg1EWdDdI%rMj6z6iYr>R^QWxF7o~YAMYuneAK}WeU2@Nq2`ht3_i5OZpq;3hB0(G@ z<{i%D39@}Xg_iWVPnWD5$;oVC_EaTVM{;Q;kwhpa!#YS@-tt8mA(8U3WlLkx7LH{M z&0twKErT+jKg8*(1FjFmDSy1UprH-ooLYBtw8OBcX-PB0| zs*e-`eC3cn`62n94jhf&-c23UN96$#VLXde2+@m8P&K*g0*aTZT1h%U*G3^2z;oV# zZe6QDHfm+m6{r@PbZ^Z56yA=1H01l{H2K@iuXY=Uw0j>!qD9c^!i4Lxlz*!De}45` zPRz!ZtJys99l!JA{-xB`uLD`;TPR9-ahm8Q!=`bI)-gwdGo|?=K|+OlI_&(@t@kIA zA49xy<$t^=V-LBG^}-dj7Fj0&#K~vNfQN_y#y~dVV5`y9-yWbMyxhtSOX4iZvE3XH zt(GhbQ0df(sz>eB(n<~vN9Qg3kDheo8Ufj`? z8-El1QJ)+0rm%DN0k2xpJCCmw7Z05;w8wkJ6qB;nrF{*hiK7!7(Fdr|QOk5+s78#H@b%={T`eLF|WkdV6 zq3$_&HT-B*fwxd>8~mV{m%00D^QUINbg3(KqQcb8g#C7g;OGa)pK7cwxcPf2eQwr=TKP+eu9?as;w9s-%Xa`j>& zG4X5Kn!lIMz>fAe;Oqb7yQ1WCUvE}RcM8_meKV$iwA`l?usoI3hizf*OGHbvFGTt{ zMafNsf2MfsjjSE_`uSYapZqu;4yPAcd!UOMmVbr3p!ALm!Wql~KspvX^Q%XI#-Elu z)5`(ns`z8|#_-w22g&i;L^r(mhP(Sjl$NUx9ll7zOXgoxR4UBCj%3zz-L8AG6cyS4 z72`Lq{fFD`Ugq3{Q>D03Ku*)Zn9 zB)HME4oV9{KLfi|uxT;SIbms)MqSTnebuUSB(jB8r;*$aAoj9Vb7yEVc`b#T_8H9V zBbuqim@UJe1`&qZ^|KsL&_U5`5LiwiHSF;v-}PTsR*nv>v0X(n&$O)pMc@CX0wqrr zPcltnzs`KJ2_^bf)1uO~NE;h>%CM144hZEgeFda1;F~mU0J>+TaKV2@r0J2vRW+Oc z(pX@w4r1!_MQG<`zbRdPrFm1tv*W>Kk;*$M8Zncx*heFPJmx#1K|q7Q5aWMxi(gxIHh92D zwWazv<0+a^JIT3?Ok_{dpa~^zGQ0uHC^tuRW^gNn3ZVg)5Bv^KK^$^n~%sR2PF?l9xKWK8tPj;+E;5o@t!lu?QT@Ydp zCvdSOQLTHFTe10wEX&?P7EZ5%9mVujnF}^#EPL_{6K=6>#lW||*YTNhWAqEgjn@!n4jJEP zbwH+Ul8favpA?ze$^A}t<>sX2>+Qu>o^?Z}EdDll{&V%%c^i}7(kZoHcaj&N z!jpSB>NZF;F=wNFN3TN-@h!_RQ*%dW>pvcpr%TLUwwHkYrSoocOD%nwj^=^gI}t(- zpA1FnDQ%fBKMk9ehQ~$wImvRx#`#|@g{8Iaj$G%$XZ};Xoanv{-G^e!d!UEPd$Jwb z^^J9K)icUois=3CI!Rugh|;Ta)kmF2Y`pOaCc+CfXEPF+J}Utc1)L)cw?tcGa4&b+_32wYE(wz@)X7ISD z)JS$pQ<{1D839N88yJrE&bj&aQ*;QW>`qr5C`%=t%=^;>K2LqSUE@1RJ?sVUo(kZp zeiuG<_6;yX<0cNhi1FDf>7xJ~uJCyB^ZsTM_UxZw{Dy>GEoO$}`;rocTRPho(uF>6 zZBm6Xw6x1tkhXu**8;GOHw(MkE|_7^!yAA^2S#3+6Ue(xAb>D8AC7uki+Zrj!z01) zr&2hT4dZ)d5OD^fzUrLz<8tq5EL-Luj*Sl-s6(j%+P2IJ6$Zf2$W2z@KouArcL;2I zI+Y0GWJoZ+NLF*}6Z=|^%d<7-*~0OItO@jv@1?e7U44{A)R&j>dFG7Fic}|eLo=Zr z_fbN)&{7jD9-u#hBL{~;(Ng-qLCZwIzUxDB(lu2ZBhvDtiOAySng8!9$znGWl2PaPYTdi=MESE2uMV8Ctv&!^nN3p9^R{`I`6{^ckt zUIOAs)BkoTEQjHKDnN>hoCdtUbg+D50QV9=Vtv#^m|T%*w_&cettkHc1wxnb;1B+P zJecy*S185Po_uFVv;0LBh@*r-zmL91r1;5l?Qx7n`G@EfGWP$||0rD?7J-+l-1u7O zLK@rESGE*!M@AoXy!3AupkF zH(z?Pn@PQi^+Jmj{;B`}CIbBiuM7KN8cyQb!D2flIOf~cn0z;u$Ee)^KhOx~H_8&i zKfdCB7EXb@;KQ7V-ML=RM|%ytKiy_MyPx7|Wp!OYscf2r$S*>eUu`tw(W_U#0Po%= z{Pt{{Sv31uqdeL*UV`&yon3osMR0eeA@W0f zmUGPWN5;+t(5}!`kBWBzx*};>O)*jnUbZtBjgs2J!;9}Pe`Sojm$f#FSnxm8;r3jE&>?%~Is1AJe%zsEmj*5y6+ZssTBf^Z#F zPriA;H2-s2gtj^rDq7yhB-l+rvGcUL8(OgdAz|Owsh7tPe;=_q9X04M zY*0$UcNXI+8z=9_WOn%UG!=7BhDJD|KYuhOzN1ic zciHQ{ca32MM1knTLDB0R8AG}ho?(j*BX|QFZqd$5n7da<%8>fKRD-UV*)9R9K9~{! zPK+v4Xj)h!4}L64=%ahO z>zhlXlt>|TeeI1)$p?IbiUBz>Bp5}#Q4uhF5!0zY$vUI6d;Fp#FXKwp9j#6v6#f`; z<)dKoicye-;jbm<~?DpYw@LRboB0qoN z%d8s~z?O}C)h8VU_nO^{e|7Th8@PqN?A;}m_k5#HD7Iokip*ev1QmHDAL~*C))*>K zDaO2_e1*~pft%b>b+~|r9XxgqQ!=lM6m~_r$h%Fb6O!b5v6zgDKzs)>8Id~Qx_$xm zk$M%`a~DX_H2M-|qMST5u9>O&rH{|`+J^xQ{pf$O4h&xTAsrIlg2sAxr9wPFj~M+A zUQGa>ojw3i+v8vDw~>ojXuo@Ye!I6$e@F6Bp2?OzM1KjQLtm3WaBKh0ef;t0$x3;U z^CH_}Kpo8Xz}sq7O72x~BAz|*OD!h}Kx&#hM3TGAT0hOm#0#LVXn*QaeLLaI18 zaooEDc)sCj%+lPfCE8laP}kGwXTfRz*Z4)m!TP(oK!_69ht&~Fg6ag03Z z^=R3?+aTNQ46Webav z;euB`Z#D$V3Ab+t?dZFy6Ml^emFB!oiDJ-ZAMXR8tt|wPlkAcS>Mdgx?);RUS9{Pj zE``+R!5=bMnGRE-kY>02P6_-Xs=T+;M{7SU|F+7)yH%|;Z^s(7Yy-ktLfgrl_fOmI zcs(+h5(#s(!`c*WkJQuFhI3lHBJE{^d6{&~_5?vWy8+az5ZroEDu)iCr6smAF|8#J zdh1mxJJI}%_?9Vxp@k{;ogQpN^vlVh>nSrHiX>(} zr>PCk)EL_rxYv^WLr)zjp7E@Qiw2#bhvk1FxIBY404Kf;V03kIM`fwqN^Q_rf{SB_ zBb8q{sxW6@VOU<@aMoGGLs2ha&&dCL{s%F}s;+P4cPK|(XPYi~@bNnuN%L1Qg6tEL za_(hxy3~+Q9p_%V!m4jjiox#wJ{J-ZWOq$$9+cP%x6@Z8>`dqYXX5Nb7$h>tq7!~} z(32XSON5_h^G+RhvNm-V_Bd_9RpnA3xzagbwOKUNAv;=17@`lPDMdIYOdN-{47vL| zyz4Qn-dB(jj%b~45ND?y)|j`S@#-1PJPUjQLpj2)nW4s<{9r7(9;dSj~5KX%q=|cv<47S>L`dn&9U*v0Ux$vF^ zH$Nz~rqLXLBGML&IMhp-x=f$5X!Muo0Jo!`*2*5Z>$bz=-yrgZEu6Nee}?d)rN1lS zNGW*>ahpkP5$VW`^wfBY1p1L%?!qQ*+FLf6x7v9aoZ5op2HV*HeOe z6O7KE)H5fl6uK1r8-yqw-O3`maHG_-nL4dDQg-Li_-L~Rdi;^B*?E4N#QpHHOLIYm zA9@F_8#j~mj3_;Kyr|+?&U<03K#nc_jl>a?ooW51ey)@Fm1~K#`1sW62U#)Kkj2C4Ym%_24#hAdoG%!kFBW9g|RA59n;ptAixY$s-2qH=yrrxi=@7hKq!g7Ggcq-U#!nf{*}}@ zwGXofDH*zmo8#Z`z6M5h`DDP`hk=mgGOx@Agsfa(ulD9Uicy1axdAaQ7!A21=uq*! za@o|0TXITXxt7EnM4f;D--L)SmN@J-n-$qOQ{6uGdZ(=p1k5HP9{jk&>5uSqG9a2B zL<*fKc~D%j%1& z#<7}D{6Nrjzm-c1`I1NgE$0O`l+9F;MVJjL1-OfWY^I5hzx$_CABdd7hgc_XibI;d z5=`BX5Vp94%tg3}`lTt>!R-GlM}~iGQ2)JIjrSe1)7`V^eu(?x5@-CgA>$o%q7akX zF@A5{ZHMXGd`FR(rxinbQv%YqH>3qdMRB_cJZ8rFYdM>)SN=n}3 zixfXq%@^jJsLlyZyajRGn+EQ{vClV8SkfiDP6+bMdI;H%MSl9p`?rFo$gUnRX0&5%@# z=&lZc!|@cZG@%$b(l@h^`t?JtcJ>+Wykg&syqVbfx;y+9Sw%@R{9Z;cQu~Ea)Rfs-Y%UV*NQGKuEe$D zAv$Ev462Nk4(HeRpBJ58cc#5?1=o!uLg}Ii#ETdMq~TKIY4!B;yq}$e;*Mgn_HF%h z_t@M&;Q;^~Erfi-B3Kd{x?Kf)b=%I@aVsmK?1>N|y0c}SJw zC=YI*r!nXRk~$x+D+CnO!OCF=_w--|(bk_WjGtVmKZm;wzGUT-vlD#%U;w{&nM{9d zMDXD8XMq0ym|^4cxy%8KgPXF>T{l$bP>^?>PSNd!6`ddd1$}&Fvk*eUk#eiwAH=h~ zo62=LT8|{Ln@9wDe}6YGD~YxB5Y?%>>txi)IaqnkI;q|Ic$^&$0{93#pnvU6_=tE9 zcU7FzOWyhoGIiYIq1#UUOSjT@Y*fiAOmeRfqo|AVrTo??{$soLQcbBgz4`l+Y+CP% z(PZg>J<8kMDR}&T#)Y_>kQ{ ztX`)0vaZz2c4McD9Fl5T!0(tmS+*wRxXIUJ;I!(p61e4}D8-{T<+ypK2hIG+3ER7Z zc;ZahQa+aN3rcFN@~qb<>n=~2DJ9Lv(H`B2&HXmy^Tvb(x<(H0US=H5097mck;B4| zY=?P`rSiTaBNKx1opilJ4Az9)4IGps?mhPr_ zuTI+Ut%{Y0ZK51be-&&6KRQaD;Jh9Kou3d|xoiQOjGQbeDB17Vbf>GfG(5~be=oH3 zHt#L*)$HBv-yj2mX)%u}llIxA2>X?c4aCsEtMCh22P^OJwx5N>U0)f6=t^d5Go1^) zJUeG=8Vho{O1+`h(-c=#@(Rbacc0PP2Rb=N>KJ)1HyOzpP9E%+)2&RPPb%XYw-=Z|ixokO9zt`-cLGT@UA>76X*C_H{Q)zeO85NPG^g^8}gyFZSLutf_YG77e1J zA|OhUu7HBlM5LF9h%_nEI|5QeKza=k5J7qokdD%&i4baN(xgME(nDyW2Lc2LdG~x* z`M$N*x7OMFT<6!huKgoiGn2_A^U0jgbKmzE_ZYb6fNc8#JU`eBx^^Nov8psBD%}@p z6jSTZGP~(MLzVdGs55`J=ZM*!(SRi5fnp2@H@jyxz3u8qBM5O}0uA_jV>>E^fWx~}f#SCC)g zASVJRS19H9v4P?rG3$Bzaw1%F;5JW2MgVeBbMdflo;Pgdv;2s)x7VKLLNhvMMRDtyW-PvbZ`{ez(3pT`fyfO8Pd`_(jmr z{O?-s5Nr&uvH2gMNut~zpuNRIL`wz1Wz(9kEujZe0XdpD+J#+g2$4y_CF#9rJ-ID> zF`o3x(yZyfeB}+e7Ad8RSj_5@QA-o3o%4d4m?aUG?K^LhWTLW-H_QKSR~GZpSLl~i zEx@T4X-!fH9GXt}{!6O*UF;dexR%5)A|s8-2KD7(ann6+C#i9j^ImrKrFH)#X=k() zd%{X${R7kl%%tn&qX3-pCd+k^hL8X}zMWaDF3Do4E@fkXfILr^8o(c!B`1hvCB`}D z8$WHMV!kA<4y{Adaq^@#0s@_BAMkx4cS^(Gu80Ruk4@n0V|lUo_|e1Gu#A%DS5&T#rahNX?JO?A$_(Q}dnBarXmf zicwVKHO2oT{{Kgi=&xWHyUn6$ZIp~@doi-SN^1mq_~2rqx?BDWu&1!%IbR|Ho(%Xu zN(`M^o*F2YIi_uAq6$*JP(2f+!uHN_NzY8(VI&DM!1 z05srIJ&rp;d< zJu;s8X6w!Tus{jDEoaQtCo`0=%rG1+HsiSUU=vu#!&s>5d2<}3u8y$X?XXRf@qYBw}+cRetvU0~=1ixGXQ z_XTBc>T!+pD18ytb9$erK0{4r-%baQhnw8 z>xp=JyaZjniJZk_H=U>#^KAuN~9?H7~H|9yaGXGhuTCd*h% z(umP-748LSb6cI|dwJA7JUi)7p>x26`ok}I5f#pF)?W{>^9{nZs|7QXZ&52H^tUw8 z87TW^K?ZYc6-e<+D*5)^myy`47UQF|y`hV~(-j?TV(LGVYHIBqxVaOgV4x%V=>X#~ zQ5Fsw>b~;&E_gTg9DYqlFQ3ZvaK>1J<&yVWsc|1Q6SS(MFI3yw+jt z*-;DTsUcpKZxAT&{=+^cBA zl_!E)v8gQkON~MVedFVEI$3Mdc?Dr&A(#jhzOF>i=X(oQxE7l({HXph7^K;kt+1=i zFBBpJaafvRWMQ7vsgV}k%0n*&61~|E#|)@2F65?j7CaF$LcCQt`tLp6SG`(hT{m}0 zio2J5=4U#+ekkz27&1Ue3-RZnF)pt*WU)cxlmBE<{BLBI0DvT8OimIdnB|EG)2+Yp za!>i_)M=mBQ^K-dD)tUPvH`%+_SFY#LW^4IgMh>Bmii@TVA;Kp1j48kfIL&2C zG3Ds}0W$PyuLI}1#Z2|hio7SpV7TQ>v7cp)N#Mf;ofW{>h^EF^mW6a6Tot4ROZ!rWwEKr6xKUo zdS-B9-#j_mn!3qH0Ezhx$tnMbaM>)cx{bnt~TSQ?|^c$oJHd%NDQUE1_`er;9qjy&piDt$W6iel4Lyn{&) z$x~oNNYrTh#3oML=OEfn*ARsZN$fjiM^r4{m7RYtTGF`MP&YO+bVt=#!r%w*`Xi~c zVMI%utiY;+z1-a}a}$J#!?v^2>b|qU+DttQ(?(uM_m?v1znck_bG0R?{JRKO>?+rJ z=Fdj|zaI#=4k=4j`>_6lo)DxIr$mf_Q^V&00SnKb?tc_iZWyA2|61EyJKsGoe9E4! zD5i3gcUpz*FTQmkz9CU?R3JyyxD}#WWw-2o3H`tp<>%Kut$p5WsMLGek;yc!i@rjO z+RjgUFvzHw7CrzZ8L1f69dW9_K>J*;{h}Gu^$RUEu8DPbRIN79dQ3j`ft7h#j>bZ! znNsS_^2w=QM{*R+>%x`u2UK)B6h{=@%6Vrsr`s{3F&_+115-uU57$~4zd&Tcia1t< zn+{UJ((%(`=oZa2GvedYJ*9`RNv-yE#YfhggMW4e0GAf^2WU&2hZKxhPcl(QIX$Uz zI})pGozzY(d_Z*eOMJ?C{x^;@1=HR^$1&h%fuB6a-t13t`ze$2bh@ltXOezml4WnS zy&?8PfVgaOA#=C%yc)0G+XX&x3eH9;tD6yn6Nhu+?bH6|8{Q8t-dVIO;dm;QXzuTg z<1rgMhQD6NnLPDXOFxpdBrO87`jtvSa&t>MBWuBG$oz9FrU{0;~wnFhPv-cb09*bn}*z!gbDkL3|%|(${Rf zp4W5dbPj)fEcGU7EMuOaZu z5nz?1jdg!RBg(4AxTK^?w{&EkdF>PFp7jWCQCWFTQ;k}rgSPz}CIf{yMRnab_kfr; zIASf}6$VBFs5aV>rs@(z-YQ2a-IA2}1LVQH)`IpV2$2FSzWfs}wzZpiuCYw*KGB6)X2fWGk143%eEVOVvhqi&*h zWds&;Tj##UB?w#8{37WNif(bk>)ly@J;`HaiHa3JEw2D3)U3D|LuIcG-?az0#(7_6y(m?hnw6yeW*r8$yUAx+5vhI>$M zdm*eAQTUSz$YX=(PJ zQOo#oxAhHVBZ-O0EgYujf3EJ{P8r&vkd^>B-EiU8;GvP$^CmU0=c2P&?B^dmt8xES z|LR~yRqR(wnBV$ltKD#U#V&_-O_OWci+Rhs=y%TnW2FXzT%s(lo5(%!!_Xo$(x7_j z4I4Md0{zO;Thtdm*;iOJj<$@YjCwwTx7<31Z=m@B{Fi?#_=qFy1W-LoAzC%6i(%TP zGdAzmR88cj**@pjGe~Sby8KS|S;Rps!JM56Kx!rz2oyX7fFVcO-qvz34P^G9WgsU3 zWCHmH!Dt^Jagx6Ue33O9;I;|T02&KJkX<47W|# z4yQ+NA8QWlj+QDve}$Gc`ZY9ms_Unp?YbnZUcG(i<1?IS+gUt~h5I@mZ)fcr=!2rJ zt(DU1v4$3ym`cX8AM~|vw7WEIw&TsH5cp|n(ei?;wCKPQ#$Cqs4mcy$ydB8k#KK7| zVb7CiJcO^8zFT^FKE+{t(8A!udC=bQW;$`c8*b@T7sJSIQtsz*8~jBSJ6inEd42!k zXtbUK(+{7lF4<<&0@GOZ#h}CEay$KT?y+44TeHgUj#r0kV`t-iRGbHLJ*rK&>IR63`>5h}3neBtBH4SM zR>A2>?MxBm>Q4=c^IB9A$-Im?>&uX#5#-89``_OxH7|4Cz*etjH}8~861+yaUMptSnI%E!9B z1l=gz=UFe#;n0+}>#E)u&^1?EjNR07oM*0Yz+E(6O)ZXOSwTP~DQ8Z4amlk1vvq*< zbym|uLm3BjWHBaq!D2K&S!pUf<(iuKOKQJ~ZHAdX63agI8fbxXk)2}_|9-su+Q#v# zStP29ZRFDz$z^ALt*oiJ(TMfKA!@IA%>;=z}2Cvt+OR?}oW}+}7#D>=^@XY&b-1f$WWVr>l@HS&19@dY8g~8b>8w7gTih2NnLput zsLrTsCI^`s7euMSCAs;2*0H2OK&~0_qY>Zc$*N7*s8RDf%9Co%jQu-})991Ay5-ji zev@X3l=4k4)ncj3x}*4!@<$0}5GeNrwhS?%dj>AbPh0RmW~37f0WPfTPPXDV z=lVk@C?VddM=_<(E<8Pc0)4#$8Bve!h%b59`sm_i?JK7t!=pvyp?krz_NN84HZU8% zl$3^${*(*j^9;`}k0Pm%em5Vw@9hl2I9}B@ArmmKTGEGL3bvC<9PY1&$N=|_HyYzS zS(kn2W3889VgM@%Dk?WhwWx3>Vq;oatw`dYcTgRScMI8ar^VuNh>t4dTtT&d!V_HE zU8uC*zU*Xl54$Sf@8&w4@^ZwWZMWD|!QEXfRVK^HOW3$NnmoIy%2|bCl+^&>M!05y zsv2scUP~rwktS-5M`_d2;r%YvK?%D1k71Bf0P$@03LLMhzQ+0Q901Oniy=nu_W^cLM)xpNt4=2je&iol64T#P1uf0z|G#=h*Xy znjih3gYhtHOxc604Wr>|za~j0CRz2T`tV2uiwBM-80qi^U1poIg{s?0ph-Cd=U{=JWrbMh_k?OG#i^#KVyOeXhwB~;Kq$CslDwrC` zZq%0k05SO3H0yp?H=8L2)@3(8cov>qma`5h2_2_QHVc}R6c^suyvhAciJ$gwZbN*O zKbz@e+eIKZyFEq$P}m&t`+9l+@}1b>TA?u+8yk>@{R9Hc>l{>swC+x0kCdYeuWr8F zi|1Ti(Vzl&xqMJAwfZq34#1Ly(H*~iD9iVr@FmcmlL9>BBTv z=B75vQjDE21r-Hm;|;A;ZC=vG_mfr*d8FQbzt6_yY6%)!N8fnA z7H$0{{$C_<`TW4B)P^ac4B?LRF)S5{9Nu75JUL7i3^fj(bN;5di!t#gqHQ%1 z4ipbRcHNpiT>6?Y5xtOYu=@incrD>pQXg*!K zL*v(tP>zlT-S~M|o*5yoKE-G1`ylCcc5{yqVe4T}r`L1+!VgR$SXOAh+ z=jw*F^~jb8$z8Iumm&OlYwTl(Dk`ans{^RmAz(oR*M+p3b0@ZDJ!FtxaiN}9d2gig z(rA|?y8Ezqqcjg_#8YxLzqAAua0!rh{myj1mffCLPPf}MYmI&bOa;j823##1;7Uop z_efdu8_;G{X@<95W2suLx-Mg{UoB>5qDZG-NVX;?O4iIn;C^(`7xgwU3CsQ*e9!~l zjW>72fKMK>17whL6#OB+L6H;8$#Jrref%r;R~X5c=X{?}9B3Jy=Gcqcpvu>H-K=bc zj^mZE1gzx%yft!Xjo@D3C?=?*J(kAj)B8^KSNC<-(I{r{V&L6#Shwf00zi{YB%RRt z-T=Z{ZUBl>w88q#8l>g##MkJ!7nWK%m|mB(%!q=AYBAQZKN=Rgf7SP)O??p>QNXfx1$3uEa#s4rbftEMPa&B+{Evd?#4);w_Cfn4sf-5A)x@ zV8c_*kJ|{CzX8e$(GX)MJkFh<`%`Y~d~_k-S^L7jj?#ne%t8tZR^~+#E6+6Yv1t8r zGjd#QFp;s*?Z>0|5A>8yY?mKh<|VJ+2gK|CR5S>Pkonv9Qm-7y>0rRDh*)Mg);60p zJOAjhm}AP{O6+aTpvp~fkJ69sj@T+izHDH_yG^SI)Yk?3zUBNZv~bP+IHj0^)m`b3 zV6jiLi5Elu>o;wKba#@u$MZ2oZHz@-<;rYPW7-YZwM&Cu-iO^1B{ign-&-c3_>xNr zdwq_A%UL(CzwKIhTREh^by<@MtCVs$OO^evH+4ATJ=TIAif@uz+ICt-<<-?kEN!SH zrT1S8^-c_yb6Uig@5For2s=|!h;yjhzmC&GRo?$GcK;vuk!RuZglR58xSzi}PtZiO zCn=ySh>6jZq^7U~(L#*H$xYAfQ+(oyK?>nn_mVN;mPY-kDD0Z7EVQo-WhrVSM#FW04vr9Y&6{>k!f1@D&lV-rb*+;f&PLAnp7U0020NOu#h=nJD zDfHP%F~)Xx*48OR`v`RKPV1#z$ly6&T|+bChuN_>Z3oSZILtl(&1cj~8d>Ak?s21( za_)XBp$X4@H!VqIAwqIo=+_-x&kJ3EJb#oT@(HKU*cY&Zp3UrwCmeg(JM3>!t_zn+ z@<&^$0m+5W=h^++%ZafQB^4i^c*|I{6A<<+pF>Mb!>De4fwkh^iRiu`dPs;bV^cE^ zlLzjMk?nWM7>{nt6(9kstQUR>il3%`-}AM0=KRsMV16Id9PRzruvF zuhxSp2=1htWtN_lUHjD~O6Ri>VEM`L^QSS!Z@Y9cUygJ)m{@kp+-*=C? zT4^ty%a%LyNlklwUB)jG^Li|cRFAffsW-Wbr`-JPCTiq3eY^y`H6uHuM3h8Va%Kan z;vZ7GcDkWUq_njyL`rBC^&%rrnD$trpWXS!`JtC9gCm*lSax>8yh_T)-*6PER)8Gb zlTb^wxW=QC;ZyveMNh`6wBIZfV(D4ilxf^>=d>{HUe@9O@?Y@q$*W-Ox zl<1c1=2XWE(PD>5m(5fBhVPSm5A{5;Er;iRc-a`#s`QM6^H<3jUFyQAh_t%w_opEi zM7i$=SB0F7$+M3%D6kRRC96YUu3fqKI%-4_bib3dPAr;gnd3+jpaZ2dp5^Z6S^)*~ zKwW^}FM#2=m3_VMOINak#28@8G$Rll6m-(yjzU%_<35o%CS^?W?T@1UD;%Y&1oA)u zB~dFg!`CNs0#s3=RQhXxVH1RV6H?mwr1Nq>HE1O^r>u$RC$nH=sl~>GevnH=269xm zXRU}mdyM`jpZSEA;#3DLzBsje}6sgB}p?G)KI5$aKVrB>~u1DM#HI4;N3k6=_zMEg5SA4 z)Am~e3JNz>=TP}rI+VDkCOT{9H9w;xdp_VR)|8`?vvDx(7+2nN-`BF~+S5eW!N*b@ zjxJ&4hzCf=6hAeqLr$R|218jC^Vhoz=}|uI9St9XyHXLCB$+gf zKup-FbI6c~vH-d&XvfT%SrpAwN#{$#?c(VfYVW0QFu2RJS}hJ7^wQnoVzs0I!FSUrzIz)E zI~Y0{s(tm8&I88YEssKvR?m0_Pt*VW7CUyD?FaC|K>yD+O4sqdFU|_FYRbMBbydvy z?Sj`&lL{*KN>uiAU4MzHYj`WO+oy7ARWUlyPk}n0uIFWB82Bz(&{MkH{!Oqs%tHwz z^lf_^^#9_9r#rp~Z3AW8)S#ii5Fl3P@*&ypVv5%N%EI1BF@s7wCmk35LT)?OMVyJw zy43L4mW({)UigIeu(5gT))M9W!JXTJD|dg$Py1o!%Ub-`P8|pUicEG`dsuM-Jr~KU zA%uv=hRLY$Ok0oJpmwZ-d$-6Uv&GrXw~;q*$8}g2sy2C^H-7Pn{rTP0=flq42IFHT zU!ZTi!}XTb39u{d6^k9^^rr zx;rw$O9CbxrwsMQ=D(HBQ-$vj&Si8Xa&2s9bs5~0Tkn9#mRCa?PGAe;J2Z9&Kryx~ zs!6G1v>n5ysWB-d?~Pu$o~tIO3QK!Knb5yg=sN5Au5XGOl7qWk=Fb!U1Wavc4og$R zC;0AiJvFk5y5L0~pUizdW6`dRc_(#A)~f4FJ-Pd7L-ptHAJkI0d&!Sg)Za6(_k*u} zL^8@{+o690RwxUvhL`raAf@l?qKXXkx$gO0xI%Gz-9aD;_%z_b$sHOPxMH)=TIAIv zBAO~dFSjS~SmZZWy=ZD)s^atI+m?G55^lS8tA3lV_~@~FZJnLFd4h7lUG$r}ZDmeq zZd|CO#9YhjT-?*4+hre#9L0|MBu?a*pumfgZ&T^K+V`!gkUkPD;g^1Nb1xN4$Z+`< z5ja$bm$EL^RYA0OI=1CrX-{EfwlNW0D3V2b3mWqNudYd3j)anXcf^mFXXkNxtb z9pc#B>Q9j*R(3x>7{u*6QOTxa9w6pgI%@s)HBdb^cXU3mWa^Efk(HH0)IXbIU(~n^ zd0$)4oZV?J2&G>%fypWFXm5x`sE}FKTGdd3l;*o+Hyg_-OdCVg35EF!8;SY(5f1x# zBE4R@${jW;*bMgp$|VbMPY40vFe@Nkmjra$j6-YcP_h$Yyl1kV1&qRyXEB8#J&VEW zMlq9}267bsUrKHxid#^*TH)4Fo;UEz*1>*b4TYg_^ux(7jpKQ>b;FBcVl@$JSJ}c& zyMJ|)7l`P70n}!;kpiyhU!rQSoNV^DclyAYY{eUS)|XlrSy5FhkP5&rDKG?u#gkep zw1qAba&>XdIi5F+yVWZ-IU%p@SJPGvv)=UHHW&I7_9ovsdE9O4YQSl1&4XO9^ zxowb$KKkyrkEF+@y@O|do}MGt!m{QUUfMqwKl*V~e4ACdjsrd^>zLVeUS5oIp5Iid zSNp}Nk-%3NzGE0}S$%8xrsF@_ByG%$7+xS_YP$^vR<>03>JR^5j->Yw+y7#eR9@A| zu`fxK`~&0Z)m=j9a04yu(U)r^iR)c7C2?#eF$XcN`^V9YcP znq2lOec_+hPfyeU>nFUN@w{V&48@(@XCMlEj*<(|eDeq(7GB6i*8Ip7&FvToyYo4` zYta|GAi63iY2qu#XCLW*H)hU>E$CH(iBK!?;clCiW{C4gAiwVD3T)ZcW|JsRNbcnQI~JikTE91k7MEaRvQhOF%f&+Fu9)l z5?W+;{XAtUjImt%tKW^buT+oDxe2nasssVUPezzvud=rLW{5~PS-QL|4cmvg&+MH$ z($IH4FfTk@cb|VS&g8T-x@7_zKkiMZc`mDYa$Hu%JmO&{$RZu^K<{Lk%_vr9+o(bO zg8<(5Vj0)0Y3Ou0fG@~`woPE`^eXx6%FvVK*VEt$hIaS`*xH}eJ;Vna0y^i*M^2k+ zt5@Ln(3D+&%*n)fTwH=cZ)a@F+cg%7%5CCCMf(ihcp%rN)UqJz_wN@1mhoW=?osh4 z;^+7W9UHCP^YxpbUMU)F{K*=oorQN-*OAa9y~TNon(S92+*hKyB$oyES(P~4R1Sgv zdfcV8-s?vjaWdVu<6&_NBFB_$tIUATk9qu-#+9(mwOkC(LfKjK}ArQSL z9C8**sbRg~IgYW(TNqlay%JTGW}ahzN$bO-^6Hs}9J>?wvwGIrVf}j*Vb?Y){JpxC zR?>ybCFEx!(C`%&iPixI9cW=X0WQS2_2YJ}A6z*w4T(5-)_5jqYwh zW{qar3;IQsxICaMzuS*LcI)GbzGW`K?_xm*!*e~csJe5jlP$b-sx>sBR|a9_wl9pi z&}7iYEIEv1E10UgpcgLlnRMW8X6O=H)j6=Rd(%ZH2e3QI+XwV>vx!MG7lCF02XK;~ znQtM0;w%^W@Q@l+h$Sd2-TON?~M4Zzl?mdz=Jt*;ukI3;13TP6lE80=kQ~&4Bo`Wo=35Y)d!h zBR`ZiygcfPjb)ttmZCM#-@}27Fde8tp!!a04{aIWT?En zYD5D(vwLBPSnBIsUtzKt_++nb)Y^CJE+hGN1lViP`Yh+TOOjZkqw-FO$VCXJN_)~8 z&?L9wJ@yJJaPIjB=+QEo z+a@Xz6B`dax^)v&bgth2Yb^+%iGD(uiB0PLfcRHE3TONM!TVzvMZ*n$Jl3?OJyQov z4Xvm!mMB9X)HJt-^eVl+{SGup;kbR};*A&bn}%r|AMWm*eX1N2YVM%?yp`u+pF8{e zB+zV%NurOLQESUL`o|o0o)=8VGny>>@W`5c=0s^A`0}+9H>KmxMS~Oy^EH8Y4O==) z`ry|c*bPn}!fG&DHuo%h<5^$F>}J7#uQt7i;4e*4JP-5(rVGl(g_gq;dtV~ERILS> z3U`{bs6EY*y91fr;hrPm?A9N_+CO~$ykl{R|*dcDaxLuRdkw3t2R^DMCSLol7;qbKWTog&u)co zomK+9^IwbD8M~yFD?v`qBN}RnHWUzTE1h*@JPqCW`TFBdrtr;M33QxAYvkN(Ib|Da z%K7KcU8MU!WEc1EN*|&BUE0xC3IZ=DIAk9#E}V%%2$Q7enRcWmZjxU7qUH&An%z0T z6c~8Q8uoLS#m7!*PgmbBrq%}Hme_0jz~)-J0M; zgb?^!XW?IUq5e`A$}QPskYdOf3PD5lg-yBekQ%&bq^pySlMoR>E?nA2< z%Vyv;iQcBZP(W#1FuKg)l$2F_>a^rY5bK0&$B9;<5?J^rT;{HExMQ(z{!G zFHz12=qNX2zOJ*k6mF^#2gT|Qi0cDFvNRnfL)7-J3Xc&PZqG-{xoU^zy|@zBDVo^I z&K+Fg7GJQR3@)Ju+&dWL#It{9ab->8=0~@aYu_qW@ijW=b6BjH$u#o}zfMJ`8&<|V zwz39+nv|JR5O7H2J$bXkKUU(?c;J-5)rygi=2L+zn6EBeC= zxYSDXow=EX0D;MJ0lOF<^MRutmdiSXh}J5c{+A+b15YTC+Zra%Up9SuIO(CUQt5YE zzr|~UzygRsoLuZAu-J->@fK}ke9AB}D#mttWO=X2tT#JVo?fC~HBN~@0%F6rJcX{? zSGL_b-+J_7lr)dSaNflBXmStY9`+T9^?n~-i2B;Nn8$jEuubbtH1ee4n zAWG#qa~2yR)%=k=XKKc<`-wyK8)2tgX#!=TFhS2Bzc@pe9~wSP3}w1s&&IMOmRSnf zv(MEWD-&FM;nO)@A9W*_r%Vl6wxEK0as1qYtTIwvEmR#DCKT+BFU@ozso8yiZ+5Mn zT;nP+_a+LF!V`tC#XjOJ0}f+p9IW4;0b_iSF5WaC&Xf*@;2e8!VB}&0Rl81zh)_vK%~5it#GRkpi8{yrZa0gf#-Os zh`-U_9xCQyH%n{E1+*NgZoD5#OvuVg$~C=IlkXQOI_I#up=0}`!}aoRoR}YGqVe?q zytm12F;K>43DZps^e$h0ngCm&BJB;l4ZJFe%Z>!tWZAttHt|+3t9WI9xF(vkTR(7q z0WFh1`SSkO#@7siMYg-Kq!aoT=6kiod)huRYbImP)(zE3$@f$uuIN%<;V_=x(+sz( z-s4V-sefxM!PcSuE6{leZ5M-srbf$W;$2_KjiW=4|lE4 zGFN7}YtVH2aV@L&9k_99`*n{@6J1ncsCtKXW|rlN4h7T9EWSKpQ}ZCMr}$TI0!>5v zV`cDf3pD+<5E?X6u><4FoajHCE{5P za;EL2^y8s-E2}=bg&n_lw#C%Tr0t(yQLkM_-NsEx57=ub7! zQZmkdwRfKNzU$z{#LCEu%;(6Rk4-f|@}y62$%8N#1U*zNQm}SdtMgVq?(LQd$^spi zE!=4TN{|{4?4y|REQw8~XoL#~kxqs{G?qGS+A37*Gxe*d^y34yA6){b?!5j3Bq@C* z+T^Sa22{wE^L)~FPSH6pbk4AsZCuwQr}Wu!+g=ZF!t)lCy;WR!f6dJX&5oUh_SBA+ zy9n`k!uc_TeD@ge9R2P{?n62O@aC_*P5o%c5DRuIniEY8EekkrjTzI+M%*+qK#{$|Be6rck@8Tc%}Na!vk@&Q`s zLxPxA;MaF@4pJrRbO%MR+&%ev`0Hoa1co`#92$-d(=S_Z<}oZ^cZ1Z8%CT!^4YBBEHLvZL^ehh8SkF&O_dJl;pZ1tmDyeZ>kPlMM9V!hN;4>aQy#H!B zuZ=C0Qjo^U`_$koQMp-vuUc%T7BTlzsQ+;{>k-r+0_ zMKsFuNA9OkbzQ|q;IpHcfByC{fG;7C8;xkcs*dUJL?t;pYGAXx%#OY#OY6Rs zvdT$GFVXVvn`pW`gf9Q#Y_z*|fB)StLmR;B?6FDEuKIW&>*ldnd{fP5%Q_ViR=$V6 zj=5uN_oD5`M}B5z4%++y!tA%lp7;TQ@iTh-Pgv)vLDV{!8gbU7J&v$v7#zIHpd!p! zrECy)nQxkcoSyD0hUM|5imHLUikgaX>Yr)WKT&W02RX}vZm}h1tzD|AAkz~@oeE!@ zRdPztxKANL1XKw;3}|zS#(N(sgyKB!+IUbiQ;rKilFQhGU)!>5tf_mtH>=25`z(gq z;d=W#T5=)ms~LD${D}oTcU6Fn`K>VSv8Z0x*+xPE#FPqP*`q&Y9Tn(&GlX zrWrLY(Eb?@eqSNC;LioqE5O&~+a^Lu4$$ z4BGK35Z3ZA@eJ@J2NVz38!jj2y_jR(!3=QinR1}s(FiTA=1*AAV3qwX^IQp05ij=a zV#`~W@8Yh{6mQf_IK=iZ0*~KM4&1F*7;W6F*EhfX&>XHk0pQ{vN*gspEjqLAHp;d& z?T?XIhcEdyv-beFOu85XpCeH|gCl!Ant0F^zEV-64=O%Kdn?rkqI zTVN%<*HaN_zKY$h&b;w`t16X-^xpnL_#Qxc6A70SaC{nTW+;AGJgPc2DU9V{wEq04 zJLzq_9Go@rd0Iu=^NTDn$(Gq#FVeGbD!zMCSkrtQ1|pgN{bkY5?ytCxxWNC;gPB@UJn!#{i;VV z-Uo3%RzB5cmY8$b#EG|aFiuSqthHUX%${!tPoMO4{D2S1WH)AY#~`dtCMt*u-;8@O zB|=+Nl&T$7@?6X28d4WYd#489eENRw`82jCV%=Jj?zXo*V(q-M{uAlnMItj3QTZOG zH?}r`R4XyfFBMS@RMv^^WSp{2yX>$3@!RiBKhg5s!ep_;E@pvVUCg>e15G&o9CmnR z%c#%L6j42s0sx9ftA(g7P87bxN9;=TlIqVot)MzHD6r;*P02N#vhEj4&`}MXw5vj=S{T881*Kx zNmjbg9@7+54!x&eL*n~QLvcPr(nK}7+#p!1;ACTed#dSuy1o_n7MHCDUN%VA+ymf8 z8*B6~ty73}GE3Z3j%0Z`0=)n$;(KNKs!3Y>Z^X}*-;7R_q#qm36aeCnoha6Lt+UdW zLS7mroSn1vP$dB1t!+pw)}<)hf4!}BRZoth}UWPt%ma}NQa12PqOdti&GcJ@qfeUIi(lu15o|rf8<1It4 zADq&Bz*kUB!?M+DXm?gsSW@CntGr2iCS8H|B7bHv)sM|y{zMgbmn2Cee;ycI%*Qrn z|LxTe#*VoyFV5m}=C}gMYnxm}h;R76lp?{>B^-%Esan|q*C&(6-HXh6 ziZ|R4om*?}B1cE;Nj9!^&V$lRKa$KmWTkveN`B!X@CZ3>WP|XGkJrT0l6su?&sZ<6 z3x%U3F^APfg;K0HgQUcP)=4?JbfF-2SD~<7ls#(wCw^jS}tJE4PKkwXeP4b!HL@q34hm`NwhIBGN zv?cY^h>0=@=EgnUQQ8N3mX7NE7iB%2x918__utmOy03a)^Qk5iTQrRABF@Z2Nrs>O zftJ*xb$KTGZw|Tfg;!0AF@a2DcW?q#eXO_{wVNT{0`1Wo@Zap&YZ0gf!>^&EFBMq1 zJ_^~Qv#0!E6rznw;LvHYS`U}fdG*J{j8tfMZ}(UQ!RiMXeGL~~Rg!+rr(>8xo3}A? zF7Ya2HIw2<)9Qn5Hm;>&bH^-7EU3m88Ga_>+KAP2wv8FQCE9*v`1(p+`8T1f(u7O&`xr@*&b>~#P$lB=Z4yL|cER^`Wq>9)+6FMBkGAhIw#B2xHjw0WT)IqJsi6ppFL!bq%Y(&88xXTJnV8XL|Gx zogeoyDg}Gey@irPpJZsm!HT&d7(!HIIC{;R+&Wxobyt>yPpu02rK#yNP7NN5eBh7h#-KEMepqAjF(t`#9^Le5- z0pHIMc#rHe=NmG~afJB0( zQ@rFlhKbKnz?-kcn_pXbgs7M!( zUV;K5U3w>g(gmb>}r~yJe^IPj**WP>WbuP}` zxyUaGBs0mJV~+Wb=Y5Kcl!2}7s_n>OPSTi)^I#V>`Le<@igwuWG;G)tETf5^EaDp8cI;%XK{-wEtr4LCC z{L6KxYiF)kWUWI0`pvWPd_4a7K=#2Kx!yEt@!6$mhSjn;bP?crXa*mvKKobxn}^%q z_;04`OcL*x3bKPOo00w`eNaD zseI$c`40}!V6h>rvW0VQ$1mW*$^JZoVE3-h!3&j^cWT%`Q2ZO$z3WTj8KeH?H9&>A5kN*l8vxWvANtit&E3IEl0 z{cn%&QAfenRi-uD3|Yrg(W-dDihH8Hsm!FAyAcXLnOBA`dXuMLT0V6@-?ymQG?_E#}DI`;z2NS#?KB!3Slm zb#)_eSyS|R4@N#1X5>z7rGhZ0n%CP}fB&3^r!&IhV7eVLlK}oH&%q~sj|1bTxS$mE z;%&H#_4lh8HQPpZn4TWpd>NY?cDmy?luVaCc>I1d`wtG33BaGqV@ytfUQPzU$_pfr zngJBe*{~(~;GEWiJ*?%}(zNC=t&<1iMy>(B3)#T?34ugr&?{d&M1H<6K&l@GE-x*? zOmAT)qd>y5EQ3s(y$7gAlgwPYDZ=?lrb{7*PEFYEt+JdhW7WMyh6&H4z)UAN)W?tf z8S$I{bptBJy~$UTQIcw3QD&UdTuS3vV>QDe$p&<#m0>ArCXYBxt)q4qZ`6GnLbBYl z(K7AG02ZF^#`I)5Q_hm3E;+DI))p<(X2a5dIkFtJhzZsH4E_Q{-cpojL@OTJ$#4`r zhP&%5WJm8Ef&Nk`wy+aEKj{L&u%i@DjGZZ7O}wokyb~f)8R2V0Syg>y*Ub0#QS#5d zCFvWK)qLPv@X2!eK!(H7xU9ws;CSViC(_W8@nRpql|NisL&&D}1Wuub){W+j#y z-^@=n3u^89f@r_%j;q1$4zs?IUrzVX8~SfQ&peSR&N}go;tHM z9;HuJ<Uj>S+|KSrZmnj~`^894M3WMW^v@FTbVGw@q?(JmpeLUk(&M4}6iSFZtXA0^H+R znx+CIy_{=L59+EL`m`6nM^8Z7~5|5x>bTwPNt9?>EITlA8{4Gd*e6 z6mw4Yl#3vh_aVaS)fWUvjU)AM!F)V^gy9|Jq^$~HF|XE6ky2A$PAlRej7YJ+v@T`% z?_jqSWWJ?nVjrit$vHecv$*}{Dt%y)Q^gkA>b*KyD~hIT&32&nGgeKeEA2*GAAkFD zJLhQc<#B+GCjXn(3oP)?81^2ElU{`@-!T~K;pHl?zVA|(^W!x+6kBWfJ~dfAzPp}} zv$Ux7j%Kh`V~FG|n|m^@`(4ScRPfdPvdzPnD7~AKq-p&IhM#?nMsyC(lx|Sw{_G(E zO3Om=4pu6s^{Kp5FPdUWU;ey9u-9Rg$l>1ntv{kuqM~5|zs$jP(U9IG(a|MC`>=XHbs#T5xmi z+>C4OL{ts(SHLUt59gcUcwE=U;R{jQ*~*s6IW#X`0r64=qY6;GhQF5Qf4}K9S5`G1 z(;Y0*8q>ar{q~SCT7q);xwb(jMla(HFNS_Y6?HIeNn8`w*Xims!tpuyzhZg+fZYDi zo^zxusF)AJNvQmsRYG;bm(%-@tk0}fb%F6ux^X!dKKDAVdhWG`ir%+P>g+P7N$`En zlQuMZ$S7->(A&bb!+Bf`!-LMX?|D&&x>OIEsAc%1%`Em-RQ9st6>K_?Y-(hZWcqv> zlMyg`0Sn<3rS>-%F>y6==L91;o{W7Cdf-*4({R)D zf^;Q8m+fe{y;=BTS0cS;JqH`)b$cIn_i<^#CmCX+sN?>;7I3)J31C#HJL(9&SDkR3 z@Vy?ipe1@Th@%tQ1IG8XqIfyBT=yk#^j_K+|CJ!$S?LROa5vUxu#R9GxlYUK7!`RY(`EsW03YMGcgu z1OY$Qa-Ki-u8p#Zg)K4HJg07NCF$!>H$T*yTp!Y$bD4dQ!9!206+pQ<>6AfMBPCWW zIW*6oVN9O9H{CQ@BhK4vsI|93tLxO47r0g9e-fN04^ zqE8u__|E*)!(ojsAFp)g6vvhh9crD=-fNx~SHHR^-5V?=>D_2QQay{;Tx5UJtyPKk zU6Gd53)QI{2z?aDy?KhH_G%m*^eCQzy#b|>+&gEE0fQTM2$_ZNcQ zf`}R_Q0x&rO(v@#Du*2HVAZ*usY=dEReydd_*iqip;d+;!)R`pU-1uS?7jL0rIm|M zHKsS^o#)(|It)QZnCXW^yDTXjiq>%qOuKE<-^ww1V0yNMLnEm7oYfT&mWg5rkHeB| z|75%pDJ*f|l^`^!d=Lb>@!OW7UEU4=S$mN$s`b{?Vl}YK17hAtTjb-RETaPc*Yd-z9|B- z5gnC%U1u+k^!f}I@1z}2l1fL<_eQMPdS*wl8kZb(Do=BVLYi+B#oe-)_M`-(T|~{? z4xE@fs&dlK^qIV-wx1h3Wgk|#s7LO|j=USRQSzKD=B*C~T4opTEv-DDZD7n~K~=%v zy|jHCOxpSI8j0KsH{3MLxmF*nK>+1{zzbQ(+tp@X5Ya3*(gTnSY`M1++%>%hI{cht z67KVq)XY*&7q7LBNq-!wZU>#grN&k_hYgO_d;GhVy+vo=IyW5d5AO_@%Ovi$-mg)b zXu9QC8MtRex5Rpe8+RoFCO}C;)SYp=Qr`LdzOL|=(RnMWN!x~T=b8$-2LR*u6?$)i zTEK^irOUo&>Bzugb%3t*{6Fj)zmLiRjz-~6$+pY|fdx<2GLZkweq63rF7)qIuE()j zdR~&~(`MdXEac1^B@`*`Drh?N-l^0H;nh<0!^x-C+5JwT{hNvsw}RJdEab|&?oW;1 z&uE#}manDqfVv2?g!2{#F|nT?MN?|q_5(iWc=hZ!eq%<^x;+_CLu=J&d3sjja?&kU zwa1hzVQlAE#l+J(WNCC!_?8rfuanmbp;M#c1k*jDPGqHTm6!OP=$4r>A2rnPG3b_A zbzP`Id=Jg)F|(P7_Gr9}m8^QF48TE=sb$X_R>-bfqIbe~&Yz1Y<}u^8%>bP?a>PH; z=jn+3P0y4=IWfOD=WykjoUC)dbS1{WZ|gg5Gb67|E%&JDS>|V#!(2ENBU#Av1^KDL znucCek)sg`(ps#_)Kh7BY-nVLaGdgayr};!Fk28Ja9iMaQPJUZ+O;!CwnNhgEsTuMTb-LiHENP3Z=^Z?IW@KfgZqFL?Rl(|YjzBJs9< z@og@@dR!ERY78LJuluk`I4H4fqV{^1Xpn`0`4tI0%!-7wpzBSSIZ@+u0&*%P?E!nj z#)8D9hT&_0;t?Nm!wk@n(`VkDPGM{;N0ki_Mbb=^g{oDX3FpL?LTn56$6Y9Zx z2WvoY^*aHW2)6#ssrBq4@Wx4V1rNyS<=b8ws*<7kgVQfC4cj}ozM9JHAiaE&Vlmp9 ze%szl;i1lhe{ji^H6CWlX_=U^{WcljR?5monBo`r)qqG$(5-7SUxC-~tPEe>cgjRF{1tYmy$E<0 zeGjPzek_p8Q8?YCbQ62^;+ZU*nl2sDPDec#+-?^X`kk`iUXHET!{c@@qPVvG_)4)y zv_VHQpR{gZ7ElHdh66$Z8+mRDkp0#G?~#rqz&r1b@Gyo1yke5UHN}U-uz9Q!<7!tv zGeI=BE#3NNk7Hx`u?%m^>|Uztg`aI{*ViR(PUQO@0Z5Pv7e$r9AyorrqYsLB#)xgRCMl8oBotUnt=HXg@zv%FaOP`6va*p1`*e;o$) zdkvpb^gqIWD3GSJRg-e|rnxZNKTNG`q%-hVqWCYP2K4WP%HVmHW3n6Coe^R_xldeu zjv8zbBjTW1CgnEWDw80XP1PG;rpkAkd0_TaEpP}gMY)e~Pj@o?v%0VckZ$qcjjx7} zdgBLCeIL&8iHn`nxIS)x6i-V^EwmfzMobJwy!^?W88mq>-u;e$zun#=;XeVlb&qeX z82q;pW!f8qrFUSWIdVQIxBTIBdvnR*Iol4`bX~XKaHz1jS2>Bp)t8Y=0n@fhp`cIU zn?cV!j)rydM!~0#fG_!tW5KjyC58d&p;tS8dTr)7wR%%JLi6ce{p%cXlvm;^)05=q zM?Rl1_(g%?^vXef=H4}M`ZT1uvR1s)SOCx3AZZWze0T03mx{}+INRXZcL3i-!trVL zdj_-Gh#!1C^y#nXe*Sb8w=!y^0&rEmIO;H=a};X|PGZYqEdGGA7!Y=^-~2x|I=lU^ ztGC!6ww!Gbpv=+Lfc_Cwj1e0-<1qL4O6pj-w6Af_YAGI>B3|ljeGsbSTxLAHT1rp)>HI$RwT@PO z3(k5kwiN#YH*>0)B;37R-&mYqF<1=wQ19n>$!VirZAESLBIR~m*j9DXPo##2#V}lXWiC8EhA@Wy9Fb7Y9W~Og z4at&5t&QWLQqM0uvC=dDm~8(`{`tTDU5{{(LUlq#w81vLUwZSs#btP_0*;4HfXq>F z@6|BL4uHveGq(;D#RRw9$7AWNZB2zm0ReS*T%b;idy2CbB(pYth2Y;)kxXPq3-GIS zyq7P1s0uTODXSE46z-Nb7a`#vo*Ik^5r9>bfU=stONL`iisx<@+TRsY$!6-t+jSxVb22o(DOga>A&Lu|MlLWx&E51H5Kk7 z*5f344a0tgtxY-^0oQn60BJS2wT5r|v4bx6XCJEXCwW<<9NtX$B3Vq8yOR~Yiwa8( zcIgjJJ_vmVn)`!u+6nMa%AcX#%6`FCJdfkiV!@VJ?J z%S+7Gcr+g6z%G-_(PFCKR5D$Ntxo9inms{a9}Q(~N>pwN)iwnH|}@eaeTygl&bO>jwP1R%B?%V?`6vQ`}T@|=bVWB>4OMg6gn^@DnXZMh;_p8>UeD)p%9?OB2QSk({>^l4B!nChTcf z>-mWHuJWeCg`M#X8&p_-vOTg@PyJ9k=C@m)3_Zmwb?-NtIpY{qF?D|0>kcDO z<)EWsVy}Q(5bTbtw!Ce%^Ju>8Ww0JUDusRYb~na=gV#+1vwac+dvX8Z*b4u0aJ2}K zN8PK)8TLO9q#AtZMi4OeV97J>q8(E_^Y(4&=^PDrsWsVL+j}yl*Ie0YZ(~HsgvH+& zW`}<`KaeD(J=h#hB%ppvly)m+q%9--L|I12!QffR$Q$GJ3bBC(<8@HhAb?*GhH3)! zn2!ZeS!iOLar~t3HLYQ(Niu;_?4T6@12X^es&_SnjWm`60lDmdaLnKF2B@RFi&uES zYMCnV=vAlG3W^uIDz-hY(tAD~8C>HSliX5d0%e@WEOIF{__~KJV7$)2Nw1H+Im4Bo@IVFidy+!Xp=rNXSu=sGD6mD=;lk@Vz?HyzvHX z9)NwVwmL^j4LxiZ^-j%65noq}@L5?2aKB&f^xe+86~I8=LV>2L2Hw5Zdyy2oN}y7Y z3~H2qx@Gq4j>P0|WA8%8h&xFac$TcL1Y19(!^+0OsUm4RS^ZlCr5XitRA~ZWHG5_@ zQ%UCy&Il8eZh{8MXP<9xgo(2=?jj$iT=)jUsAk45%5R*lKcV#sjntN}&158hq#P6X z7~%%(oG|6oJZD6fhqSOc!Be_BjOHv%I-EDYtk@u)wSj;((nkdyzxglK73~=H`tY^3 z^9whT*P^v!klv$1Jn&1sVal!+9<)C+g%!1sq-S%S`dB^^|K;@><&2gpLP&D=+n|Gt zz{r7BRW)@*cfg9Z2&C%=dPDV$rrQ#lgdJBy7iXC*%_}*-6}tTLiv#gJiH5dZK0E#F zrG(+Slrw4Y8KM7E;p?eN?**RpefO^^0{rono_9WoNh`P`Y!{1tEPZS}3SrJW-iWC0 z)f2`K@+}rQY}Z2OdLK7ig{vvS_FVmn87Svph?KnusBLz1$J4ql+76Ig^@ov~?zn0? zc}Y5oK1K-McDb+VeM(ucK=>m0tkUAU^c)rrIs1zNE5>!7Wh{tCB-L_Lh{ECC>e^6T zo~

HA&Y`yv$^=!|)+=RKEJ!jVd4hPBEQyd}?Fymi7y7-A`d;3n#(SIvomP>_+(cZ5`io3k98WC2 zM*YTL7H3UR?#FqPwU}LQ5s7^ zPf2e{9kq7uO7BhnC~7Iaz_v=mO6?FP@Uu&Y8;8}a5`%`;@XS^9kc{}92B`=l*RMm@ zGYPKomIsZ|!)67DMhk{Lb4UmBxxrY9cy`i)nb8`NR4p?hJi_8qZf;?)JQP4s_o?7kBXe_A?L11|%sAVCc@ z7;x`C(7d{?1E?^Ct^ZilRRz&4s6&?TcWLMfBimf?z{0v#>-(P;68l^J_p3EJuWAX6 zbeT-65A;S0i^}bNR=}ln{bW!j@9D_t_UVmKV8#?*J^DN7nRE6^pYsf+oX98on@w`U6t)n)~E)7*B|A-Fa8!ElR$7KVJ841ri`uQhcHKT zpquG&NdPm5^?%_dWWaM%2uOORhu1l4vsT4D8}Z9s4rX~)%!cL!-=E%2_&(P7I{(`Y zd>)eLAtIVTw!e-=M$^EIOC8FGVfK`h&7)8|+3h)5AiMa5hK9Nmfd)t6gRMX<#O=Rg zoBilc20>W0;V|$%Bi=FP%bLU5#%Qr@6@ZYHTi5B>#-!nnv7 z?C{HtlSyZCEy5>Q%2s;5_@SGlLE|r`Z|u0c?qU~Zb1z3co0dJRd*?HUkuDtRc@-GL;b!utgcD7a&;41jV(VS&$WL46 zURDx}WUZ$Jho_pCI6Huk)*%S{fg?w5{N6iHp!YQ!0%GZ#pP7xc79ZYwg+P0cYmVnv zjpsL28{ynmsCO{pABUtEk`5GU948z?rZN3$%4JJH19ZAv@~Ae|NwhnLZkN1^X%(L* z{)tP#&k;29Tc;D}gWBF#rO zIJ&%Hg?saMr?d7P^@>}$%2+4#8mrmD_7*BsuBWjrTxs4l*)ztXVF(%=5p(Kj8vLy{ zGC`Wt8w@vr4#!dEnh{m~cc=uL=yYM$YO{!EMZW`jUb5J%;{;ahnIU^(EWOTKW#+*M zWOwzY^+}hgrQaW%+68GxX-(O2;TYz{IS3S=Uo~FH{fQz8qw?$fyMlu{eoND+*2_3R z78#g%ED%5s1d($4RW3DuRV$vV4<}TzSH`_n?>-=rmXW@@72+Hq>EPhq!f?$OJFPJd zvQL1Xv_?p!fm|ki)J98$-mr!AP$?v0`U(5S1Z#2n?N~E#82xoTqX^YT9%V4{4)Ww= z*kvflYizj`B&cCp`(T@Irp4EkYw(U1_GTBK-%)`)`oy~|MS}ffukDzR0-4WuA%;TD$@dHm;f`fj!u^-C6 zld-IE6=SfO0(2~)r==QP%4PebV}ny_fw@_qle4sQ$&5wn=aYen7Vm1;F1aq-SE=h= z;Tm;<%C$k_xfk#`q5E~cvv4B&n-cp1v2qo_izB(sM_YklIFFEATTGLfX%Pp*B|rRp zocr!_ZMDMn+Yq(*u8PDMhIo};xSSDn!`;Eq&^d*p$@EY9@j1mjlU-k9d@dBH`p)|( zQ(IZWg)Hb|q2yerN41%3gX=mb&DC~`!ZDkl`P=M=hh*D^CU=Zl0eazjieu&x>CJru z^%dmP?I5O~W4~J*YJ#o#B3&NWXGZ+NIaU|eMB`yUajDFGn;8<_FnA{Xnlu{A@Ieq8 z20Oi5oI!&VV1shS1=U4d=}8-4m4-t>XWM`Mrv<2@;`>(*uU4o}3pp|(0I-bpnCEZuZH(L~OPucyOUj;Jlpz9r z)W_MQf4!P`6uq~<=}qFjK^+3gcTA~WF9?iMiwhhl^P(L7a+ zlsFz6J3bJzZ?yW!!a&Vzv-*y2)D&YbcJ%wI!{OPUNc@uI7ej5?uAjSNhlb{YsEW~= zKR6^tGfT#o20l^5%U1Y$IQ}Rl$g{(BpK3idGmVb(=ZvN66k@bo4DZ80!6yIA9IMY{ zLKjN0tT;uSSqL1XN-z zZs7vny~PNQH$aaH3d8?{BSyJ>ZZOplmFuH#KxS&vClIgL{w3zecM^l%Mfz6Moka%! z2cHZbE6grvJe$7}i+b%P&*MFu)=ydH* zd$1CHuueh5y)5;0@BPxlu3w)2i0S;#;UzwUv2 z4}ZGNDF3hM%>VE)kp&slNg2gWHR^bD887{XNm^f4Rp6|6}Q&@s}96*#z4>=tl(b*4xRS2q4YWcikrxR2`EWy46J<8Fv1?bAI`5rTduMFz%_r zYQ7vtbFPpsN`Ge&${2{%1EBY6>B#MQ?Js-X#s6s`(*AZ8((^vDNv_bbRP@{V_9z{B z+EcCQ`Yqv-!d>JPkVXg=VBw*}v}zuUY2J5O(iF^|c4eEDIO&tnR^kFYMmPpz5 zR42IZY`Hg40@?ataJ=btELbCVXW2#@)`9P3Ez~+=&eAl_!)Aqi``AdAV%p^(vEDw5 zP?}^-Lv&h{SfbANfZoG41kC5C!BbG6c6Wce@OOad2se1;zRF9R!9aTM%FO2K_18>o z1f{FZoWv5no#vDuR20)ad@8k(zc^2-m_o;xwGzi z*CT`H+UCmsBR3CX!8)xF>~N=R=%F(Sp4N2uAnLY5a)ZfSd6*4Kq{j7*Ncem2?sx(3 za-6mLa@EG8!TjQtROcrc(SscI%151wyJEJ|Q3`4GnJE}v$voRV^vuQ?j0ieyQvG4^ z;IMN$R<*L{sQYmPr8vE&jB~MZEqCw6sg|1RQAw(g|_YNYEEF!qWy?n|E!{nOFs99c;7B zUp#v!eS^>MWvC}{XrD}J-rO0v2kwAfvLWzpT)|iL2DawXM;EI;pH4MzIncRe{irt3 zKT3>~N|w}E^(Xb)Xvc`!K}E(*T&+2qW4-r_>M(9t_}iP*Z;ZZ}Tpp z0k!IiEaL)Y_iTW{kxN$K-Sn2yZ(FW$#qxXc{x;!zWe3Q8XSRlh#K#}lxDU2&$$lpl zK!04ev@TRyD<{3rJjqQzl)-V|@Zh1>aE?`@#XWR3DGk(a&Jg~2g?z(U6yz0Z@#CVL zWm-zh3kB+t5Q*8)gseyw$G>mcX_}k(gVSifWp58DnC*6OAb1WT4^|#|{q!M@xmmY0 zP}U=BpT6qbnjxAN%w9w%cj>!1jxGQh^@6cSbJE4?k76cM{oZNjlWsDR0Iwy`pZ8Y&h&H?Sxq^$h|Vx`JHA~nLL(^uVc_o^JxTqvqfM-+&gOl64_I!v6jqff0+5ly&LcP?Qg!_BvaQhKxazf;NvD`FEM2Y2Y}uxV%TN`!{+OiF&y~+OHoX3) zfF(NVOLB*c4@1Ir)gK4mCo?PN61~Ht?7@IXtC7!NqJ#|e(t%XZ z;jgC7{BaY{qzW0^%gC=f4mHtv^m0E;97g&JxT*L&TP`IHU=Q8 z!8veN}T}b;r^6 zT&PI^Ltj%wujU@*SCn_IMr0B@iR!0hx4-3mJmDNN4)-3ZESKFXXV9rFCAfOx8HbKh zOYRzndhvP`cH-1Qy)z!HrJWv#U6dMkh8m36pb~o$s1t4)8Gj^cKkB?RqM=9i^)uK3 zk`2(SGQJK2iRhZ*Js*RH=CPWPV&S5h9+n4T6U5&Jl2|{c9WYEA`Ml60J!pfe6Ba}j@#a7mF9oJaIrF=?xbPOs-OYaWu&yjt7{Pb>$qBNzh zd)F1g$$}N)q@z<8#r_HN{LMK;2rimpwstRSz5j&BMcjZ*ei@Z^!+B5vJzQP7(1zQ#oj)2^iqpkqz6kEqI>3RJ61xz$+X zUd(;%VW6U6Dx%Tjqcor09fQg+avE-BsH@V41(d0FeB_7wN)`@v7n3xD zp0iq2VAx?nST+<@f;49Oyq5GqxNiqOu0Z^N_q+Ssem;4lr^yjLRgTF)%r(u;@m=!H zrN}M|=73PJB*n+xHC<1`p&S%-7lh$>hMt4jAbg3Y;jTNKdfSbRDag+W7Mt<=@J)8O z>|Z@COX&aJJI5F+{0AqF9VlzdRltchPztQdlWzbPNc;z<>eW5_e+ofLV4<*MW}t^< zF%7z+eEY9Tl3p~>J$g(8KD+sg)}db=B=iDHkqc0(>b9iD+pp{*{1zW2=vG%HJD)_I z6s_}390M)KPJb^r-9(aYvXWEPxop?kn_WeJ1HpVW@2{@&Ahy^nGdVs6Io`GQy$=!w zDl3C-XMDGJsqQ_xS5VM)q(;Cy|A6E^)7hZM#F5l0El(Te^ObhhjpF4fIl3xwprV&m0IB>+_noVrUg^@iW&G@ZbI zl)*|Z-{98c16_)Xu+w6uM^ij!hr!cVQ9msirY;c+y6ZM{nH{kTkfW(dtEgAP34*V^ z*fiALubimRpumh@%s}UDyVQ%e`<%eP`!fA*`RCFA@Ny}GKu!1h)OPK8#qqHSIJw!& z*mK%rrkm%i(!})HuNUR5kXl#qa`v&DgbwNkr7(!@qC;|RMc25pz*Hz>GgWgChjj*P z5<4k<)Ii&jf@7*PeCa^2CjLcuH;q8r19xJ3s2_bYy0gfUyi1=xU4l7gCUJQxSh5pQ zO^zONek3O-=dh(5h|7exlQPtxA!_$!u6}+hsJ{65_idk)(k=+ANCmAKOV27^zLR`? zOjzr&M$O^XiQjUnBTr5~=dntX&>&1}qGb?(^L$23G;s0PGj3BV_p##R-*9A~AG%y^h21~`{qvU$BwS43Cwx8bsv znrV6sEbwAC!$O+?P;ufAGlR8QWdAMDDr(GuEDyn0uh9tk>xPJVhLu0A`Rv_eOR)Ax$)iTD*Hk;Xu{CoA zcFYinY-**4ecK*%yDih3A`Cf5!kKc(TBQ$^?2=H7V%4rj6r^uRtU3BR(j06_ZABVL zuaFXNH^4s$EhuSK)=ogmU#opSWRH|8Wx>&)FIqmrVWC;A#8`Zv(L^bA(031C88rzY z8xw=})uQSk30U07i~Moz4cOENbzx6G>8_6ZM*XrglFy&L(zHy_^E4^mTVO)0X;(!L z9V$N0Z1AMDocMnv-OwR4>n zraJO=E10XUV?h&V(n>EQUQHlNoGpQI#`kz5m-*QcJ?D3?ef78B$hY6jmR zyb}ro#D7*;P1Bjy-p?uk@vAp$W`Xj2ff?-A$1-TPB(eEr8Pe0%BZv0Yd(W)!%X%>M z$EBi7O^*3>xS-~|wteMiGPtvsBveeAi`{fWSd!~r(-?B!#p*Nd#>oMl;QO0-E?o3# zQ)ll9JOpDt`sSk4`Ci2Xx`tj_%eSfTPSDr69~7NNz37SA)sKiLzu2_rb=&-EV9F9X zW6C`%nG1+k9_0&ENHL}=W~$FJa*R_P&6|*yjhgg8)Ik@{gFwyvwA@9SxYq< zVW%Wx{X~qnt|QGlhwe8Tz}i{Ib%8|_Y+JrMUR9&V%|~_fUNPWyy44wTbqc<^J-I{# zG-GX0J~yraz{vA|1sLa)AZQDNh&rT%wp)h8bgn+D41I+KW&i3k+iRz}2zSwdM!D0o z(uV)BvD00HmWtYm61&Q#U_1CXRTX*?8oCOjhK=C!yu5x$fg>b;ft2RO_MHQbenzt~rLE*bTx%$RC> z4YmN$%G@yV2_iscz#S3ZRcrTwD`Dow7h^pNl9jF3eqO6dT9t$n5XXV|*uHq;6>R99 z{xIl*Gu=8GMDgT5`O0S(D)qAS9qEs9)o~0+_)8F{enV7i?PmOoHgMy7s;d(nEW|)1 z4;rK{YCz?;7=;te`@%n7@1R7QLrKlzx-|jwb)yuybw&FJhrC3nRMPm!RNp(vdz?|- zwc^E(IYntaRT*xF;u2_QyKz8*%0rL&mt~`AA`3apAh+H%{X-dQ^IhsI@AAOX)CH?W z6ua++`VSV1OS^ChQon7C5n1a?0Qziq*rygsFXM)f zP81}{LIZ6Hj9@lZLT>F3nCui~tO3_g6ibH;D587uq0Ja_vW8ftdlm*-v${vGr#8zCDJh^pEGRZcx=1&MOBBpv8$uPET2~@cz@MbRE7!^OW1hwSD(T*W zJtWGfr41W^v<+G`{_0wzdG%?zmEizSHC6k=3>kO7t>|<>j-E;mAS|CVjKl;+)cY#) zoiK%6H(Vuep5MtgD02b4B|Nt+!#XCVZUs+K-#6fA%F_H@FdF(QsHRw!>DC&UskR_+ zC4$jIt!_+Mjo6&_faOcj{`Wgn`rAsvN_xq<69+8l;zx8nHh0PTAqlO5yPqe|dUra|KG^W!VzKGj0!egoYT_ofwncow@%ONMc~ z23gSv=f5}CCtk9&PX%=G*N#gdlmQweP3%Ry-@KDOmIOi!Uw?}C7*FWkGqUbA7nsDu zs07@F7A<+J%WK^Slq3lTbn)Sp6yf$JHy@Tx=7V%$ui=;rP@=oQ490k3B@XciM`7%p zw!TAehIeniu4|Hzqp84xFKVsXcCrrux8U(H+En1&J` z6Kn$XyS!SrmSIc6tqM$tz|MH~Gza5%lR`6)+YiZ!knCcc4S{sMSo2)a0WM}wQ1NKj zVP9xw-GRB5mD=)yqDT0ip8O9z8l2YzQ+b+Rj~_9*@I2Hq?a9(TQ`hfR`02l(xWR)Q zFRpJJE|@Aa7;dEzzAiQCVUhd%6=4|s+X>@N+0QH*180%ElZIqnaFkI0946vrcJvNWs^xCm=3UWY6LEtpYz(v4Xhdg#?F& zN|}MRHXrCsG8;?n^~-5;24IQ8t(oVbl7$ZKimTSn8a+M7^K~aWCh}~%ZcTT~crDm+{~{Ss>CkTxo!`%%5&6ub)R- zl0UXs-Zb9Hyf@il$HB66_&iH8uR8L9{58!_R?<{Ba7c$qpyfU4K|G#;^8QIa1MOa) zDGesmj``6BkINz4@bQ-O6qV1iG6(pq@i1OaXbsm7?!_s5BCTItjbZ|%@`2LDb6KIm zsvI?ing@K>z&xDW3 zbmM3VHo`77^Zd)(%^c01cZ~0x)H`sqA?o*|`aoZWd&4>#1deUlJzBB7fFIg6z5O4Y zAZpChe|yG>q#P1RKL2Z8m7N1$AGNM1dj|4h-`Bz}R$v|FuioGeV7WRA9C%hDD(*H{ zyX}ULDaQqOyweoRUj@PlHw&7(YBPvy6E-XwF80Ca#z>6T3Ncp?)l}_Or83Io_Y*zE zp0(}3V!OpfdNn8#xoVgdC7;dQ_DYff=OmNTM9v-sYO9?ZWqqZJ+ zJ^Eg9osOpjL=PGmt4Cho(xjN!*sm3^+LbJsMsN{EWCwTgSEm{jwheJ59`zKKqa)O7 zrpB%{OiVsD?yKQaDGWb8s zCvSE)&sPq_Z#+&->-{(L#IZOuxHz7a3{UaIoiY)r-(S*~JC9l2^I z&;y%#HE7c6D=HOvz>!;4Qztx&I_$LYOwvq->-))qtPArajs6D=a_Y)5KhH~*ZS z3&C1k72!%r2G8}#aiK%99lx^jA3NSYOty<@?Jhc&^!P*KQcR(Fj-w+Ii7wT@2>0}A znks7R;PM3BLaN*Mcit&-aC%0IW^X#YwP-I%;@Ky&zD=XKx6hu_t8j<5OuSO* z4Iq%f(^0H%26c)WQx!nZCDN?b{~zAoGAydL-x~%&Kmh?Ir9?^zQMyM!N~F7`8HSMV zmTnM`Zt3op?wTQo?(Q0Du6KFeJMR4)@4ff_@Ep$vK5#IxhP7s$=l_?@&F+n?bae}> z3%I|f8*H1?Rc=-L1!aE?2#-Y}FN64^7o`au6 z(^T)GyFSYE<{J;5?cN(;P1B$G=>DQU@Pe_K$0~bw#7=*hgIwjEHs4~Z8Q-z`wjX%` z6?U*uG8x89q&QBA5SAc;&f-ir^)tAPEB3OopUYP+#6q*X zfFPQcGlD}tUHYJAUk04_7m6m`dnS(abSW~yDFIIjSof{ve*PYbS~*3!&M!`aF>JJJ zOWHV>}eKZSr;v@Dn; z#D=K5o?yN^PBw~L{3F>ZjIpqWu+-Lww}$aOyyyRph0mJ;4+Xe+(_Q}&%gm3 zwwHgQ^v9I|d1bj7gH?h6@ktl=1%P%j{z926*6(dUquU2v?lPX0L_P8zpo4+-JKC=- zP=*n*zyqt1n4oj6sFP#lCsObI+dn?M(y0H`e=6QH)CO*^?vp9o$_)AO?VhW`V#CV@ zVw)Fs`OjIE=kZ4)OOr7c;8NcXlJm)<| zJvs3Z2js5`dMnG!i&fZhj2fP(2hmK9=1|3>G_f{2)1mFx^Ny{mt)5&ZKF-@LQOh!D zF@%+^pU2I#QwKPE&v6489haQ{_F~YhirNxkX&d{9I@qBV=SGDeYeFG)LSbCzt*SR$vxk~ zty3VmvwbF}fdVdwPb}JKdypzCrs223>Nd(c@Ls6wX667Ridu9*o>Pb|M6@R$sigt? z9((9z*90MBpQo#efkX-l+6mFpoK|UGgUEGLT?l)Z@f*J`L&zwoUM%`S)>?Q*Vo&Zt(wC0Gb<;({xp>P3aUMs`J%}!qu+ieuX#`z4?U3KN9#N<;ewmgmnO_oeCy6;~rNf&1+ z%*YPq>rTBKn}wK_pf;Ry$BOAwzswiunb=hbjr=3OL9$)5Bm4%KXn8&kV}M&7JwMe< zkP>@gLk~>GHv-ByvO7=UN49O8Hm*pX)}C)3;9G-&xvJ8_wHoZf_BDYxIpDG< zRf;y0JVAmW{0g3VeI#o|B0k^v;}1aiD~2IdsgsXj@bc;JH6Ol&6XGB9nH)=icA67t zV7B5I)~_ZRb+cNGSms`w9kZS)e&%n68S;*6lKr7#Hzv6Qj_k^ECbv6CUaLtn>Dseid;~}7akAnJCB^I^s8y=U}dB?3P6f8=gFjDgi z11h8TwEu%&GZNvU2|>Z(y?5_ z83Tco9yc#K5gpq2HIaIAyDo75YDv-5-VmPebko5rY6+vCOwIy<-Tg@8dmlZ+Aao*1 zan04)X?t#kCJj4wG}j{u!I}Ah_lCeHw^B*P={G~u9+Os6rS#lF|4CblZ4N?T7FL!j zcs0FG9?wVisB!t9LDI%Da$qkC_>Gm3r~sMu^w-hRXEn9=T>3ZE!W7;!S%5r+xC~*2 zlwk~O-~X-;EwpGq6ZQa1!R2Cr!Q zBzHobmp>Vnoa1J==GCcfR#UnW8MbTerw41aG1`78%6N7tyO25X zI$!)36dq0dK}cE6qdhx}6%6`dg3&0j_w z<=e~aE^N*6$ja5QzH!HBXV(M(PR$dJOaqO5&M`S9S2|hT(9(~(IId_;i?R6jX!@Mm z`zYhQ$IZ&6Jn~*Xdw&_9)qzr3$!}g{;-}6siS6A@&|>g2#F22@57a}f{nyMn7;0on z`~-5ew3w}~H5nua);~K|OR?3abv!aVtQ9fW+`WjX=e?L9%X=&i?RdYJdjtc)D7Vjo z_THchQ*VDd9SduDzaa4rBg?Y2Zs58S5e<5J5xUyKu|ht=++DsVWYqm)FFB`UBW{z$ zoCJne26}n~4hHNJ=&YuY+s*tS2iHsT-fr7SLPw_q%*Imw)8mljh~AvFW-EqAo#dqV z*Km$RL7Z*hD4>e@HDI3YLPT}**R>Xg9V)DfEI!Whob9toY`o@DbaYQlbg|#6==v;& zMHTiiaZzBi^fb&B%_Pe%n^neh3`P(1%`g(py4bAgC6)#Jj`8jTfI# z(Z)oTtp!Yc)|cuXJZ(l3VA7Lx`iIr|d7Is~y{agTU|P_ju@PTUT^+K$^f53J&s-Lg z{GUezT77(y|A5_OgG6IPsAkk_?dL1OEX$9qj#z$an8iMRdRnQl@@P<`pSE&eQy=dV zd;fu4;m&g-(N25MnR|dGON>ymbK4v(zm~py`v%xlg4p(t-g*CbAH{(vqQoU%a-5Bo z)ls0*h925KVXf?k|7hWYQW8)V{}2Dd+FV4G+;nbJ=-jVJh;Ew)4}Oi(D}(6I6`1JG zS0(G~huFj6%!@7T3)tpIN>DLuDLItqKubepjbnvFBj~^V_$taS=UrFlHSD@lPy0`a z@f#IiZ@*17vW0)+PoMHeK9_y#KwC0ozcKen1gw&SfumBWJbDmrR7&}d(o*$*IPB^? zmpHlUcgD5#;I*a*^oYm9xHu_z5>J0W7uuB!;jBC5aBwuCz+BJ-@`J2^9PuGprdhK=`6ZCE z{q@fWS(+S+mUeOKlQ0j1X-@ky&3#4eecN$Y{~)yctHKuV;=Sa)U`s)g)uEZ1mbi!4 zS4YBir;!;+WhA{k!kj0_!YsZ0I*6OYP^RIOl?w8Vwu`x7$M)lxSGfQJFw0USIsQVa zSjf12I+NM;Dj91N4R!K8=28~SAp-Q7N8ZRHnrorgb#Qyzelpom{Py3NsAp`e%fUxL znuU%9NsJgp=b1(&{ww^_K0QQPTfEq{ z-A`dR%8mq%o?gzQ@5*e?T|W|j6u`0d9g|}sf0O-g*`o1`)wk;hdD6oVAdvmohVo08 zR#xbBPXfDzTVa#*-19S+K;jS0k5w*SvE>sTQWG6qgy99snoqERUq~cKWpqANBFsP$ zF27of`wC{eObiSt^U@00B~TV=Q|(3{{z8ejh6ppI^s%nqVJ;X}*5le|tpE5XeUAcU zl18|=G~DskJ;;T=ccjaroQrX#oQh1$9x512Bu@XzuKkuKUgACJT{u$ppq-F2jaC=o z`cOtm%Uw}29rtDri&Q>qMLkUq98s(#ZAM|TX?s@zYK2!>x0u*^o}7(!%1Na&mk89O z4N?>^J{)f_hvB_*GoDjj8@deqe+Hy#|uu>9#l&jnP#{h>Fa-@oZr>G{_Wr7=@7`07kwlo&zOA9 z)0m-{Bs(%#^s4h{Rl)5sb-#L%2S$)pWIdaLX@trHntEDP>$=^VJ8=5-Y(+$}{Xaed z)=b*b765#u7wZ6B!sR#h67|6Apc^JCVAd~#dNW-#iPOXmP$;y-R+U)fR$BWwkGMt! z*UW>kWk`ZO=nKMJ%ibx-K`*HLJg^{vP>w^4{y-PX5sJ*hTS)5O`A;cKv?$O(;I<-3PwIwK=+yzrAEBtlT zZ(EtX#LG!fYv2ar?PJY8ZGi{ff?$nG=xr2K- z!K{WvDU)6oSAua!2wiNi$e71kt0^1`A7x{jUV1}2U={O9F>Z22Rl5~ivc2I>{3y=I zUKr(^p-yxr<}h46I$rzdCm+XMFyWi65tl)NI1fdb8+ zhLi6~wE51hLXUP_ZhnM&2iSY#9OX2e5S0|8D@as*$?e5bpQpvWk9F;plXp8H6ML(~ zj@41-+$Bujd@_k`K>RCiSCQn56+Zv`l_?$CD@zLFs3s1{Z|=0A4J1gEswjn%(ORoQ zgqO5RS-b#7^b=BBv~ryUM$8JLW?RNtulL$Z7MMVwb=-!g)b^$(dPap~{AA;sCXrJ_zL)4YQ$x+n+ILR%t#yH07#-$Y;ryu%E2k3EXMdqEqX7)w zjCQI`x2xKI*EDo~FivZBFClI@*UX7V{c#nhLC5V=uKi#xwqQLxS^iJyE-%-%%!0Q~ z8iUK}oJ^T83yEelcip_wu)Bsc}*S z8aNk)DTQSO7}L=>ZHMAfg>P4WkfNvChF-W>Ssf;;`C(;)Gdu$D-#T6L?s<;TPvzBK zR%`2N_t>JXJ1D<$w6yORRH&(s)sOex_XeFej<`Ui@2Eq#if+8)-rDrU+tM&msssRGu}tr&u0)RxIl6;EIihpEHI3Sv)0gS@9heGdY>TxM3x9 zGupqEm9TuRNL|o<$_5AFj3hv?g(sRG?cMGkl`))kf35u8Stf^q;>^j4)GxxUAG^05E80K)%Ye%5xt(hM)kV z{$Xu+fT~F#4%v1Dx?n=dIq5@6Cp7{OT8JtxV#s9HD1ILTC{Oy66<8$R%y^fTy6X=alfQ6z;F4SBW@~vE80yu&e zgg>%l+?z%(M9(<~cwg63%m@EWq-bugo2o77kCE)@y5hXw{A#b8cd6E4F^B&6p`c{W zNZvA;cuSrP=}(LsjrZG_4SBO>c)#>@_Lg5*m9&VXt2t}wW~Io760=eEo}ful_}F2R z_StJD8}kU$W^~tUMFr+hl~G+mG)&L4^sBNxiV7$@MEN&RW9{{ViV=EU8Z9t3de_w^ znDMd=Ck|25*TQ~2CH~OJ_0ELjLLL1%pvlwnnwN*#$N`%f)u%^S!@7@*bj(e=y#0K^ z-HZBUxv)3*QhUE01EJn+;RVsO=EAxk>2!)hB?{&>h>PWa*|>T~&I_~!j`m4uyK~(U zq6Dl?MLYam*K33qkI#^4^QN z+DW@T;x+7`^T@5<;|ym27y7U*{IiFr^mvOt8-QP*F^axjX+C6=I|T(Qk^8<6T-L9? zfv!pP50||ET`5FP+iJC|Mx6fUv^+Gj5ljT19iq%DA;E4n4DKbZ@*l4RxtF6Q&jX_d z|C9V0PcgMAF49sH%^bfysr%ObYmGy3MoL#93s0HOy87E6$=^xpn;aJ^T{(tKUKb`w z%67yDO7hZTrq_T#p#Afk_j;1?i(wJUU0$THU#$&qF~jtF$un=FJ0o5fF79EHU6u7R zle1#3Ev0~eY3G&jXnk6;`}Cgv?dwA`31z4-SIcZC8dv8OC2DLm zPrdWs6LGVio)`)LCT)L@E$~C^@(*0M;YD@8*exO2`A{p3y8${I<$*Um+4~SF_vGlY zQ*Ez{k?fQMuChi=ifk;z{Xs&zwms7PD&X7ur*X}+q$@9pk71V|uWpdxE0+_`Qq~9V zS*<+A5oXHijFa(%hqW=)cNL3-(!Mdry7JvaE)Keka?>?wb+^44OyUNF(iwtOf@wKL zG4plIIbj_y+09Adf`zQz>PJvrSq?OoNI7TXKE>YmyuS-s@99mbvhwwHbe8l+@z~V+jYh!p~$a<{``I3DkmyXMJXUR7~F<=?IiU%BYV*F26+t`3x2ImxLh58o1 zER>qa#cS2Ct7NvB%GXT!0rC@3Z;QT+%LRI8zD)C>))z_hk+iA&J}ToGXn!2w?6K87 zfT4vxu4nnOlWkX}_FqAoK4#efEI9Ci=2W~H0oBL3dG2~TkDb92(ZHDJz_qPb2aAeK zRHu@;VU+nuH-EM*T)R{AzjBH*?Wq^$gA>)Oa7tTbX{Z{=%HN;N1Rf)4z+r2$-g;A3 z(}!VNaPTz)VW{9KKyvS?*TpQ)j)C6~+xJe?kB6%#nJc>#uP!EyZ=D=Y*Z%6>K5*tn z=Rju+FcJE&FRgV1^tZIuupyG&$AY}jxo^F49Nk^*?dqV6o+WG!=Q=M=U+~pZUfw^lyGxeZDRCDkZk01yN$Z#1UOO(ZLBs}IzsvoEO$bTgrLE-?&;^3N zH{R?U-+3n`onp&QIcA^@6=}QpL6{w3^&?;krXfCBM!GZ5)2tQH6GWgsj=A%|I%M|n z%ZGlJo)Qz$6DRBa$hop<&zDv*t9RyycS&0nXI=)^+SYvcfNQg?c5M+)s^Vm^&)<5p zu@)N>o*+(q;2$yHmR3}w6sxCS$loB|zHhKhe9YypJ@)ihgn*HMgRQZc0&L0Yc7)M|R*E1AR> zVMnX;Oup8+_QQn!*nMb1ldE^q7XNTlMx^j7U4$u2xe-?5$wcQq$Et5!EwvDUJNq;% ze<#0l`6Xv7J4|)T+KLfooV4E343;>Y-G$ZaHP@VC`XgUkG)-q@%a?%RoeZ1xv>xnl z`hb-juT>T1pik7^Q_9h;wOH+HKi3~YLF?dT1Y#mSa*x|H51PAKJ~9vnqLm+~Y){^M zt{=*agef<{9E2!dFOc)hv7FUgE&6nnMSVJ9LU?VhX|uX(#GCqNpB=vwJPCK>-_9Zm zDl)$XR+f8P&oxg>dE{ipWQ_P_EU%{OOwKR22ci9}lj9Js2)l=b?au2a-Pm6FG?&3L zeOjNKdOh=~&cx*hFA-Kiial(0Qr9NTKEJ!&s~&h-lkh{|GeKxC<+R%7i}Q%va$t>> zyhL5Hki1@ohAXw5G$%8eNTd&|ofjL-afEs8S;jgg;}=gQtONMy9-QIPM;>E#{~4f# zTUS1?HceeCa?MjrG(-A35kBis)Q8(`CgCIAeCnX%`%Zn5#T)WTMe$ev!3Jz)B0N_G zJU_21>OPw|I-&;~$EvcMgbeUn`i?jNxrsn3txC&y?n&-TopzJZZOybGc%DWi@)Z@IHezIBqr}aJ}`v_GbLuzKR2G7AHJ=DF)?6L!uwD?hj zN1RoqzB_oQse?$z1jx$D8oeP6vG`WBv; z-l&G&AYNr3+xs4O1k;CDJGTt3pXxuf{G5)AhF0DAjAAxoR*eRO=Qs6#UzQx#N`&6( z)nwuOO<&XCp*WmPe#N-vYPPqfKOCE5i9|QMt~R0(3TicRX`0)DWj7d)&28vVi=^9m zch+<(_=o*a>*ci+7v~~t9g{%lt_^Ut@_VwMNw^Qa@TGN(74E*9$y5(@`7jMzqe`|4 z`LL+PKTszWJiF^V>AMGkCry#qS19huF^>wFvJ#QNzXH0&z+Gy){z@)|q6)r|ua0Q5GggNd|>15N{(Z2U>w>`R8r0J$BwK^Tfm(?XwCY?eo7-1dwJ# zC)6_Bh zl~_$0zc)*!i_EW4bk@n}9C=afRShOMQy|l={xVgehan6uhZDwhmp49RoUFq8Uiuq& z`fY%+^d@oN_f)rqhnmRa8AF6I78|7)&Z^&A%oDD0kbe!BGA-fGo+8yk9qr_yKyV{Lc2&g4?ijVQUIDAs^yZOxi|Fbk?I6Cj2_>qK)K$@hdGZ&6 z7F)2BVopO$JnJ~dH#^eP0nAnc=rUVJ{jEPRO@n&qZz*Kc;)^NS-qS3vF(+w9mI)5? zOn&uJjaegiPvR6}*k#mUW%Uqasej&L`YGHsk|@cJJuCQFuY{E~(VBIQT&KT5q>HLV zXjESKA{&m1-ANPv>4wD@gIvf?VCxTX0z^$&0Zjai_ce{iN>8V^WB}?>SGyZZBp<8M*FR*}XGQm=(*HB}&+~RPFOJ zrv<6}hp&3!FB;2bpdKIWv-e0$$CRS(xQ|xL=xSnT?5%BDgBEy&SEdh~xTE2ovCJCJ zXZ-}@!_hnT&n~j`r5)99xpb*F0E<$0Vd=eiE*LHxSGTU-?wH)Eu}t-mBFXug&(kS{ zjVlD8G`6p#zH9HjwEtQDm63JJjDF0%xeStD2jjfsQLnA6^PLi`HP2F|@osw0@2=vk z<>av+A*cnnc<%FSx70rt)5!11{f?IYFjd_dANAvIo6AG58^(lT@d8d8lV^hUuke!2 zo&Zy~nUyn%{^>5ygT2kB29o?_cU=6wT93TBdH4Qi^Q_xK?mdc5DvtYf&&<6Wz~|}A z-zZM7(cfUIjiE&$r7!^6-2e=_uyRa)0}M1{t7CV|cXEvY>%QS*L48FW_ZN!9jOITV z+wP#j_Lx(CS{|A-HrP^ppm8=DN1e_q=RpLy+pgj2b^T7(u1L5DvDwhSF+thSC}o#G zJOYg9h~&FI=hK)c4D&J(?S8LZZ7<8VyWtPzfr3J=#kv(w9z8Ek*KK}to7|c|JHMOk z*&0z|$onc>B2)lX&#V-5&%zcwz7rFBOBL7&=@dTrGtPSvhH@fbn)7g9kqFaHb@2CA zAwBYfK4je$2=SI36c_}e_|Jx-Jk9#}8z{5XG7k8bf#Zlhw7*Qkx;R{o^1q zo_{%sdA+hJhif^L>OmqYkFgM>l)Lxhk`&2w;Q_-}lrSGbAzIOY;jo@}|3&+*5jgE! zQWK`>_|k9`b$#!qe5%Xi#v-@KM1$ga&lH84&@GB>%dk{x#U1dkwIiRK9JQ&e2Jy-X z7Wj;uO_T6NJ;lSe(5(Z7D*40fbs2H(1#!DBkQvBRvKVjm-nHD7`l-hU%7KR3$TO(! z=2Yp?(;s67J4{c6@e$Tw;{?sxxAZ?^kFNPxGn7LwXd`80UJSYfM&w&GCdY2RbW4nA%;PDkSTM!xxK4FS8$xpum$MVb#g#BtGi`MwOd~Gjf&(M)gIWH()!REUc zA$KRC-yV$*S?r1*;GbU3vooN1$+4A?Zw;cn{E;1B;$jHjd)XbU!$+l}?`7KAM|vQH zIj)+<)_D!@lA$j;tom-MJrLMG`7ECixNGV41A%4t!dGj{hsg!La;qe8yUg2l(!#OM zMf#F}xV_{qExa3ptE}p?9=9m!U%}^m@=u9R@-|ArXv^C3ks5wz=|1aa9FhFV*LdHT zD1lo#2TS7Vjk4a*HkPelSR{vb6Pxe7P-Z-YRY-7ZL+0(fxyx-IulNbm#!8|^)0V(^ zzfcYdNUDKI4(E?Q+5cGQ<$!7CpR!n!|4Yegj8tLa5+&$!b1N1_#|tUKR5LW*GJZVr z{SOGIzHXjd+1OoY0qlqL-E<9qibtx^Xk%GGe_Z<+^Ipc~J|of(5_%F8XnooK*c`iP zFI$(LH&(SeaCvA!a`D+_cJGnT8+DWTl)loFt(x~EnI>~EC4$VSh>nf&u1h418#dPLgJ6{(l9C!~E5yhf) zR$f|XNM7e11-{o3#*;Pxp0?jwc zwv`=|GMo@7J5pPQjIqz_Fx&c*V4~8-Wpkwkb?Pxhb;BRmWe*XxR1;H4{rEsi=kBIj zD$@<8isJQGnzCXwVQx3B3J~!0iXZS`nQ-`VVwwhUpfql!ug>qkpQA2FF7?`Lx~U%4 z=s#=GEVYmead)I&uy1|FqD>5!GTR7*uNa$cz}8A@>zN9R*yR3>k6_5cD3N(JRtNRQUfjiSWazk?hq zn8PF2+b5sywFtMF_23c8TcA|q&-c;DH^CnB-G8Lzgjd&>uk^SV-+D0s!So5!){bwD zra0&KIWw%4zVXJ@9p@=bbLm2)PXmJ>SIwFZ4{}>l;UH6{(}3`bo9pxbi=y<$ zz`Bytn{fpwO6G|3PQC9Vy#Pk7d=AL%mQm6-x%Hy;hHT%a5!aSz?p)zRhu)2o>I5--k5;;mI<9H0)(J!uh4l2~0Hd zlX}E~qNaxNd*=Sv0W+Jo{=4T7PcCeT#Q;EkD|HP^`AafytUfO_Cp*TdfD!Mp_BRV+ zXC7zbXq_JVp1Ngz`mb6-Kv`Oyxa)C%AYWE{#Jw4AZ$v)lw?&anT6h-LuUB3Ql4!#5 z_B}HM2vAS5O<2@WzK-NWMj^q3`ms38Ew{RGgg8{XtKU{6ANk3YH zk_RuX&D*5Ctoyh3;E=Z`pY}EIjvo|ceU{9wr#UuDpjg-wcOaPVe6&DrWxcm zJXtcRmJ&!^-etAQO)?tgAyTrvRg19q;t5mm#?c=zbH~B&gD~sR#TfTDyP}?-QJAIj z=*7Qq3VZkT>=TkKL%DIH^paIsv8F*L#brzJab>V%{J=(I|Mq;ICags|d+!<-umva7 zD>EIvCG?FHf-uWfR8Awwv^3^#61aJi4JDE+Yd-g*Y+TZE`Tx@2Pk%9Wp^Mk8 zWX9Ody9#^kx=Y|N#~cf%in8VRpHEx|_rp&Ebv#|m7^b*_5P55ufy?sg8i%Wqb2erU z%ug_FKN3_u*@L)u-f~U*u0}}AD7k|b#yE#?i#h0Q>jf}A3b!^xy>a`dm#2G!{A-J& z@DW;LN=+fO$qF5HW)Lew9-J%Q5$hSElZkiQopsJ{?Ma~<65MqG>?dXGKF0lv%Mm$y zklLbzjU4QMA!(oa7h%WI!~dH^Zjo_dal{Y2Setgg1~B-)j$$3)*>e?ahH6fSsx5VkonpkPO})@VC@ylEEf%+J0t~O7rX)1NIt#XSXgxLBIpF%4(xDCXG)1;#?3JFUm&Y@qRow zOahkG`14!#V0XX#Js$ORxp!yhsb0Z{OvKastW}eC+eZ)XZM1lJB!|5=$x!2h&-2b)?m)ZzXUF==jKH*?KcG4TDiMienJg|JK z9BJj;=Qc9xYFzhv!F#=Z^&`Dq>Win$DsjMB!MIHMNiKu~Z_6Al)k@{;{O7Ti`5gd}kgJN?fPe-OLXLOk0@^Tz)F0SPS+|=~M%aJIO_sGBRXt2TFkNVuK2LYy1`mu&g0EAchx9R zG0gEr(S9=%lg0C~Ghz3iJb^#r)kib9>&sY@g%a??6s%fiseulil0iOrXLGV;Oi87n zHGA39m;*4ET^z)y>-D7JB{i>tOvo5nf-1^X18lbKK%|5Qa1gya2I4S>;~ z90!-xVAkOr(a@`m@iJ}^Oiaf_d8=q_Bm^PVb)&D^NtO4W>s{)h|Z;AStddyn_! zx~M7j_5PQ1qQ`kAD{;`W!K#=o*=YGM*S|`~Yb4^#(Q%H1B%xX67o73QlN;I1pR}2? z$Xr<$NIvpE`|h56oZTX;H1?h^l0>gSVg-~ZVzp9g(Iuyk{}4A4dCab(^(mt*1Wz>S z$o;xRnMwScwxkhyiI=G7sqJ!1_J9@KfK?*hMd0~?#{&|hBwY~=5tyHO_ zCTDoo4nGc7?8Zp(+0y+Kd_&2hdEL~ONo}N)kA^v2xG(n?VZNAjtBbH3ZmQ(Xtm4 zEPtww5myO_Eq-5ap*Tpvh8^4p|_vYW($$Tc(M}<*;s$1i% z22EkL9zU*bjRH~>s8vgjA0yyvS7-9Lh*$!XHD<*?vCf4z0Gv7UXa9Ib9J{FdCA#Bz zf-A+!8={RTxP3iQWOER;6Rt?#oS~m=+=t1BzB_ov>o>RKnB_C6_n-glTz_X=5hMLt z$!lH5y321~{&9X8*zCLwz8D0ghodjLv=T$^WifIbl4}EUoo>Hh6;fZhMjuA>qi4Lg zN2se3ms@bfWVPH~($|p4WwWEo&O5u|{iNd1A?Z4N>AsI^YJS-&H{xAq-4|~;f&LeY zhU-mq2Ef3jGgF6~LJHO1V#RzukIL8|U~x*CF9RX#^VWEWuAqme-l^m88d>2P zwT8w<$FR>yubN*o2vA-fqD6Y$USz|1`B{$&AAje0PWBEv%=HV)>(ufktPLwez7?uI zXiK7YyT9g%es@^EDsoJ?7*g%FZin1JyLe^nPN2IT9>dBNh1&CoNg}zbH#i4XeZbZi zp-8FJuI=^K`=@Z-uJ`Xloso}AWH|+|r%<5QAHuK+-<>}FTS3S9*alF-jrz99eWz{H7aL8DoLvW~c zFZUNpNMaYIZb@*1Zsrz8^Y>`$`wDL+-4_>3Aj*h4win=+KVC>1coOZ4P$$tjEw_9V z`e7$uYX)TEM5#^H)s;P_N7x=~KBZz7&5plW?b!E`L4tKbs?ia*~XIQ0M3ZJX-<>?%D+@|q@w!>sj+rwZg@vjq{ z1J@XStb3qxpQdM0MD;ebSF!d6twsss%;_RZx9THiP&#`CPj_5F5pVXO$2L6xac(Ow zbEALOe!1sX7QdFprqS-stjVAq5dNi*la)G&jCU!;XQ6FxYAI(qrpYT!C zL2nJ^JpUUtHdoBakvIXQ?oM^2EqiB1qf3VZt+BOF?!8dJH~4Y9^Lk^8HrUYg-}hP?^efAwc2ryS=(1B zkOTN(o?>$LL)+5VSu?$vt|g7%r(yNz`155$=h ztv`6r7JP)w`WYD?(rOoUz58;PFGt$rDPNrFM>|4B(lM#;qjANMolx%`_`V=;52VfL z%D8U7O0%;CKp>P!fL>ulMwC_eP@nPL^Zji+0gq$4u2EXgbTttz6+8VFw;{7MJEr>W zDQgFGoH#J&)i$5XRkWXSPiv3R1bq;{XFlvPLWHgg+Mm9Ib*6vQ<&b&3cOzpoYJ07` zOtiO5_rXbO!pjHsW6Tgxfh2v>7npV!lvJo&KX;H#sU@*O-5K}Wi4}tMoT;k&%JWtdR8!q+qNAk;}7`QY!jezIs&(l!>Nhp|> z)nbCvJ$Trq*M3ayrVuhJjQ!k$+%Z=E{tM$i^3qL+UG(pia^~+df+oefF4_9n2#G=L zG|@%0CEbNe{CTrX-i-_kT}u#0b9Q6zcljIbmJ;r zAmKS1D@~Jlo41JLrBzU`=cS-tzP|hM<%Oc6XVF62m@w<|;u6Ql=YTZiKdM0gr>@)> zqMjCYHK_Ke?^^t4{`8eg!Xa{UEB0P;X5Q~=<7NHp=+QZ_(!Gl#uw zbR%(TNuwX2d96T*o)uk9i!XzpNRT8MMv0=N3~FK?!d+$}H&%w+Ft#5BOc%dthbhuH zzOTdQBht`XuC{ES5<2rTES*RgB8^7N1u%Gc$6k_C7 zzz#2l#OrFGWBrIlk8KIcaH2!jT7;tXM0IM>@dwRk*O+ge<1|QbXk4cwHLM!%-&P?& zUFUjZ&I~E!GT)?s5L<bfZ&-cc)r71U{WONP<(ad!p zVpHnUg^G0bfew)6YT&}jg_yEo)0LCc(4zb0QpM+sQ?fiZuBew4I3Oo0ZK)hc^EpG?Q`~_mJQn+Xm-|JgjY5g zpDjt{$G+a<$C&N z&#m_01nUCc6Gw`&6$x*x@$5KtH6z)42m55xI4VhGGYCos^8-`#xoJs z`Edt^k~tS;iHf$!D{`>j)~io;^7bq}95dEeyuxdB1w~f%c1l&1iG?oCpQp;6uN}>% zeAo3e&vVJ0e}MLj(9WhR@dREZaRxwhYnDwTT2(ikOf0v***T-d&G40KNth@myuwog zUC87O|!f(PNxKMv4cZWnS6 zwL)Ynb!W5!N|^V~d^HlOp9_*fV%S1B5298zJ3!HyxK{FAaJ@i-%XQ275| zNBg(-7v1>lH2|ZWw&S~~Ya?t|7sXWm_@8RKpXr?^{FKHEZBdC-Ozb1W^+iVL@& z{F+AcDeyKx(f+0sTaQVwTDQNX#1jj2tM8j zq|8%&%_}{H3lA5pHO$=M?%GLw4WHwZlP8Bu#!n+j_Xt3CEJiW%YvyEO5Ai4Vh!$y% z2b+QXyo}!fwz{;m+Nz~VklAEv=oP^B3P=;jYD;j`N6o^(h z)mGWs)| zr1fpbe0)az)Y_)a%DXpt@ygXWRGtQJg`G*|1g}f~8J_SFyw7E0$lbOfqf8F;xg40K zhSb`(wNIz39Wz=IHa>z*mrsi8^szk1!Hg;IlCP`1$7C9lW|5f+%rT(uv7qFqKWlam z(}GYr=dFGt-+WL2Am_1Zu6LYxXnQlC-DK?0KVG0LE5fD;mCcMJnmkYCjT zQ0+$r$HHE=qjKs#=SH5BrFzjuL8B1r!mlUWtnB-mQXBUvv#~H&BoXR46JOqaBL?_3 zL2B|4HrBFQGR)H@o$3r2(S)W8TNnQ~YLoGr3)-yr%+$jh(}#puk#A^xow}Y&v;}A4 zL4ly-zoEXj#V=_L3yQQ0(a7@upVw zJ?&l#@cOj_w8yL)-p16CjIq zA#NBcI_|L0!&n6&&V@YL&MiZEp4HT*j8haVZtqGtxx06Oi)>wC!8;kN#t;URXWuae zib#t{=Ma+8 zNH<7H=g>%t64FQy-OP{!4CC|j-uu4KKKt3{?Du@$=ltPEhGFJg>$kouu63RZCl zaXrRtuLYF%bz-TVyEyZmEWETuMPp<4=WG_!5;7_kW;ZuBxK3}`JER0~e2clyxo!sB zK3{-c~naMkXBsrpryDUlZyufX1X+ho;u<3T;WqTlS7G;zMrF_x@yO^GkN4jA#eq~^*G$tGB;C&$rkm!E4y|1tjlL-{aGkmRsFC>f0rIcaO`Du){fm% z%J0(ex}&~*2O4cXt|14k?_l#{fS2GD0D>+-f4Az?-+`RS*mayQ0g31~`Urp=3#EG* zb4_k^cn#oGr}HsXe))h(nF7ije1X1hyQ9T9|M%CFA}|3_s|_g@TDW)}eXd&NN39#Umxq%&&w+&R%?Qg2riZ_kSN(Ubc@3zntc2?NvOTKFU zNFUsqq>VlHqy{^Tz$9y?I3E~~Z;#q(ryMbS57+LtsKM?Hs&63#&@nP`d`>fQk_5^M_fIt8kdfN0sDFuj;rliLF1hj zA){fOLzp(TP@%J)6E@G9X!w})8@U#_iH>jd^nSMel?cR^yK1NkXhPOfA@kXGUDUx` zFQG4~89&>};dQ)`%y&%@e4VxX407|0yBQnN4P?oZ&G$Y^Cg!$d2JL3RTG4md8W?QxnEBh1b<)-2U|Li{itLFXyRxSLv3No&q znSE$;rc(Y~?Iq!n-u>GImEXtm)3s|Oju<#wg84Ufe)Jf;c`F$!1#mW$?o#_b2vTTo zYG@1Dm^{Ggee=@VEzaNX_16byxo(&`g88lelOfrmNq}oQ$5oThh)Y++{2-DnYm#az zGh5R4pV3r1*OXYn@D8#}Tyr&1cuPxr_DGgFuhOSg5Z=I-{x`jeDbV5sUYmFvtVwZ6gT_fgM)a6@V;xVh*v5MM_4|kq^ zew7`%SgBSiJBjA0*jnUmLMp!}ZLReB47+sbwl@sh+F8Ky^}V*?AJsnFVgCMTHhkVR70<%`i^q+i+?-@KaCfQMR+B>R~_T9s%8+j?_;_IjbWpgVCB5BFsz; z%~cbpjK4IEIo^u1z^meO$cBcwZ>?3Htm>-uNeQ;K0!M5b9joD58RyEB!vg(o@ zbQj zw7m!^i0hW%;jHFn!edUnOw}>_GZI6YkD7NZvS?SFiO7iu^=a_2zL{x3wlJA57X~TJ>Fq>3q z)s?~jlkd}VFTS?& zwoeK?)~q3dqik|He%Lu}lR(2oVUGRNwq~+IRqP)GfEz(L($i*~sn&azW-D%Ra^=wD zZQ0TH(T7znKhwOoou%zmx9R9328XrImHb0HaTRZADc@YQ*esh`0^rQx*FxdeJ88+x zV8oMZkD^btMTvB1&m7{jYyuw&`>VAv*-6gxgS&2!LA`~J03U9<7@qFgxBchklO0)h ziI@pgb+I#kQ2us=7sH1bk(f>=Wi%W3Hc(f!dfw;eCU;6L)=~{vMMR*3+ugIg(47-s z8R$ZT{5AJ}{x-O`a0YXq6QxfK_%SVd*%(NxZ~0JGyB;e>>7x(R_|i2ryj4x0!W9QY zi8Z4JA0gAkz?8?9Ad3x=zd(<_wxTSSGarGay3agiR=!zaE?8?IaCK|b`bvtJ!aQhK znjg6#psbm*xRJczGmIum3)dZrC-M}hw_s=97d3#&nnA+%KB=hfeJ0jWuji8iuHSy7VQgJY0q}#)n3}V9OMsnVomw9 zW>Jal&-ov$eBAu$2FGMeLMSH~8W%U}^d;L5;>y^1s^(s9lO5=cph2Cja=a92l}TYY-W5 zd;Al@)qnXKCo8C{R~jlFjv0^R$eZ(I@OpkaSkFt76QU>Mnp zIvsbhUI`BU`E$|lp6_M1j@q*(E!4&jDqTev{ehjL>O@3z^oDPpxFn{d$fh|#(ax?|ZGB^@fV>CUwS>!QorM-r}wfWU{21duMS9pNpQ;%H8+Bj6*B$K0B;jZ)vOb zBs=0*hH(~c$%Il?{Ty+A%K{5uk3G?)6IoE|(vbDG;kbDJZbeBx@o9AGX*ox&H0mHq zQzX4jhRm}q>~!_eOMfirAf~|QrvpXHWL@L)!33EJOKqihSOb*>1oDPIP^3;^S{xuD=2&UkNE@aFinraY?LWPy-eqHd7q3D){{XFFk4iF? z9O=X0jP6Sp&oZQ%vP8a(3o{_glxg#515rzb?HXxFan5Ojc`xnOAcrUDI zkK*!HaL&&GM_x&y4x1En;Qp4FnDxeIKF(c!36f{;Qdj$Ew)LeBMEm~q{ zv=~JdU0rBPx@m56&dwWT>mX$wtB-S#o%1REX{Z^}JwTup;QDlSkm;d#3?i28tfCly z%TRr(ukF0thJR!nez)%9b?yiC5AH(w3DaD(0y3zLI)OS3ahBZNOZ4iD}amN8W!nE$zvaO??R8KbM#EM7;&_=XO>ng*y$@Y06!i zq@tgQBKhq(`Ou0#6L>XE&PIx;wqk+)vaqp(x~;wBJ=lxjuG(6WCR(YK%>HP}@dFo9 z{zEm`IA@)HEle;akN0hhAS`1ul8CLK-8{&iqjDAXsY9VMY`^t^({&~gmLvG-r&b{5 z=e>V@F6DMSu-p4a&#g4q#%t*(w61Km>58|@!+mqj=?BtC#0B)ApUEyzF^N3lOnaxM zV8452aOz!8mO;QfaeR}Ec)?>UM8#Q?ufF_52b{kFN%nE--Q%QkJ9hCmU&Z3d*6)!^ zdug?^UqkPbTV1<8h>6(cG2K>{KZe4&bo$8I7+NF!j@_W4;Bp&-j^H(viqFUe?saPL zmxSx*2`HHRQp;&Y!<!}BpB*p<~HW_?h(C1qo54(egZA4Ik8gKbO zJ!HeRQC8x~@cUSP(0GpNs1#g!b_F$`j_X2m3M-eGDpp?S*g>r{YkW%?+WXN`PD_P{ zU9kEW06dD4cX|AkvD9hR>!g)O$5gBHvZfiYHrthCb}bCEyGnfRig)z&1Q!k0=DwXX z5Lp#3AIU`9g#rfMxE!-+sM(~CVm?=Wg9mGDz@jdyHgS>2m4m8-*`~x#lYeSsAamd|QEH@?q{)Rd{kZ0?E z>6U%{vdg)5;kVV9SZ_!a_ajEA`S2e+Gv@5yJ-Yuy5pp+F&-QPmzY11+AawDZ1oqBp zY4=H`G)il58Y4X41JwB(JSnwl|DnSWse^Gu^;3 z?(D%-l{lohV6zOI89h_o*^1D*>d1pJh^k&D-|sZ=}{drIDrh%>5#ux<6oJ z8dlG)25EMzu_knRGR-w=O{ZzjM!61-0!;RQfqKdDZF%X*S2gKInQyK7z7=L3jSo3K$eP6Fz(bzWjnIG8N8bKdZK-ybnw9v^xeqF zcmyaJ2$#VbxJksO<87aAVoT9RHbJ!ecb`GvqR8Q#4p>^3wkU& z+F=b*UUfBiy>B6iaJ0g7(-hj2ES>nB!%3s(?b7rTD3Y}%92{a@Z7hl97&*~*WFJgfg5PI#b0k6@C(G}ctHO!do0xx@Utksui4}s>tzFORxQrS zo9uGE-;Ux6b$wsd@?=%mN&3?iZk+28OdH5u5*k|Pz=idqz;MnYH-d`bxX*TN+U@L{ zk>^U3GJ8va84%_mbdNdBa;>E2`)HMb4~W9`$vmcB1cL7)u?N;`o)q;IPB{DCUC;T{2Qfe;~b{ooBb{YA8%cN+?FA&`cw?ScQ;m+j;x0^=yN3KsJcIpmsQ5LEo zLu)-jiqXhBDSmtj#(4Yt7M<3)@;`1-0zDBrPzKBb?Y}^==H2@b2@dM_0x7O-pmiAD z`RgGZrP>knY4a_MBhkqvkGXF8H-0}WZ4hxki%g~=uE>N=w+o7$TMObZ9N!#SA#o_N zp6>ku(G>1_!i%B%A44xkuTzn4p@Yudp_m!f-|UI-x^#@Rk6`7(W>K_!p#jcteY4x0ZC3p0Wf}zL$35fh4A&65P=4y@aTB9_HwI;3#(Ri3 z)I}5KW2nvA$i>acT~EyoR!QY<&ZD(EY8uk`ygSo|qSx4lRM1~9y(TMzIy>Mdj;~yn zoTZ9gJ3FPHK@m+Njbx&H#3tj{KD#;qT*YUju3YvWNty}@keDm-A z{=abF|3XLnyZ5kq=d7Cp(Jz~(NLz>r#*;YGtDk%6yBgj{1wC=3P|XR~JPTCd6x^4X z@!l-3(*b&f{|BV}|JBc5km5kChU(n}j-D~)>vXT=u$#U|P0Lr##-iUmj(cE>OxfKf zuUUDDZL5uj+MJK>Kj_b0X>R_zC*!KGqzo!0x#=CTDs7GgKSB7l6l}X|sq!o_n-cas zWO;>goy8{nx@B!t8Z6fu0^1Sv4hH+nDWJ zaRsI1TY=8M488OK_W%STT}jPtJ=`P-)ZgxWrIpC{&S^1<8vruL-9mj92~XzVTj1;W zAAiyeZKsKHD@>!3`+}{%?B`lq^u0{xdS!=tYSgHdyjEI=+6uf+;-u$FyydbWyK=TF zt4{dJha`i@h{LJrv8JiIhYvaY$`_-Npu9m^rej6NoM{t}BJOrJDz8iP+oD`kvh)Qi z_GIjgl_tyUhgj#H*77?icT z8Pk^Q1(J%m|BQ70r&9L{^S&%nW`0<;;Eu4(dD3mqv+u&Qbag$%zn2WOf^#Q+}__Z;a=m?=*nxAAxTpL7iWLqVFthj=R zJTi+YRo>yTil&ojOD;I2bks*1p`OpylSI6C6bxwp=~0t#RPHiRXrG#_2~iE!OJCUx z1k9$Cc^&99hZRP_U&@PT*b+4fH`%WTRCpkSoVq z=h7uTlgEr>nH&@$3A()GdE6_0@&;iH%L3Am7^m+*x&?^la?^X-IVOO>PTSe{>k>c< zOu9_@k$YIJ*91LjjPoL75$DUU6u~MH=+j_@4|?$@lw>EJ;n$4~9G$E}NrKU=8`Pc<|Mz7m;iAY-f=*}p$B8GO=&;%;10b~k$ z;l0`7xTX zN|c`KRDR{~jfwVKMuTmG_VMEIqp9Rnq?=h#ca_!Ew|#UJEvhy92nlb3?5D@<$}vJC z(5h#Zc&hO4nm9X`Qqo_)h0GInE+mXKL#cQ;qx_h7uxVupW!fLtUgslUPjC3LJ!%6l zL_m2lg*6;dT91VOcDklXpL>@sl0JJ!j}tt@1Ic}~2r2+|J@8lLY4C@%=nMFTD7Ss< z&}{IysYY9EC<~bk0acL+wEGw6<_`V-bht%FoT=YI5oY7CVm~2mTI}v>yO?nth_k^(Y|Bb?yFsa!@a`{|CN4!hi$dB+^!wQa^~ErwGobWH95 zz7%Y`b_kGcdc0$=Lw$fZzOhej;Jf~OO{E+!~*?$07h+1?LuAwomu+zEs7^Or%GMgG_-xUE0 zQ)YPOS8%dO_AG=Nx`meyUDgDW5ixaWljMTvAo8m*YK)RUzcHEt@kpTEl)GZ-YWj8y z_(#N6nKTo;?LL-O?#v@)r6bDh!DEw{GppXxcFU;~VmWU`oOp=zC}6~KMpbsKu_5tS zL=Tc0J`-$q=8!A$kq~0Nic*$S0qM!+1AwdT2LOYl1r}45<@gC(zb($W ze#w4%&VY4TRI^5jI_n?Sf29Jfrg}WTx4gWq#!Hbt=lWh&{)z*+s>WqVxs`o>YXVme z87GEfB;0En9W4FSsz71EVmxR5i>#=e_)*%_l9W z0l4+rQQfiUXLT=*%$EBQrR~c}N0f$-YnfA?2ea`j#}=_7t`9iVj?iI$sVL#@H2#QO zmj(W@X(oCJf5(w>!`6v17gU<@_eK`QoiPa${cLC#H}ba0rXkXW-kxtDNIfXKa03%k zZir??bUm)!3Ar+8WK8a8vfA91yR`$ML33E$37I-DeY`3`G1Fr?a2X9T$_3&g$uXjf zB4B*c44`GivyaLFyReRByVmhK4FQ$NyO~8sv&FR6gYv4EaRd2UQzvbA+4ysdjg47$ z#=cSeOF&Qxt*#Z$KvTzAB~P(S6Juq-3j;hLnZun&0BYmh3xF2)X1Y1w=I#p#%?k9Ptqt!-*WSYJ z-y#sf`VQ^lMA85<6>zA=?K+M99&rQ*kFyM%`3Zsq2@JV+Cq@V*vSvlw#3Y0Ch5jRpkWOTh5{T$Ux^L|=w-q@1#PBQ!RgP(li{TA zH{D8BNWIYK_k?d8p0O8q%-?PUBGh&j0}?YJ^gd&=y zfovb-91@k$f!1&>`D7D!JtR2_T?kM z;Fxkiv@*nuo#A!Uj|#&U*)M>nYP7>XDw5hUwe6;fIc)}S8@gvFVi9*X^mh5%vEo$r79o$X}pPQBprg(t+n;UEO*S8@_}1Y@oFmvo@ZJ zvTO=e)<}0uLBCsk^@QWCVZIiAYYHTx)>6YoiHJTfG?Ek zHH{qZ7JaTml&Et9WM5$r^vs^e?iF-SGi4QttDlRq>me;e^8`JMP~bGatM_6;k_6lz zInA+L8FE?cVa8L^s#d%`zLeD12n(mdN;w~S&})G5{Is-%@F?vZFDqw!GGZrHfg3QL z?f6(jl!mMU4Lm<7<4+!&3ZPuj(M9lve9zB55@Uyz70lixFJB&Y=t)I6o6#fdhtm1va1guvOYMi@(2vNbCp|h^}{NXF5`Dpu~-5gcXTq=A-lt zC)&wvXFY=FbYgVl;o8ZL8M*<0KeSTu2Ix5S3xr2>Z%VV{B9j2kiV>Ldfryosq8c`a zJ(q116U%tkdkWssa3=JsA~qj4PPX6No=UpR?90C6ChG&DhQ}~oj$0vl;EN^<+ZLXK4|_w_2z)pbZ%~u*v-!K`yPX=I0NE@ca*7aw|vS@UVXW0 zsa+{NgaO<5i6wN=^G-D%WHV>I)Tyek=D#f+c{#Q8LA3le5VmVDyZOTrFLJEw4S%H@ zzV#0`Esue+7<^RMZucT{HDdi2D5O59WR{%smEKxu)Au&q)VbFypB$9H(mF=x_dG7^*IV+d_>>D|W<}Zmo}>I0&n>H;l)xbGEd$g!Sdz z8J-+@YLvxYli7Y3C8?4dm-}9YscTJu@zq4>wjW@RM>yEM>A7$1Cp_+BldmD$z1tJMGOefRMK0IvDN;QccmOu)SY2{mIz%4~PE z1RA)KV4bztsK0xA|G~DI@v_VQN!yy+{{$9<(Qe=%HYL z1e!ks9DKg>3$!5l>eXb5k8?g?)-!jIxGKst*i;k!0Bo!56;~Kgg^T-BUFPKk4VqK{ zeHSAmBMWZuJ?KYi;jkjl!@~M95lgy?06Pu^0P+Ps^I-)5OHyZ%)zq3F&MyXCIssU# z8=*ZmvIeaQ?(+WfgOQ zJ7x?RToDr9U-?gIz`dUDhN0^E8bv6z?pXuu?~2v$qa*L=ETwJ)n5;9boVfSD2KXB6 zo?48K&FA?&*gPrx1#qX)7yg2WaL6{DJ=e2lns3UcXx;K=dw!zVUg;G2ZvR*jCe( ztQ(CB5KIO;nU#-+i>p z)1bn@PR_7`MiE{6h94ab{?PJ#*_NT#6XXTQkeNn_cPS-31mw@v_ z>^$9>#s0T8OY~{vQOq}E_p|K2>mS^$i?u-Z-9tmEr71Yk{pAUmW=m)$$P(H$(UFXi zX~kPnm8}v$0bgeh&pKs0EB!u`xgkR_~;ji3Vk#C_`VVB zDyro|3t#iBqu1`>Ibt!fsAS6u2vY-O4cUkoAFYYsP@P^cw~V6CGjr6y0|G?NVd8y` zc)jP2n<-~U<*)293V<|rt&Sf6$r?z7dDfzC2_0Z|SIc3e*{=+T>sR*Oet{-+pd6aZ zLOf5Opfr}tB{cqbX(JvjL>f&^)mzckF+4_BVS@Y-hY zx{}^jjXaB@R|dzh`pe*tb@e}qvCJ%Jt9$MeA}W8WtD)SJb~iTtlvHo{r?Tf=?8a=A z9(`ZIaK~z<(YEGd^xRGIL1?he_Rx}uIWmt1#o&o^r}wAar4+j3NnvO*quK#NZ1 z!)Gbi6SXj_h2JR%T|fbKtl-1?!k3q-dKNe*ISA!We=Z?Jx2PNF{Zgst)YR-$zVxw1 zY565)enx%oPGe0d-W7XGf#%~HxFiCtLEuElMc8oLs%Fg}&X5$~46W&2L*NAO%Q_?6os8(jeo;_#GetGX{vi7kqX!h+M8Z7Sc}HWzBe^%N{ZoHZ^aJUXk!8uLvqZ#Zm!ueJVW_PMl=1t8FYy zF^ScX`*Ey!WD&r}i~k!{^sm&@|L}LrzIMFXh<5(fV}|dTZx3P8t|yhsWn4bOue11* zdji(P-x+^+*L0x}4R~`4pS1oTq#XV^B>`Y=sPf{CJMb^8hhV1fGxH^AZBOVe0ct*2 zJpbzmVctNA)-L=_84%FC{WcIk`>!?g|8VJlY4rc@b8jKU<@|h(KF_TJRoFxGS=<8o zJ$q=|_{GErq}i^zl(Yt1M*qo+DFcA-3{AL(0h*(_(u$C6QW5lwfb3`uPkBT+QI2^t zP$bewt0=%#KIO%aH^TFZ6qrP>^KMD%g6szCGvV8lS$HFxkyCinU5+>l8SMes;$?5X zU)$gf#lb5H#WmQJAS!G?1TIw?0{6gdBzzJWTZAAg)X{VZAm^w{x(7b}wjIog=B^}x zjyUN50^t~=xrj4cwXCN)c3xJ6g6E$ZIrN9Q*lD6rle{ba=Y`rP1}Nd>U!V&cytR(g zvGphu7)o{7&YtSW9XF;eIe`lZmD_s2V zg0}xZ-+#aWr7(x}dPjk3d;@r?-?n%zYMM;jn7DR?RO+up^@oMW>}fu);u;xh1V7%h z`Cs9~@vQ8vL|q}wuS0V%8fM{!mmA@Qw!4;Mp8`U%-@>%29db>b1AUtcFtcNT;lu_I z^g#8|HsQ%zh05&CN;Qvmwz}_pT%#|&TUpr4rp$3&)0{yi8mj3^;1dg06xP5j-H@#IJRtv0qRe$7^_Oh5??8@O^bJ1XDQ7;)2! zj+O-DO5)X?&ijGU{cLdWE#>1IB3Nz__VMh3b@7sUTm!EquuGs0HqaA_`d^@qQj7?e zUxclsO2F##Z+|Sk7(hQT)W}@d)MVVWq@x5r8?tz?xKC_6!uXBsh7tidQD{}GrtWPr z&D)-yS3Hft3|>c+;ul#s3nb&M-TLY|8;@;kc)(I0GuW8Qs=n%6h3(IgR~%)f#*S5N z6z_pEWYlbMFNqxwhdm8sbT9O5DjA3}F_>Rn*1w@!X$(^(DPgzDXM05tijOD}D=nJ) zHmc$6$oOH>=T8MKykQM>*A(p9JTA_gtlKUySZRm3 zTLkNVyrlt=&q^uH%w$_7`Yr@;6eULy@()nLvr8Oo;FS zuCCaWNYBgiVq^TLfh74sax~V(lKiXQ6-*T2eK3Cq>p0^d#iw26cX;UJD-9bO_ z((aYfCq_+VnYPW}Y8S3&$DM%DXc_gluUM}rI5o`xg=C}8k`2b00xNQD4KhF+X11$9 zf9Tg(KnXU23(NX5c+SZD8rK1O2snCCCK1+~k*XvgSeYY>SbpGaeSWvo>~o8Dy&a}( z_IV7XsOIQx=iah6EvNyjOakOk3-{z14b4J}kH@_vsz$^h7h4^fvi?MWe#zTAA@aCh5x{m7j6R|J2zGv4@wb8T z@?vW$7g>BYSmJJcapl|vmK7*RC;bmw&b1@NUHI3UV}+`|#rlN=?sRziUjmweJ9jji zY9ia>v5Iy)uy4R@ejgUF(!USB1nf2;+uzrmO7VoaSau`P^pAZ5&gzb(c`HEJ^0%>P ze&7`6#NuoIIen09gyczKDjTrfej=b9ZX6zx5`rxo;?LI`z{X)sJbjqY$isa}uhXey z;4d@u$GU~lb{FGYpuE%#psqoN=D6sOBLilo9#-`G)E@s$T5|C6;{GNuD(p%UWS=f^ z{_0!4Loli+JotyS_=6Q$o_F7qXYPw_=I$1XDFIGP<8S9yz)Sh(mJ12JWr9ln zdDOq9by=Q{fEADmn>egaSAzMm5WTB1@*h92M^y$(&r`@tKHXwtB+&7V0$Fsgd~ip8 zYNxxYdKR`HJdpfH;~OfV@y&4z(D(+Q^XSP(e^uD}u&>?d|IU4^*HKkJDRQyr_~N$F z{GDin0T!XG{D@U3{D}uK#-9SZGz}==gRLAQFTF&|yzN+P|LO#^VogG`wyu?B2_sM4KWTWwoOw-`nmt&C5B$`a@yhg~oH zyEw>--4ap44;2esqqk%$o1kSQOUqwVUbtB3`ySxpJ}L2+lyy4@Xe`x3g~qpkfCY`MFp1pv0~={RqFl%%gL z1}|&Mb&ma2EUh0EAhKN<2%2jUkWTBU#E348%2B!Oi;b&}=Tub(zo-wuR;Fd&$JsS0 znC>#iH8WLnmJMal;GuCl2FH7yS4;s^GKll{br7OXUP-<{qfbN4a%E3eQ3<-Dzd#@l zi(Z;i&oUdQ`T2YHWTpZAMflA|TsR*`+ZjC6x-T=lqEkO9<4rt&AFI+&w>vS_&;}pk z?78%)p5mR_nURQP6Qq5S!Ay86S_<@I&tKm3?^_`Ma=l4XsL8hYJ==S=lX!J(%D9P z#W_Sq4RJ3jY@D~76Prh@B(PNmSi}g~iW;fD{)^o&E90x%CFFGgiU;Lsqa`{yZ3Fxt zR475;o8dP##(TQZM#c-e%UT?%4jh`cQDQ~G4~e$gsp^yF6l;tP3VaW8!w34L5}wr` zhAvVg#c~AdeeX%7#|A>~x8T&dFoK;;MJchqTLZCbZg`t2;5Dj7FK$2k{FNyjgz!om zpGFJkqw;!rPt)0(1Hgm2FO?VyJ!DVIfdd#tgAwfSct7Oy(5bMUS56;SeA^gaJQ!9} zUC|GG#g}~@j6m587cJ!V{d~29$NNQ2*8cw zFLA92cMo!nQnI_+r+)CJ&|wUcvg&lYJQWk_Lj|l#RV0l+BdPK}wgO$W+-2GlaA?0k z6ds)2i#+jkqUECeS)fPuh9N(^PFQPCmV(mrJ=>*eYO00(l zqb}D_jf5u?`$;QP>W-1|!Z8K!vJpknctB_6zYB`{Gc8=|GrhA0?Vp`D)jY<(KV!l^ z>2(@IvmkiKr7LrKOlNArq8FUVij@e^*B{crCYcTFi+FR?2P}DWy?p2EDVkmZRJ#;~ zo!*@gHN7kKp-`**jvF0L(Zh%x>l`u*1(YY;k<=FAI41I`p?T)%AX$IV#5>#bFdv>g zRN)kl!|UERdEv0UT8bbPg|Ubh0R=&q0FJSVva}JUg363!wjhcvZn1gyJF%%kmoY=J zo|;W;A2KW0_uddCRu}X?J;T#Bk{Z#Wg%68t8g}tMvE87LcevS>z9nF(8; z1#fu>DDoB9-0S!k2&HpL23-?e5kS*sBPx~i{DoQ}@GEmN8;b3QT2swig3r%&QW@7a z%bnAvyB5HvQ~aVlQEJ8!hBLw(ZOBI^APL&l0(Ssx#0Q6B+brI0%JSyf*MS#mM8cAl zbQw2UEP`}UMV&^_4}L>ub3;mVdshwD(QCae5?Axi;}_GafKVD)bve*Hp4hL1Pm2Cz zhsCOt@LjxOcVlCWvE6meWL`2E;}@9==ZxTb>CsR15IbWtsHXcMwC>p$%2~H&LWFm;`i9*0MM(= zXi0rFc+8ET9y-Iuc2cFg?-S1xJRf`v+TS*w&?30Aq8TcwA0a9Tb%&N3e`TZCt7{P~ z#P{rzJk~%QcKh;l8-3mpOAD!%{#>A7YDRZEE~X`7&pL+$a@)gbq}RyH(9C3Ut}os* zplnl6Q1<;f)%R|Mqe955L|5p|10@pSVn!#Fex9}*RYh5TOLfxdtfK18+*kJZaV=Ob zr*VKNh&h0#$mtL3K)i%@wJ}G427lB^Ig)P!poDRgAxh8g`EReBv!9yuRU(QMr$mjT z6dW{-BUI;{*=c&Uz%QbCnt_KchS-DQ2_ge_%g_ucN_QpdI@qCh-Og?>z8W`c!@ zq`K^;R=kK%x7;rfZ0yf1mjqD!5V+bFH9iZQkB1V3mX$s3c!)F4C{L! zTmKrM_h@P--Fm9QUS5jw7p{JZpYv82rT-LON&FLK)Va5J;P{5kebMO1nFnXjn+O1t zNgPu6h>x|ZeQwBgFW$YW@{Pu_93BPCpL>x3nNVv9<7mpym3I|bO!9knfOrK9nc>Y?`YpovgewM$qWPWMr^KJ=8Pl%FA<+r?q8Ird=ZNNEn5PR@wB9dqQ zdOeHhee>TOHkhP3MV_oi*V9Bu6BMFqHf|g`x=OhP6LHlx3t|grDUoTo0vd!o56wGz zB4f6s1DiN)vJCiePt(VgoOaD3tA5lYwEL``eT;qlO<{8&r{&ADnw0tHo8@*uT=A_e z@fOSG)t|EtAT4|Qv)`V$=F`jjgFjz_`czNPOMu5h0)lsPOBFMXq=B4LK;WkCA!tz> zxG(SaSu#yB1szHH!G=)#6N!-`CLZAQR)Cuz#7i@*KHQb3T-h+h5IZnwy5Qz>i{O4L zNQfWUCW~rl9m_Z8|z}OGFEg@2Pr_-Z(!mr>8{(oJhE9oe^iA zxv$Y2&{^cy_|l5MKtaEi+ldw)6Wik;rLpppE%q#f9MjL|w`iP)J>Q)6?|^TJXeetn zwk7LM$E&Uh3HAFa1bSmdW$+P7xed*YC>Yv}j64N&ez*3)qbC zp?k5?12dj$Q&{@SUO981Za7j|{?caYhKs4NR^SvfF@tI*};_%Gmy|$K&a^$c#&y*kT_|lFG7N#PI`n7O$+0#?p@W z^i1n((*mD&caECgl@#C1$(H})m+JI#4bo>J(9nt%*xL8ion))tVBPJW59Yln6J~z_Gj-;q8;*=WgHMy{P4ir ztoG_^HKk+=f}hD(uIJC5nuyM2*4DliT+7jZm- zE8eEQv91F_Cq_@>3eI`xCJIxuk4XMoQeN~6AzLUa5Dt~N`Bk%gB~awyd8BU!RfXSo0(kL7 zqf}`|2yDKhWF1>U7fX92XL*+-_lRy0FR$KFKhoEYU&?sHNQKDPCvI9~j}q^ykf+_J zOhRW6IgJhRh?2u3oC~XzZJ_)^^2av1fPL2AWp)U+4WX&!kD9GWcb~8Rbp*LYAifOMerMIGN#nK0P zBBx!4Yr(|81wIi<%>v8g-!wPz;Hlz?o?P2(xhsoqz9JG$)+$tei+y1=R(lnRi zmiIF?j_`fDmYM|azTn|ac)>JCW-EgE?SjFGp*dDz%e1+FeSa6v`+|nqXr}flgsXjz zPqENlAgRlDm0oI_g&^jqgxw{9wMCqXh4RUFolj$R?yE%`5eDxcWzS4JY<9B;Tsb;T zG7fT)>Uh?ltVkk+2taZQBF%hH7ZUDeoiV?^fEyUxOm2uT8Lb~$d}xT1F57oK^-KXu zhZ?AzDe^fsmTbfMDjc3S)Xp&E@2Ve#H~60jlpgfP!s>{`g&8Vh>~U=6dAC~aeKDc= zak5q{@kb(O?)CJK>`Q+y*LUK^e$w|dQJV496UljQCLWU1g6^T>U2!6<3@&IYIIYJA zQ^ojQ!U#`-3Ob2#;x>sx1ynW#HIy&xRz>V=06?RtRhDj=SIz>?IW9yfdbz7DuC@f; zjy>+K!OT~TOi-`6Riw7o#4C;=JE74-_2CSaEPl-!a`MbFBQKt_jI1q^H<~L)_dWMo zbbMOSq}Pg>$u;B+>b#?HUttLjLG1?Ta8QRJXz-XNi*lIt>jL+}+mAVI&7R5D6=rql z{lMX3aW-gHnCH}Uba=T#9Sg&jDbCT`vm=oX?aW8=jnTXvpCj|tL-vL>ygzNS0bvy7 zm4Q~t=W3taUG5@WJs?eSjRcK`8Pho>m8;=Ezxd~QPSrUm!%}3DM+(L8%HHSIZIk7>TBacivIO>Nw+nZPk^{v=k*cs ziw-`Q!tki@MxnoMGgI4_a zGh>^;m=hGx?drIFB=?N^`;aIfQe8KFB=OBIi77HIX8nb0DfR|Yq~rMu#k<{; zm@=N_R6tx9$vf7f1jwXMiifl!AA10=hC)pG(4&twFvOuZ?BbDCAx{;gsVe#Ed^@c_OknRBTHBnfRc>V2X6SE@QIYMnx3cHznwbe zb{a;QbswWpQ`ONA`yeFaNX?PD?dXK=9f>jn|MlheJeb&ko>@-_Fa)qMIzBs!la z3*F{3C!Dk$a9@JpYuN4G5`QCtZjAF>a@6ez!PlLM?Un(Yf89o_K3GdInmf8J`0%a} zIG2$SS@C5QY>tq3q?m3e(z_Gr>MeKMZ<0FHDHwTM)>WS%lnA1-RsH_zF!wI9%Vqid zy;)-`|3*e~o)vaOeM){cm45>oLsNqfX1aeB^LU5-KlPps@V*(vYW zRs>`JtGpS?X+G}xtMo%1+YP8}C71RU=}Npg(2i`)jbLF*HePGu_wVm07nZs8cF%Hq z?o+952Q^NqPfTvF=;4^hXEX}Uj6Eux?UaXj<^Zs{H4dEJOFOFrfIaWc23~s@MU{*^ z*CR*Y?|V|&HyQB|rf?(r$BfAXG9ca2IDVW1s!lQV7XtA7wXE-MBF-Hmc zqD6XZSs{ZMO&DR5U}BASfgIcz3L+|m&MwFV26LRPVw`WMypANxY~dx|l)B6M-~3!h zS18I|DPL2#72f73pFD-SLp+X|=Ko_X37m^tc3abkUOx?CvN1y`2QXs=vNu@bCNOzF z8w}6-Mm-bjxVdi3W|jC_Tix*0fh@rGH<7_cgD6AuK(_*6mz#rMIj7ny3c9n-loOZy zPjWx{6BAE)#RMwVs7dm~HdYJ;K5r}`>GPyefPzfl_fa}7HfG}PCwUZf`8M>G>1$KA zg^y66eJy=?)jT$m;oXiudg}{SaC;s1NcV0vD#27xgSVBx3(fOsIql+PtT*F*_)R#V z;t^*0B;qMWG}t8E>+Hlee+;F?@L zD{k~v2?uk_kD(p*6W{$5NS(J;eLqkoZf*F4F-!`?a@aMkgi+r_E>A`^-1+2qXo5dL zZG0#muMyealTT|TF84S?;5NA`a+a-dTvC`qV@kR#X(I~~dV#~dz0jo0U?v~J+ar+% zsKY;#lb)H14Q1VQz6fS!=b*x8u&8rG#@gIZLFR3b{2dBEaS447#rK9kJ`>MuVQah8 zYzl{GFilRWHPue4OKR_A{Rn$M&l2hzA`mN)2e{?K6X1pDXq59jcI% zpLBExN21LzbD&SOlTUwu|3Li;DCh8uKX*lf;g+h>)ZlD@vXEKR>2e{EbIKyTLPQ5W zv(hsWHP?kNvZX$=G=$iG-pjo8;|bR3o;Vut%c35dsomz=DoemjG|+osH)!qtxxL)) zPk@uF>Gmdh`>rU^W!67NNqyS&Ck!=+e#<5R&}wwDCKjOV)n~`5MQNSJbh@FmPwy*J zJ1vCg#^2pAS1s5{QO219>J@3gRg}u}bvcFFM?NmCR-YPAE=>4bK-151m#-`Zuj$Uk zTS9Xzt!bXs9JP_pa!OsvlsGzu+NSVq4(_O_dN^oOT|<1$ac$9eje%5(6l_F&HyN## ztxOsFGCDd%Crk0D9|$k^${gA;1jGv6%sU}#mgQmmdSYlyO$1t%fbVl4%EG?0`@Qb_ zj238wS(^^)2DJCow3s|F@R-h9MMZ67hv-(q?=C&>mb|KmtWG{10@+0q+T@V=mPXiT z*W;XXm3d!Pzfsr_9eYUpKu2Dk{(afclf>iPn_CHVn^#izT|?RO9yw9XJcux_XUKo8 zxy;3f{wylFWdAPtWb*;5<&JE1BMz6)oX8?0to^VvxS4>DfiE5(m|xoWH)zQ{w9T+pLWT86*|OlqJ>3 z$zA@I08%rOZuar%^FB`qN$+BQ#(ly{Vn9w~&{pk_-ix6%27cw$+2>Nh3g5%Mq7P_) zOtGIVXST7m5s9&Hr}E}4Z(PT0gfc0jp{ZjfxnZKNjxO)1h^#Tc|FPeW73EdHxK;|$ z%^2T?`Ic!e3wC+OOqxf{i_L%IAyHA8?K*H=qtBQWP{S_UOg9&iF^|0L^v|U*yn&fI zFTR(L08j_$C`^DpyK{mTSk~@3Eio}NaIY>a*w6X`t`I6hGw7-nFb@@_tc}*}{ar_X z_}olpE;jtg?DAz_u`Gp}-VcTH8%KPe_cm_2QilrKQk7f$&@ks-*_yj_?hz+H(I++C zLO)b6<*sYWjRj#Kx86BhNxbl;*u1vUFef4IHg=SwP( z2MLB%ifbn`{K7#E2{_Uuuav#t6?1IWF(VgV!1!!)OyulcK{1iBR^trg`UT>t+q`-I z*wDe4wBwEK{YQz_>Jv{~UOY_y_*j@X5{gLfI1yf2p4pE=X9+>27d;LoVwgZ((V!j4 zPFi423t{+9MFp6{q<-3q#!G#%6oZ^k{{u09;Mg!OT2%VM(kfuIQy!ww+;l03*}pa% zMuNNiYco^Qa{1pCQ{mr@hZawyNd0e^g~^Fe#Cqnrw*?!!c^)ZLDb1t)&a}y-T3?22 z`wCxOVR8FEG8ZmeuF~V5WLzs9X)uzB4kOT2Z>71uYh?=O)4FaLy8rBL+p>HPM&Igv zMyS+#4dQc-@bt>dTgC_)bU{XuRU5;ZcT4TgL~th18DXQj(weufZHV*1WFa+g>hWO2 z6m*5n8Q*n&;yXFr7}-sK%Wz|7xWiyvWb@0Ysb(FpqO-vik=yh@TvgD6Iga!EA+GAW zLOMI7>=Arx@YrDyd+feVOa*mYS(qIG;pRVy&!(5hfAU>~yH|@2!xt(mzhxU-TwNM% z)#;~9Alqm0F%k@NbyB=~9rLF0m*5vaz?gtk?$JGWHw{QH8>;&j?Z+&yWlGfS%Nqq) z#>O>rlq7UQWQfIFf4Oz3LT-Y+WQuj(MiGQzm1ccCvLs%9GXkBlgg@&kbXOo9>VKTD zHks(QD};vCT z6T&J@d(LX~w34Vo(}j{AaIxvjSr+vGArf;|!DE-ueeaNQ>|pGm!quaD)BYJJsmtX! zoH*XM%`pR84HOz^St45~A&IdTT#FxOYa6#+sv3j8mKJxXm!rs{yH}`YM>Tw&9KL`a z1JuwA^OD*mawf-LtwH;2gJG*luJ#c_a7AC_YllqLo<8Hm)dMr$fe-V9wffUW1J|63VP}=fiqs`l6=y3#uLm^2 zmH>an+QJ>nqSgDM0@01fpZCdx_m}q?l}b_;b3ay#?lMdZE!)V>+PjHFy78$JIRQk< zoI0V(iWQg%jj#RmMtg0zYo^u! z)y=p!NuTm;C)`TC`5SCo^(tBya#YjNWmzkXCPclYD0o^xC`CU7^>K0(U){FL;y_Oi zlM&1RsPO*-NA6b|A0hnGZL?l*zQzSQbv;vHTKp>>&bbMxl1P4HEr%kvBkggF&y{DO z6o=T?c8ojAgKwBvBw;GB*4*qwLb@`Dswcnl$1aivwSzn}N9!z#?R?p68e+CH-Vjrq zwdE8Z+z{h}VpngJEXBsZVqxBJF5MR2^x%6gj%|RMkiUL3NbM+Y&+-pdQF@?F1 zs6S*t!y%`fet#6p)ng8f`vTz4%kaE$MrR>Xh25z+)su*PWG-Ggyf+U62^jIUrNO(i z)z4(G&p6J{If@Z+Tp>57sV8sR;TTw9Utiqv$w)RB?Yi4)SfQvrUx^i4G(+9ra5=n< z_{{Q@Wzkb)Wl8d`1a!iJCmPNu1Q9d3lv+RTNCU z51805n0?OlD|5Cp=-$env`g9q_m$h3X3%PB8!GN@f@b7=BNs zE?SQ3_#>%d1jcHsc({y=y8)#AF1kJQ!0wy}`T|RbLgcr4g&oM53?4x%zj|_jgWUlQ zN9w)luFwsKu?O}6yLw*}cVZ3iXZ2+t=gA3aDULbcTj5=f<0lnaG(a=u;A)>8?Qb&;xYJYfAiF|Jc;rcLPyrDJoz?D@*AqjEzK!U$t&XgGhB@~d)!4eQ0{ zxNOTdg6T(YR{#;n79TQiJt~9D2R+22hM5?7_wuR(nhmv8SudJ*#>wuFSj}Znon3u{ zidDQ-!>rF&2}BT_?$uTu+ngi>=ew72{*lLZ8b=wsG?k2w`VWEFLEo^dDXaqy#oC4+ zf_A(1Z5R{I2q>XG%+pLZ8T>kPflK`!LNgsbpRps0K0{JoUg>cGxiS_N!zf{b?H3jW zkH#&sEbS=mI-!vDsH?l=gZ z>$@)q&N*97QMU9^6%y;s*$rO)_0=7)9HWZU>9KxGL>zGa!MB#Yk)%mbI%L$B?wXIb z)ozzE4-}=*(`>o}4Pd16#I=YWdoF{9FUptrd$UOa-OXGRbPGK(kA1Byc!^?b66mZ~ zHsVo+DX8PU=xfi2e%`+6o*4$BEVk6H%Z%`%MRul8i@G0?haLQC4#8R(ys#oBPG}pW zP?57_iEu8`H8^-Cow;0K!mTYr zT*{%i>dZ)>SLlP#9^LxD;X(6d$w7L1x3n{OnKKn)rM?F4Flvxn!K}7sH&r0Ik;|Nc zYL~X z-lsThmqHmfmRf1wBm8oaw)ONJM?4Cr8(*klD>KBkp8HzqAmw{m+k3C^bsJv2Zja}L zFt;`#h(xf-1l6R5gjl`BiLKZ82rImOmH$E%@8zG~OOfMTwp<*m+D2I)aZv~%#^g#o zB5uio4tT9pyPvPSn7q&EGP`AtM2&u1kyK`Pp^#?HdfrHckXPUn(LM5EapXPJU#)H@WS*5RKK}2Fb(;H`cGsgfbjA z(qsnCCu`EDzu|wq_TzbzSkyAmcCwvkk+<|2hhO}paW^rX7V+P`F8=@V{rls={jc)$ zWdRA^)Yin&3216)^S5YcWQ7FJ#!bpX`nMz?z^v+SZ_2D_X#VFP(A3t6lnr`QnOWJ? z(asrYZ0ZOF(Nr+9GBtLBmZWT;fUF#((CZJ--zpm~DfIf!Dmx1)^nzA}gqX$LoFr77 z44q7&k4mU;k#hY7lThI${rdnELfp>w4_7Uko`R7OEpC2hbQYaBQQxi+WFLrJ^&_`KF zxuIw|SUB}anMI()p>OO+%Et4Tqy*5;*&f=OzbyG%VOC*Q1sd8q+W%pVu{*Pf3bUxG zi>0xtvcwlCVpT&UM<|Gj6VTb%=^yqvl5z?O{hwI<2lKyJEpBP;WC~;!w}x^=)YRC{ z#FSaq)Yja|f|QGk_s>)R>L|CgI`t*_rBA5d4copy`}A^4Z`xdfehlWJVHL*bZoa_d-`}J=Pv(CJo(`nY_7vQ@O5=50h+Iv&GKn|iBs9qQG)1xq8ZpBAoL*o!BvK^p*8<6X5SuIS#BQyKzN0jw7?437vu zD$?!&A~H(OP~3&e`h*xC0nC7TD>ICT)7!oR>dFsUJ!cS9;g`>T)BeQUoA>m2(ygVu`6Q%+5pVjAun<*ryn^Ks_no=LG0L+= zWL<&5_3T8wStprEKE+|0^^a)eMP5|9-=FDW$+(6Ex;~|DX{g4rWhRM6C!>Q3DJik*etJBC#phTvbz-8YC`Vd z;=$9icS5}NeNWu(d7AhCbCvQ(p#L?_|H{vQC=F&6XCtRSD(0`QVAilSfev>bPBvyq zQ%iFTCsGbxHmDq0+W}SV4UJ9z59wn5V(H|lXbOayPVMb%|L7$iW+|w+0`2Yoh!3fm zp|zta^Z&I(vGcHUas2l(b-d!Lv((@G>del5jCU#a>oVg2@D$d1IWkg?^~BHNv{l37 z1I5Des^ckKTQyRz-vVm2E3a1j*u?|6W+KCgWRB}99_`Cj1@{Z=tN;0*Uwe}8^X&;^ z*yyK5>+(?Q_z&H{zmR9zjc;hf5egBHlU%2LAJ4AGkRE+JM0$C?1TvB;X?C}V@tn;V zEB%4>bHA?0#P;!#$(m#(lQbsP-5e7J3?Z1jOQrXa$$mNbNck7zt@z6$WQFI=BP6NE zZf!9Y7Qd<}bM=S8Q{&&;zg1Ql*%WneyT)?u7T%+sZ|F{BqKmxwOW;K#LKQn4q0RJH z;%K)e;&lnh`+rbo`##nBZFX`aKohJzkCCi7+{W4s6aMp1`|y|@Ew036_4L}C{+bPHptvs~`3wEZP3T>x_f0k`@?MzlBkVh`*MDH!s5z)oMGafO z_DqGH+vjiL0>()APr>i*brs2sg*{v`?;UV`lv_I0~y{X=U5oa)Nb z_qXBeJ3c-lclt){BtBHF9u9wjz2;V9aG^a(S=8PxbPXkaH4}mG2m5-<^`@4uulF$= zOxvIOtF@B?gZ?$KV>sr^zb}33BHRi^Cfr++g!SkC@0*hX9Kn-+aqH&&{|f(5AO5yx z80BBx0QbMu4gUpAUs|sZqI)3_trAaid#>VNLrJ&Sr*S%iagU8G{^@Y%FLTZ`Qo81& zX&oqz_DbNNyTnwP44Q|3{i@N(-P9dmiwJJ@Nce}l^N&3~q3$=oP?07F`UAu`GMHj% z9r0@7{8e@9Qj5bDKpGWnfB4~tlUg&6A{Ng-qb)*-DJ!IFBGqF=84v}T$x{B<^A(6z zo-&3Jl@$9EJw~%9w`M`vpenwPg*YMy{e5?ZzQZ3Bub5dhs@BM|ohTJV2*eks$%!%B zIMcvATRl(1S|t-m!9!uzLq&5x#AOC_x8#fCB;&sn<+wOjVlefvGbYV^@&Jeb?J75a z_wXmw8SN_V(XDB?oYwcrA7?#};LKk2_Zv2F>7y#8JIWh+@qBghO!`Z95};HDDh)Had<-Qn z@D%{*FG15?ifd!~<)+z~#4&GBXdpu>BUd1=M;(HSp|c0i_o6(8x{2!GDsdS+wwkFv z<2IkN{}}hWP@-A z=MB+M7P^jwZq0crjGewKf5yIF(+zj@Q~!Q=i`J;P7V1Az^$0d@7sC!3Fc*NV)&4VB zQ`@1^@dx)Ss{d33|78UJzaGdL0ir!1F)8!lGLZ>aUD8LTXD`z_aVI8aw!q(UBE=P&C+DiP-e~s_t?n_HZKr z^Fvp|Mja(24+ihi%8x1F^=gza7d_7fFu4GewWGJub7*{YW{zQbY;QM)E!+lZ5@^3V zhB}kfRhh(V;!w}-3@FAo+^Wf;;u)hJA>T-Im2^nZAPV)ypc#DKBEtuV4cTMEtMCXA zW)K=95Oa@W2Cusm{Wu?y<9_A)%BY<=yE4~9qkOr!yn!iY<;a?>hQeo;5sUrUi9YOo z$la#F9)q3QJBc};k`0I3ZuFljBO*wt+>Uy(yUZFxx@i}YAqtyKi*VFtd7BF*q(eGa z>JQ^}8#4slrK5VO9iQ@i`oOpm4N82^YtmHTMzy642{1-b7AzKxR>xCUj#7nKM>82H zv57ODGp>1Gmi4l?=ppx2N~9TjrW|dQP69k$b~;dzIav8}d*A9+)cvri|4IZrkah#7 zQ8(L@4vgW)x{U19c_qp|irTVLOvb1pl+a^02b4^=&q z#MIUhomxE9+uQu`8gPhUlGeT*jy-k+9`e{Lj%O|knzA7Zmm0nQk%TmM&ik4pM<2A0ylcFh zPaSg9>ZXalB~c-W`IiDX*n?aH~5jI34O=Lg%Y!){yp6s-!VP2GZJK@ zc7Dw43To0glGV@M^|~dF784c@QSs!H{32x*zePj?$L4=^rt?O5aJOxsix-Ceq*i3X zo!`oP+_A{fCu<&IpG&Y-EeS*IeVqLjVI%K+Rgl9D*F$d<|DLaT&dlFRI!qm&EIOI1!I@ZymkzQ<*sC7Qt5Y7@6NzH zh_a+zsca^%e?*xse}OiwC%{KYVRV;nx+F&V!b^_a^BEW8l>w|#`v*D=0_mjNXxk}3 z*iD`2kAcR!IMKavTTge6(dv%so-V2pwD5>Bs**^~XR5K-Lj6Wr{EW`}L&W*nWnhfS za&=7q&%teU2Q0d{z7uE=G2QxZS+Bm*sVHWb`e8#Il=8@*m*TrlB|VC`V4qD#gX^?? zN?U92_crYDqNLCzl7tf03fS3MSEHFDkE;4A*2U1Ng2cfS+ZNUGPo@ogZ(Iu2DviF5 zpE_&f;F0wV=8xdjR@g-FbYdCQ#D+s~4H!N}Delx_v||;zpa=zuR6$0WrB0fMRaL93 zU6v%ovM^;%xB-nOrh2rA=>CZomgzL`EmMqJUcAO4yLjr10PAi2C3;sGE}H?FDGOozu0WTSkgpsXs^mQT-CYV=j{Oz)^!uRBqTj4#u3rW2(>iU z35E%p_~GiS-1LldyJrBdrNzcWw6=~-P?1o{Lhxw#Z!NF%(Zi|=IO}Vh4+i!X9R1e* zgRG^bAsRWVHD_2k18juaM*ZsQ-rZa)MR7hYr@$4}Rzocr0vB<`EHg(N;G%^Y;uP~_ zkTRH0si~VbOO1J|;Jk{%f1;3`h337EHP^zEOMyar?c-w%8=J%8z8+UL5X|(!pfhes zV|s9cGrIx(p$02zP6*BQere^RC~!1-2Ay_CaI3XpiYVBdmgCHiUBM z=z3#k9nHbEOA=n9c!e-M&nIHwx-mpdBtb?Tr^+<@-3)N2weiwn2cL1vL4;1GyoN`K z%DmAyaihtQtDNj|&naCoW01GVBf{2Hd}iu)lXCB{^6-g%i2l2T<)rW@Lus{O!yWVo z5QWB%fv6za!C>8#t@2SFh{*$Ji zExdU5xr41&yZ+A`nq2vsL#lL~ct@+f4sxYh^bU3pX(E%F%P zT~t(mvjP|UeEi6jah~ATNoTjA-p6}?MD$3R%T3w_$^c8Ro!+9)z>9)@bqh>3f#d79 z4jP$&>kp+is6_xhFRfZnmLm`e@Bi9FU~+X^RATZI}Axhv*iQFf0nrbq(4 zO#8)=Rb?@HZn6#~ARx*uo(Ekgd&7-0&04LweW%k08sQj*8@6-DK6{GqzEvMA5n6$S zMZ_oQ5b=2@>QgTI0I^fF4}H?&24qrl^_Tkh90Yiodi+AHV(MgB^4LSw6dcxzp1t&D5cOWj+HiPs;`b#*Xa@nPt_I*aYyROjIC$X zIeazgZgK`ZirsX}uI8METwxY4omqUh^=nd>@0`jBrA;O=T`%>2gQS%%Vp-kGD#4cLT*ov z4zGyy6*ws@M>27Zq*e$0r1eugEt~t71j+n0p~qJBlkY?B%qCNDF|nNU(bHJ+kC$CpDr4O|dUZY~^?TOMN&0lv zLFckt+t9Sm*gz|sa;zh(Unv8w*$@vp12wY!Th%!moRX_8(PC`5I{29>UAhwV|?a;y-7B3C1^8XQ0^F+KFNYL*I&D&&S>RB-V#KVGeg++ zhDnb~@NNjUM~y$2QJg}lg5;5(MAK98J7(f!9B#Z7^#G=W-c9kyMWbEBb=v#L@71D! ztmDr`e4*4wVULD&KKs=_3%Bq;I@YDuDf3lrhDxxPX@XLU+DQ&Ln(|?y_{=je}p=CMW1i|GmWc(ViUoR+bzK^!s{~$((9a1!WgHOz10TlMp>0gg(sd<*&qR-DS{=kEBDjyW|WPA<^$J&;>=$5EF zJkQa3oW%n9r}N>@uV>LGiUe2(Nsy+M-+K7g=$BjdZ1FP>PP`2tQE9br456T!xDqPf zt%hIa`6@!OtNC=cMjY|jv?ImQ(_#A&&4YzAs?nQ*K*O*BfqCs_e=lkt8 zKkdmY_9WAtB8Uo~)hKc~*Yph)PmEF>y}Pn(FU6KM9bSw!##KkcXBO$?SV}-lfbEUj z*in~w0X><%oa=KR;1TE&6-uu=Py?i*+&$}s)OV*@r0en*yaB4#tsOXHJyv*K2Yx?v zjYjc=Y3Z_S*}(cWWe!WHH#94aMSE?b*Wpoj11M8vXDkVUFeVo`&RETa2XZl}CCd5>N0_Zdw@ayS={WLBuFefD0js-6*t9gUc`c z)^ky7mwH#qu~?XBxp=w0m@~Ef@FUM&Jen>!{?UaxDA?ZStb^|ETojqF53^XG%Jq$| z$ut6KO;Y{gin?BS^tm%)47ty$4GElH>hZ)pU%(avk?*{^uqSY3J6lt3ZV3+l`j&3% zzAcsQJFsV_P~CdyhPFG$F`={mI5Xi!55dHrbsWEzPr3> zK|Uc0kX~Z@;xSei#%ibiPS#r2r_r<|l-|QDU3p^X(+1nFeyZq|Oq)D;61Gv!^^flk z@j4TO&a~K_?E>p>e#?A1mdIXjoL_(M{I1}|(dm&De_3r%b=dRb2$haZtGWlF>p z@77;nY`f7>>lU9bm#;|7lF#E|DI%YHXyhviGqZHDx@wc>tGP0xKR%GIWAdCfHyPxr zj-=0A={JjrK~t?uC^9Ik2o0`*aCRu~P14~k%QY$4B;Aw9ecQXXkqRA*^CofCISo-L zv^@P4BXjp6>VL8;D-_P7mOCM< zmM$E{-sM|d<@7PMXBH`nrjVd#j3jH}pj$~doQx#u{yM^lWN*+CF2c+o)UitYiK!rW zZTwO6*UUjb?36z?m#l>oO5Jix2qo>3$pG*Q4WX*{3G8>7li+nQ2L!IYZB zI2WWwpJqo}g_Nz?aYU=n#HJbo*bLhBm~q&;qzpLxX~)Z;pT=$5*WHSm%Vky{dEMg) zCPW{oGmYEidbhff^{UW_;vIR*zVw(loCueNEp8=UIbj+O@6-NJyeI@}oCf0LicbOk4|s8nZ^ zk+d-O_AH^VN~iS-aBYrJYP2f%UufYB~7wX3|Y$r`qOQ42t01|5Fd6`Ttm?BEaXQSIlvhb#;X@Q7_zOvGEp))|XBcxiMY zTRqwK4>umB>nro95%Gj=(q>Uyo(0Gwa&*dDL?(1C1!~#q5W}yuJW*-wUH(hgN zLi-Z{23YVTpIBN6%EUYG+^)!oE-Tj^P|jXpjM{??nPtJ!gjfh8(tE?CZop@O$P$EY zCjL82Pt30Ig`t>TyU#;H7q0V<`uxje)Q>2>lu$MWrlF`YxtrsGQTvW!Gg`E zU*Q48&X1lo-ddT;WkmZu^KW1cAlLje$J1v_*_GH!Ph2kxlmnQ!7~r+#X1Ff*!>3*` zw-xzRK8|{?3f_Hs+fEo=aQ|G24e$9C42_9s>&&6La@V^=x+PkJU@rAO)5cJgn*65@ z=ci|g_*3~(>}Q6UDRH{t6z76Af1S8G_9XXSei!WiG%Sr0t&!>s&7=~Sq6YjGLVJnGaWH}*~R zGRS@6S0H2tyzXJ5+}kL^_mR!i?S4#mz*BOae2E3S@>w<7J$A1}Fn97~WVgGmT|}V- zJQYf!ucwz$u1h_2UFkW;QV+;a@Zl`%r^QH;T%tVvPNL`3NE5-7fjmn2llarH^+u}u8&fmQuq}G*sW)f(((x-Lquhf{qru>5 z#xB9zGQdk=!#lW9Kc5a6%Q_Kd?EB*e=jbMHc*yD8w(C;IWte^m<&N;nf|ckmBs2Uy z;*v1d10+_prJ{@0s{^eF>o7qTTFjpQR_J1(!ow}Qr$B#8q<5#@i75g7J0Ctp@bqy} z{o;ygN0Q^H=y8L}3+}kW3sZINgmpq(PRtuE&;@O^VQR|TA(Yv27sg$4#KE;+mGM!E z1@R*Tw>OzYZ?gkidU5HO<#)+9qj1fr(*0o{+O zuF*TOO7KXjwr)X*oxj%NBK0@@&-8Y35K8v*BjmCxDMx|rN*E3yIGji`1rH?kNi%WI zmOpuyUTOg|jN>yI!h`64pxu z+r}NqQ)k#{$^4$_XFo|8J7?;@v@T73NYH&ILRR1!{;b5?d#1&X2YL{~YX}_UZ#uhJ zA}L?i;T4z@^m$^H0*6vd_iNPt^hS{MWGJrxQz6@y`d+l*4~-pT@JrEHD!gmXobY z66ZbMu)kA{vV5scU&-_-2$aMrzh-t?-dLd2MV^TsP0HVt+EH&Y7-P?XoWo0;S6A+t zPEzsz)`}q6yYVU=nD*$EF7(27(r&N!8JPTJXP>Jw%tZf2#6q^#$I+5R4Bx4U9hmmP zM!_d0nE7aRyq$lEY7|Qd}Q43`^8oc9=$3&VX50W>Y0Yn!j*%m(4p&fO!P(R zC$pe{<)A5wL??Q8yw!1ep^wEvtM~g8KCA=0-=9D`V-Tc^Y3l0M#jEGVTMVgOxwqFU z2{JL@Ip*beD;L_5f!~-~vh~Q$;$9#D@+S4eDGc1r#TCPGFlSz<4~(1nj7domQG8+h zgNd$oZ0wl>23KIp_&BX))hu`4aoXHIyU4HfH%oog%}Ot>F-)4kZkhD8;sF*R?R46u zgEU>613Ri!MWrB{%*LeMK%NkWN-8UohRg2o{d1Rs^k_r^j8U_r_36^)xlc{-?P}yp z+|j{u4cCYZ9+wm(NUN9eMaKs?{>m(3m5<4xPra>5Y*;O=Dx|tLmCJ2TR(1yUvb~M5 zSfjT}{P5)ngqQegqZW(2VS{lNFgpQjaXPzuIQiY`CtQQaAp>L?MO%3lZcs7>%pSFkmRnI93wB1cJBo?te7Da z>GN%-fQ9q28s~uB0}wowf!wq<+)!HTn>2lC!@vnh>ZmG+0U=T?9ld%v{iUyhQ8XjYktxeA@ej z=H2K-Z2yyZ&rwp<-(@DJ(KFG%%t@^zndgPdde?n0)9L`%=iyiYR;_4y(ZMygaM|U- zLb>U-5IB^)-w4zi@|WJ~x4$VzAC0ZiEK?IxQ7B-$O|;k%X`f1dVu4k`=+C5nMA=Ou zQwG#~yHx?>EXYQ=jT?b_-`{3>Fg{*3H?My#(8i2@P{B+qxZcq|bxlu%#DSz;TN31C z<$@Ay&7)La-(2YX_sliH&s-0r$UhWb^eEXT9QDLnKem`;*v8R>ryzR&42I5=07yC{ zj*T0OBm4>Yu+$K}Nk*7gGR<2fOG%x%N?E_U21u;gck^Ho$#s}3Zu-7|%~&*h=FW&= z98I4zh^3`612jGNDG&~pJkIL0c=oyy^xQpPgRPPQ=?^sUAu+PzVP9eFhYg!tROEJ8t*Nv%Dj zA+lt9NG7h{Le__-Y);EsLd}&!nJJ5b{Wf>I>wKW3%M+_Qq0@Y7mnc~xYnwxO5adn4 zYC`L^KGXSrY@(oX*VGIrct%dJCDCrMjKg&9ngRK?55#GscJ(~k5fs(yk?M0GBbT}c z{5r3JHz_Z>b=!q>*Q9eW&O$kJ?<&lYv3%V;o0Xp!wgCyszWmWehGJ5-P*t_ioZ_OO zXQv|5-qn^+AtPh^G`)RmZR0ExWG?2YYtnB*BNAQ!c)b}#32_ndR;R9Dqo{Z@C83wvdm6WmU zSx#;r-|m z5GwN~S?`B@-B&ihFL^HMk7jV8rN@8-(z~~AIAiekq(x4hv7p>qqWi~)tV%?H#nF-n z9=1|}UL{LgeuUE-`8J_9FJ|+1v^LmTF_^CQlZm){(b@s;Ujy9+_-A_ z_bbEMUAAR&M+>J=5EEeZU6GDV(X?J27K?9y60?WbR^?_{r_zm?{NN(OmTBbV-@|Y}vv6iOtQkXXt6GZ?kkZ9o|Jtd$~C)+U-ka+h|C4 zvi$tBD4#|5CX3Bl$8fRLwXFWls}}LgF~G+rq;aw^N&E zQU53eYUZQ)IifR1k*2P?SaV9bP=nuJ;Hz^KlCYE=SCei%+pl>cI<0MVilh9Wp`JET z!ja9=UH@#JvsToW9upmbpOZfIpwgn0C*KJ3DJF@UKO#A z1eyI1W0-5*Dt_~COlN{7EJ4b0<`#Egu)(9sY|u9KpsZ4zW#Zr;F9<9iKL}*bn5C%J zK2QovdI|tW{e5d18Nm&`dr0>-)ARF3s^<08Z|(hK0j|$~3O*iiOT$^2?%d6Om=pbA z*2ZGvqc1cd?>x0*TMlsxJ00s=%)6=nN9lUBl%;}mRVB$RXbhuS5=M`YQC2w-N*(5# zAISjS!jzF;JVMnf*DezNG2YHu;-q2IjM$K!ldCLyzZEky%&k#UmRPPf`=3<;G}b*| zI8nX297AdAa;EfVIHBqqxth}b$A`z4vod9Kt`Bij$r_?_+WNU#cHB6x{yl5}L)dX~ z_&6KmtS$CmGbu%*Qhxa+OOk4??rC9>tVpJR1jTcGRHp%6TK$uWEoaf-WM(swl`EXW zd*{dSf6{rJlcR;Nq;kgZ? z)KpX|*;(w_Q)Bi?I`giC5Eh_u}z>OGC zC++&K3sH8AF?8-o?xhLR`SNg^3xn6ufvhTd>NyZw6{Iv;%x53MGFq?Z!ix}u(EK;aMQ<%U!_+V zjTerWBd=1j&0}Se$J2&GD_E_*A0Y@2Hv<3m${hEVDjL1q?x0G0SV=}+As?QO{$u-Y z7&kIoAnNqZfA{y(h!Y|K#H_Q}xRujimYK@ae);vQ0+qefJG1t>N<)yNHu4dpr`EK^ z&+s+*IMY0tmn?G12~jF@%|SLj)-b%)NW_Zb^`V?|&Q}WnNEe2ss+YPrWWK0G(jp0) z=1NK`Wiw4~U_Ea!ri1U$Pu(_vg|#l*ROHPus3xPoXSQ0!{CF@laHNjXh4MQHbTG!m zEJ|-(%6cUjd$@v6M>bB(!2(hm39Vq!%|RMc5al@Ibhftvk7f^><elE=$R~aR+C;e*^JL zEQ`@FCDIRj`wp7OtDrSd^6)X~m|pTR9mdSCLJVTOtg2DWt>NU`!$YNlbQWURI%k`X@My%?YmFuC6}q&spNKv)n%->WLnrUxhC-I z!upghx9~!L+(ZqOV@hsEM#rNU{?>Y)?MET@h3YF9SD!*9zYfS4wWJbV&3=?^Ru=m^ zNsy&|;gQO?xsNnQw~A-H-o0qBFg`GGQx6okD0F#j6^EfOMB;n{ocGTe)}oafdRlx0 zuoWd$0rK1JW&K^hI^a@})meNc^Ea4I1MNswZnYS#KtgABcHYHME=$Ao>CZ^kQW1$} zaO`5~7VRd;uY=W%fgI1v^?JahXN;o{iqBa?8;2M&TF+1MnwPp1RdFkZ_(!SuNjDbE zVs>(r*rb=OuKN*{ZU~n7XUo3{EKGJ-g=4to6o*)qK1q?Zcf*ao_ZLnol7n0?p32*i z_GO|{hj?KM9Ps(oNZ_1N6!rkmDHbrj1BiLNSH%cR3$+wx7 z-b>oiAwA6CsZ0OR>wtlGRyN2ZiI86$1f`oZAb5R((dL`%Om>BEGx;`Wb8Y^$`aX1- z3&D2-l(VjcTv9f@lkg!z z9>;3<$yr>*ZJsf}NJ8d+onO;X*?J$jj4vik7nVJ>=y zOqG@0mZZ(;AI#ptF&!#J0=1ST4ZxA3Th797Jh6z~&Rkc14Q=%^w^QMf&y$I8>YNru zlBihHQC@sw!ev@1Ru=dNN?=BXoc?0|+|i6nc&XB+22BL3)!c}Q_4PAKc=B>vn*8!> zx97HZzwwMeO)rwUrEnRGx@4~N*w#@NQta?FF;xdJVN1NWe|HbYAy2hM6%6zyVhhC1YZ}47 ziR&7Qb2u}z+}hG}?Tpqw@r1t^UT#!;Sz-alB$DR=E_1~KRCddpfpY}?2G;ILYBr_wL5jF!L0 z(8v_^JpyMOOe(f5>rOa{6njI3)w|LWBS<`ATVyO9NqsHdzh`eO`bw!chC{ad91^kc?|g)L?$f6IL@yTxDO8d&Sr)XA%1sgPVCwLRwIOgQr7|v(Ba{ zxCbSrMrCg3S<6l@L99eJmhbwpd<}*<;Ltmqsb|HC=C53Kis#yZCW4kATKz(d1R21L z)~ik)VUyo!+rEQOFs3@ID|W$qqIYU&kb`(LX9*yWAg5XLnYrOh0!ZA`Y5<+Lt4d(<2XupSS@(Nj+6>6J?;lH6p7TKa{~jNR91WGgr`(+H{WqIBlN6pr?om` z6SvwAzWXlnBiLVmlsyGCi8)iQuD-)K>_DqGODYdgvQ)zz*@rbO^ZvbXjX5n$cvw>@ zMH7;eY~>kn3uT~b%`k7Yx06ggW*DCAbT*h)uU{-Lm7f*4Z7yoq&prj9BE=d}^%3BZ z;mkGhnaI22KTEW5$orCGUa_CiY2=DjFyzNe2r_2pxR@y9KSYkxn(m>uMl&Y+G(&V~ z_^?AZ0$-WrA-fD#gYNS)U3x0l-WO@MAyPTID4P~WbH=qA3QY$Mu_2K*1+kvgtfgN~I;h%dQt3$)A(vOi^xVG?kWkHT=!0%b^ZD6x$KCVw7mFQ_lYCHE=frP6iocvjDR^ z03V*}>PJC2brHJ`PF79dbcZ9gG_S_AK{?bZ;e@)V1%t4j>N;6@(Ow2eRn$3uGmAYk z;2qwG?(*lnh1>8*yiU0{SLxE~{wh4is=je|pKW^BgIZQ&EJTN`knHBNX#$f1tuZmH zi$*X|4-*xJSY#QUP@@-LZ3_1y+ zMG-i}Uh|5A65I`ESKagZ%eo#<)Rc~xDb$2B-};ZCi50;3gG5O>*pK6+m-D~;aTfU- zT6NhSQ+o6Q#}9%wrr~?~ApJRM22McPHq`b4e#1_;TT%Iz9bS4>a!8ibEQdH#yQN#b z!aZwm?Km!$FC5~(@5MRn_(Fabk2DOIGt@Y2`)k!%EU`vt<+Yrp$WeVXndSTKb|Dis zD29L_Q0ITq8N>ViYqRPi?UeC& zLOK+(v!z;@9DjuuF{%#KR7EGJm6e)!T6`0cO&;V9DP^n~1zIXw!Q7M8$ag8mv?+IP zLy#wYS|k?Om~8k;btAY%SSL21nn#fD@q1$a1OFwl;5aLMM$)6isM+ue^P&Y+aia2) zOJe@x1Pg?UHY(gJI2DLhl!} z!rQLSEV{DxF;V2f>eY@b{Y!9wqSauDVdh#EX(*TRvuDjYv53>G{%#?M^QZYzSG=7_ z)z!}}DwlDNC6Qy6y%}n*$6-0;PkAuk0@xW6!#T2 zEIdMr7xx6D6iv%MFxY;0dDF?@osyoDkAHT_mSP(5eb9~m=QFSAX>-WJBT-PH1mVdE zv2{7~TzL~rm;)69>C*=vqn&qc=s&ulYLNc3m-wF=!dP7M|EWki`11etpMl6`M){A_ zXHL%JJe7XM{HR3B7rj^nkSQ%LEj*R(1kh=N1xn%cTOOkfum@>u=yu*(iCr;8$gf_i z>qYSv*ZRA<{_yMqd`r%1p7ud`|MM>rFnD2NSjDc{sn0cPI0KHa)aw&r|5uGC*>yR~ zsq>%xOzLI}Ca1^FQ0bDcKuqXaiaMQIPg2$(kbAhKuso*V`@hXBC12TJ$LgX zjBu+>edJ9_a<{~qVKpTo<=Ms{piW4oRyJ7fvujbb*3&S~BC!)JO0~|P$A?so7%<{P zGc|w4k2~}xiSW^GRVieix=Thw4~rl2z= z{jFr8UJri%4mA%QuDUW$0)yIay=v}v%02>~G-bxw=8{KrEkK_PvRj4&gN*}n&dPE6 zr(HLEsc+jUkx!f;CVr38g15pUzBWAk7K`J}T*eBDDZ!Tb`RfiI7QqlqJ(1?FwKAI- zFJX^P%qPPGDcG!jD;~b0$6n{II!q^arPBFU)_BcjO|H%gqk1pdSyz&rv}e|D?ll)iomDL(IM~Q@Nv} zp#)91%=@}E<3S&8#twI{S@zX?!4`_V#U{`3wi(xS-|ERKXQu>g)-%^nFVqIgH9gXW zI4;A^N=C-FshB{@su1nh_Wdn6DWkcNpyF7yS@5>>`!8vt}73y2s0+> zK+`1-uXF5pQ-cD+jjQ(Q9Rd5z-!Q1-11U451#>NGt4dj#Ca>8$o2^59oBKmtvrhI^ zza$l-;zgNMK55^+E_3gTfN0%ArrKYS-t=&RUGHGL90uE;m@l6N?35Y{-<~M%9>FLzVN@H0Z2M-7BS#p-EOGHPQqwGA z`yH=>!5ZIRY&p&N>V9*7d`Xxyt|_Q_AFb*o42?-tOG3bjyoWs=X;886`Im$*Fc;Mm zsa5}E#bnMxLOjY&rJauQ>JsPD1I#lq2!6T=j8tR*JH(`vK0&B+w=$-34y*uc>u<|8 z3rYQ1=v}02Ij5dHq4Zkj+ccfn4RPOInADE%C7KbS!P3OLW#zUPi+ai!MUGG87qM@plD>$yGuSwBo zUf=-WUyU)|XAE=j3!9b^;pp1mKMN-td@rqrsxiE{qS`6X13-$!x)fIk(A_uuLEs6$ z*IpQE%@G1Lc0O}$rY4UdE-J#B@e5$4%>OHQnT-VjlKY;qG2guQdEL`id_3=~G-%Q> z&gqwUF8`J69?4`5E_$hGR#*kTxTo}j+xqT1wj;>JJQCVg-@p0ohleF6kc!A=NLbMO zyP1AGe^II0s^;_wK6_CM#)x@&g05fJaXdf}5*gnb(%9YC2QAAC`ae}S7D0xJ6mOAX ziW?3zcJ5c*`kI0@>2)(+GrqwdqLA%$dvkCy&4#w$-f=NwK{r_aMr695yG0;9)0L4H z-tuD;ZIyFiyY=TN`#X@a+5jJJut>UrBUWIgMo!%wHGPD6BiG^;XkuPRtZSRF>`8Gj zV9WSC%>U=On%EW1jW0?%+r%FT*F@kg9GHdqL=d%6#WYs#2&jA-Z%pY+DxOep2h74i zf5MPT0wzs&hc*|{=0){Iu_hw3f0gmz$X9i1Q#U~Wy;-;%ox3|^#N4q^^FmL!FtGg$ zlW0+@I3h_Y5%DqSL3oF4w0}hcra`NI!{B>Pc90AzWVLCz9)qetm0X%U)l%*>ha(-z z#3&IhHLR*h3`-zDu|KBwkfn zM&h>QtOL2?m5k|qJ_V+Idm@$K&TJdCVo%7=q6cn+0O$8PC4Y>*`A#1X9QSf8qatykW%f) zcIJvm%rkB1O&`mHtKwE}bj5tWh1r;omnq)Gki~FoJ#$#(!iHhJc=}{099jICI1c3 zcePKUc*Y<2Onh!{c?jJ{IP%s|`vI({phCS5sc9|g1S6^tGJ+^jkaKR6eW7Mn_f%-9 zXLNY6u7uQ2o61k&eeS9bXc}zun$n<1jG+qsrRFdx__xW52~X2MPV<*XkVIa2xxx*8 zxh%+(%&#RgWiwwQ0$eV$LC1Q?cU^TnjM1^WUsQw*8&+G}e904|;eD9*k|XK02R8vM z*dv;KmmX-^qnDv+Oco7;nqQ<`{?hM!=CQyW&VEagqKKC7XqR*Txrxqmr=V6s;Cp~{ z9(Fm~N0x7=iK>;JA%(o$4Q>sL)Dh0~K}w^i=5g#pIYoK7Cfv)I7pr5_N`k^qai{>v z^A9Ql>3*r~FyffC!mnDXZpVE~jQaMcFQ9l7Z(B=xr=CjFD2!c{l>D^S7nXKWOJBaVd|Qy1H=_05mtTQP*NjsD06?%kw_ye<{) z%mRn+%h`zbMPh8oCzNi>+4x5Z8Rd`7m)0YrqxP{%9*`i9HDfgcB(e(`c_w((s<1Nj zcZ#s!_ce2e?3tl=3bRzLYDKriF-c@rYU;w5w^;IOt*)i8v-9rS+Q7uOZY0t zF3$_bP+IPdEw}J^h=`46wMY_p+7%?;v!Lp-sDdWe2rR*1jQPAXAgMiuE1yx#4As?o z`Q+F~#|Q$)y*kd4|CWUlO-3aO_5S2M<7+X|`KsPNfrqOh#((kke! z1Ukad6b8@eI=+oN=2sGbIp^WW42RgNr#t*H6^GR7JVhoG4>}Pf-D8Gl5;$T=py&FN zjR1$k%k59e-&5u!W~U|+5^q-bC9v;Ule9?<6w}cchu(Wh9g6_?;ZCnZ#^P#A^QL}( zS*x*UC;;WehgYe5{gw6HIJZ+WKEjv%+e*z>!Dy0nCEUJNLz zZpw~~`m&ujT3qeIS`I>d;e>H?T$wfmdiP>`W@JSozgT|j!?GP~ssi>$MNv+S4|Jd9 zS3aQ1|3yNk8Vk3J6lVRpKBuZDdXtoszVJq^o_l&R!>t#lSw^?IKL1ije0u563NLN> zCAG}@l1MHKB!It^&K;hoFq+56MjBo_^OJFW#_c>TTuD|%Q4!-pmtp;4|K^d`Xyd|Y zZZ~{WSyOFZXU~>%-$KbYrsORiS{3!c1Oxj_k8GObHp$zJ)Xccp*ycG|6{9lC*PXdC zs$_mTOZ@j)MFoN<`df!3SWR&2I5tb121B0fZy9e%>4wiKD}C% z-JSb%R@bA8t;VG9WB)gJi9CPHtYbyxO?Gq)ZoQT{8fTH&#^T+jOyJhmRuB2fN{`Aw zXij|=Gz*ep!y`FMcb`!eXEoj*vLxIZ+MkW%-jK2Cz1#f6F*Y}oeKA4=Ivzu#aiXcp}g!$d=>26CV- z$MjtVm`PiK&oyBmfv@5H5_f+$et(Jf>K*Nzqz#K)7245yVdlF)TP@GK!>)zieG`8b zcVqwi$^Egt`d@zblD9TPP z*S50jnp#2r1xPuMwTbnH%CL5*;;?)4Qa!ROfLtFG+05dXLlgA&p}70F$xfjB#Efsp zip08f5|HE?I9&bsP{uG1k-pY2TFH0co)2rJG}N{Y2Rhehxj!z5WFQ1!fZGng`|Xfw zLBt`6!ixJ*OWRq0+pZ;;zbA_v4=A+xLsliuWY8rs^|~azZsK;Yu{J>1YMywSm*<;a ztxt7ibUmFQRv)}IyPZcw)1&vBhSqfgV~IeJgX}dZsa|)ut?b@pQ%)smOfHQ^ey z`1Z`Yv*4-_w1$qchGr9Tts?jV-QiOjKO^o+WFN@b6z>B1V(5ih4eCITxATgBZ`Bn` zo&HMY+{e$ZySV{j8VbKMDc-9;XJva}kR-pJ{;~$Vm{yyLW<^>!*CD_33pK|7z*!Rn zj;|kiG~rorhMg92V&E%rS`HLDHWx{MOS-ggZxUsjneh%&n?c;CM~3x^V;O{GT`R#&w)VL zWT%Lg{?VVm*|l+G9UkP+<%x0zU59`arXW|FxyrTX6j6#kc(Yp464do=MI|=j%(n;nL1Ez});t8#d9- zft?>DOM>vbesg1MinNc-TlO_U8c&>X3 zHvk5B<@4$z+70aUr)whQU3o>-4PwsQiF72go#~)JlTRs{Hv}`y0O!nS99UT$**?ST zP2cUK8UEO5+j3n9x_Z*1Aaq?r7Fl-=|*@ugc~t@{af5PKif+WThUUkEDwk zqDHx`X_VXg(Ac&9unwj)mN%W|;nG#qGCQk3Gg7nyNG)aNuC4NCjS&3~#FW`rJzrUY z-XbCsyjMGqnrjSG6acXnHjC!uRbD)eiN^z)wFdsxXV4y(Hv4N@F2#U++wV42tVSr3 zA!Zn66N)X#kuC7d*&t@7qi5VWiGJ}n31qGwCnB12dOj`(lL|ZfETrt>7VLnf`pAFQBRX2D^ zKsMHgT=>mZZq684b&1Hu^l1M89_fRzTpgv_#5lb3W)x1;R8|htqJX#L-Z-6=%!n9Q z&g9>&p*+yW01uoc#;9|amKovpB(fF^qLiBH04ZaGeOG|s-I>WAf+U7=|58VX=KU%b z=I=)WbhGZ!*NuDzLLR#&eVvXfnYP~Cf|G7NO8WSP3nA=jIHD?T=?=ysw}__>I9SxF z$l`n_qKYN?7hNWI7UDtfk{n$SyQ+=qm;_?;ru-9R9(D(eT~v7Q|Lm50-6OvD5xthp zW$pGTV4LK;@>z`ETaOsKW*mtK!5f~t&F&t)^AGk{I0AdmT#O#|8R3wFp4J>W2Q&=8 zYloe6zrcuf@cC}&@i;K``2#^QkN@o-$j z6&13#?=n7V%Qf4aZJXa3=rQOm%ozhJf+kMzLXENOS6jZhU1s=&su;E|Uf1yTjefm6 z+(mr~i*Ks|FVUFY?LByA4KDP_QBgSn%M!ekUt&q3ujvHa+_|zU!`yuNd4@LvPsc)6 zStY}w@=|dT_~3ifhegzA|9iqUT+scPlyvI=ESFnxLI%2@fgVN>aU}2c9S8+c3be05 z)w!(#^36JTmae2Qj>MdQR7G2yH~KM*8Mgaw{0(;WAQUDUrGMpBq_!VYN3)g%_B^=k zyV_%J+)1?^N#?$jp7d&q(KdXWlnwB3xZQQ-!HJ^FLK)?d?y1)m!=Ls)-km;IQaGRw z(Bt&fkvQl2$@E7+DAAN%AV^&!r+8ZSRg;1IEa@_A8t!fPCi`cA7=FpSGHx9-n#nUttahsSN{IaZ^ZF^A*f=5^$J`X`r4~CPZPI**f zbz5!ulgV>^kl$}0Gz0;S(&0PXyBir2dS1IC}g#Cu-5nTFSNu9!% z8P3(5SjMyOr8?vf{X-ZbR?;5+G3I*>Ez6GQHHqNZ@~#tY#;9GFiApv827B(VmsS{V zckp>~a2=(>8gHk$Mo4adXv(ib+8Q|)R$LeE1Z4TtSaIDNc6XzS1=!-qKy-fp*T@gH z77kqoRPYS`h_ZEm*VWR2CM2(qnC0C0o4-yDQ>Sn4xejS3S~K=drmbY3p_ltH?q0|K z5oavSlVQpTC*1Fde8FhZz5FoCgoF3(0~2#$kx(iwY<4>V4bwXV}8QXvQ zsql3ad<|$gF;gls^~TfZo%#A)@`@UB%L&E^Yq3q0KJ~3@h{z0mbzPR7aJu^x;&*Iw z&U9mPjtt($jsHs}>-ekgd3@pS)9Dl0L_CM=4-8cm$l*=H- zTM%tq%&O=KNujk!2Uo=VpkKFmvHY@ots~MuA$f`S@#A;&hfYHC`R*_Q=* zA2QIo{@25Y-YOq|CV5B`zogX8uQoJIqZj_h#3Qz#K6Ydvc1E^tQFh^-you~PH_jED z+MC!JMLt+UJv=^88i6k1;w_W(484V2m#K_z?;Uz!#%P|a`lr+95Qorh>3FCzwaTxe z(gIC}MDvFK)SicRO2(hXjVQ-Ep^bAbXcHX|Cc;!ZA;quEU%{iG`1FDkvQn(Ku{?cfY6N4$Y=>6|HB00N^DqVcm zP&rddfq^jnLY(BJ>pr3rYUaFKa#W0a!S)!zZ(l!k|H)X%48!hnNMWvWPWSP1@!&-_ z_}yO?s$=>Bk^g1}Xqyu5l3(bPA@4~4{CTP9XW7KhMq}N?m>X7bBn9QzW&Jw)s{}r^ zB!}A1Hcf_UgnYz+6JGji>|}YaC5uJ=Z|k~mJZ(e#h_)>7nQn~S495Cn82{V5Iq?kV zgzFX-L<|tJ5JANCrTxUkrZ{>fwB4;uUMo`ztrUSu@GGRnb|$ zTSzm$4WF$`h{#h9)L=~?S6`$edPTq`&pASb=O zf6TA=9gL>rByalhOD|2lv+|=kY??^?%l*tmF3S<_$5xGzhIO}KeC&irLiry!bD^?N z=yIK3t>Iq|-$Kq_umFZms5|_69ZHYq(ffgkdBm^yrU28`0U_`DIA2v8_ww@p7fnM~ zjK!Bk>+!n)@q*+{VmK+S>!cUQ0rj~OV&e`h91mytXMt1ZXR^wX2W!+g);Uj{*#X0v=SsCKo zyOw|uz8&vu^A)rsbU6>66H|LJM)rGU%b%{9)ckw&hfdnpl=vtUgT%1}Tim8W9sdj3 zRdb%s7cD!8y+R*(+_wlpD{%W_@~*J!eqS7gXi8NH2jm<+pw}1A*D&?4(Y6uIeVYOt z9P_`RFSoM&c^9@ls}}yKLLR(}DL0+Ky06psEm4^sa#&1xvxuf@%NM_F8gGd9U=cg5 za+&isOKle(3YL|Y5&|<*1v-dO zRse!RRBhv9K;R@OMng;eQ#Cnj;DLqFi|zW!Kwyr*zLhyZkay^W9?~MV=i;u{9Xp2= z9d~`H37bwyzp%M|$z&7M2g>1)JIj;Qnb3xiJb4f9zpH#6^HrWD+issOSZV!{M$Yl= z4%vHe!c7vn$!8UA>7&3SyzpDC=MgR-s7fE!`(7u9>~_mrr-dDHIW zz2>0fCU!4Wn<$SNHgWX@yas%dU4tp|J)wB>PHi8}*!~_yrz; zhUZo*{WkQ`0dfa|QW=;CyLm=mWt@NZj{V=8z6RxZKfgad9*7J%#{C)jFcaaP6NmU% zHnT`6=O8L;g>CxL{5mj7pu`sl0|nmk3Ay%>fADXNe)%St)+!bsXUY*!Cn+n>z;qb2 zA4*$F@|`07ZiyBY)hYJS7-0^ev-)k9$78pZrlycUjJv^g;<~Jb?JzL)Czl zIp+_{8c`)o^=7aeiYDMj?)l@RUPv1krOQnwFpb}|r0_1U2f%lfg$09Vj%9*0*U9U0 z-?-Y*l5&1#RMH907u5#<(hEdi?DZZv7XJqS;;uHm%DJy&%EI>kG03FMU8}kJ-(|Zv zxPbr00l8-dpto?##Gkkl?(*RO<`D4e!guMK1z#nF8uoTtG5kT!9e}a)f?_SA3R{$e zrY&HKQYCH0hq$vkcZ6fHEI0P+(rt zguK3maY=D2UqvFVj9$0UqO-qM;pC$9I7LsXw%5^wdxkNqGIkB4QA2GxXB+lQCVX4} zvjGQsrxf?$t~q$0d}gNiElMrF<3a3Re25VYRb`=lee$OXwv`1Jhb4f5y7c0GUu!D? z+LP!1)Qec|5^=m9yZM5iTm9^R$t*$t^+t^BoZ&Ye%qpKx4{w6z*aYEROi_%#{T0=1 zyR0|_l75|8$NLf~idr36eUwxc6~&wP;qM6W=zHNmXa|Jl?**tw7t3k$U_22T$bVYr zhInDark~&VLx74h=oKGA>#bYZOo(ZphG`DpYBCrJerc~O;U(Z~5MLZmOz-{%YJqY+8b}t&(IQw6*mD;1kkL6z^4;jlNsOn!3=IjY;fe0(co+A_9dSlMn zzkEuErjIs#`9Tmwfo6smPQYwbl?T`#(9HcUws4l~-&z#Gzx&IG3Nh_SRHBUJ6%w?c zPZbxAnRHlH~5)j1rck@uVzlc_=s?6GiQ(9-QLq( zpH3#?cdM4Xwvp?9#igZ50je1R{9mobHObV6i{)Bo$zvUcHA_rWr*PvJQvs3?E{1<6@x$N60&2cZVqdY!f| z!0gajo7Z06q62*2hv#0PvDr^@ON#3|My35%O0B1DvgokT$~I%iTWCg}p?_@CKizmf z%(AMc*9rP5nU@w4;=1zyqdK^!v)E~CbcDV?G#$`R6sjuKF>)viV^6T!&yF=TP;V@+ zsOX*7^P7AF62!!KaJ~vEV{!f%k;SwoAYkTVUgP1qn;c&$1xyY}eoov+C(L8^I17!p z_k6>Cp{o%EjZ29$H!F}VDAUsB!ck&cWM^huV^h;3L2WSI9CXCWc`>rA$z0Y_P{7Jh zr)@0x$xvP(iz$2rN@!-CYqOsm3u>shn{OO_4U?8A^=r{9 z5`$*!pAN6Z;)8CME?S@}y3?$zg(mt3?31-TA81?))HAu~sX!$Yy80>Q79X9JVz45AP&u0grCWz%UD3l5>23O< zt&Ob%e@v$*^j_h$z5x%TwJ@FkG%x4!%AB4HLRwN|VB*U_+=z*kVDk2a=~Afo8KK?E z&n;7U{u~;A)oMGuhELbH`A0^Bt6T>XnXy-qlo|c_oxyh9t<1u%X3JDk(r;=1sN3h} zrjiY3w8N2Jhz~CC_HW|+MaQzpx$B?er`;P{UJpIt);5aS0YTZRiWlRE!3G(cmnx?- z^K+ud-ZxK8wX1VE9L9{;t~y2qqjrYHK}Ruf(0nN8joN@)?q>Qj9xf-uD*0NQ>V*Cc zXPuOk*f=8Atv*M3qloCvI2ryJpNh%s#g5iJrRm$f>Q#H|cE6*=%KoPdqLn7Fi!Kkr z#zJzpK1r)gsE@GY?97_q#NsOQ8exu9gniJH$^Ds=@duXgd|7QPbFk+7-KY#VoZBm!3W(w`@uJbiJ^c1;O$&cm_riw&HD%;ciL9ha zX9Y)cFW{ML3sVfmkM9S~=Qkq~BDsxqqdOw^P-|Fz{L#ABn7){fV8oVgZBtsi ziQhmQe^Ug__D99(8NV}QTzliQ{bD|3bH)^4ZSiQiS{*BG zK)T(%k&dK2MyNL4aQoA-g=2ak?byW)d5;8Qw#8tQTTK-rdVewv`*HKV8*~}7hhmX6+WK~T^8)TsN1L}XW5DWF>}xz@u~gd%$r#BO zl3HO*sBPJ01{SB6#cXCb}mmHRt!<0W2wy3uxxTe#yXzn0ZBv>MshVhF*Ef6m`%>p8pNc-HhL zB3ZZ7=d1&6&$tHZ9$at^_kY~&oOc|SEb38TfDxS;&5{kNTd`TKCeV)oqh!Ke(QOTT zXH%;6Meud;FFJ)UI`0>}y}XLz?WY2titRnB3PRx-m3-4vGiut~Bgd!NEsk~tqCF}x zKup&0TY+!4M_-~kRc$dsclFTl`ER56o;+E_dPgTFzA6~%1HBW~<92-fFKM6enq@bxhy*Df1i^=B{H9AZOJUU!DtEV!8OW)Xg!M-1RT9)Kx7VsV1 zBJk%e+@qBq4b)65Z0Jg%A`hX-8$}=P7g@c{gy0?bD)ZxQuFdU9odhV6B9u_1l-7^t z$G&%V%~T_bHicIG`Lz(^@Ps?e#o9I!X}C>b$M++lHkC|9YszB?`nl-jgiafSf?+*f z79u-mnL@aOV~Or~d%qgF_>M-;G8idxz6My05hM2#8jwBkEhYZHn(yRoq}E8_iSanvOAqhALVz7TGI7`X}io%7x$caIG(ab^5ai%@H5wf(2(#m z4-Wc0qms!D;k8k7a6q{nCg!vj!XI{e#TL$LN_yvC3m0=Md#Qvbk>D~$Oed$zOswV{ z{T`p-1LMbjGR{!}v$1!H*wpdj@xK{EbgkS`N8+p~xhFbVTBtt29{l#JT*?kLb&dRt z84{IsI{-1Ois(cZfY9Elc^VZBiIpPd&pdEl8T*ew#M5lV22|#>&4X4$!^l8496er4^=+WX*39oh>-sJl(f-Z>tZtVe-s8Gxtnp=AOB(>o)ok?`o_$!#k`GDL?Fs30e1epOEb1nQ+iF&#jkSsWhkh z)*5xfR^okLDl)h*)HZDX$Tf5B)E5ek$M98eWB+q|-KI~GhuR!GPXQ!}FIRTWL(@g* z9uUkfjaU9?9r3}QvQ_ZdBrR#4nVX+eo4wd_K3UD9IVYa6DHx?m{l?OxJFKRqWu~HR z7yCQOw|$962nI{;ma!^TZ@|8iF*RABeiw|!To=hM)}_Mv)7-P!Pu<;m&eQ17HbEpU zq*Ux-M;6L!Ch5ilwFStYBPAy)a&gmC8#8;MlU@Vc9VK~*W#FFOK<3Y%92O?E#O&wy z?y;K#7WtLu1IzwO5+^ILB_Hqa!k?`m|Puz)$;gXwfd2jgzB&Lz8Kez&s?g zA^Sw$-&D7-$nw0Ql13LUly9{)SVGsZVQafebYU<#^t}65-$)-c6?4pwxT;ee-B)(z$2k{JRw$7yxF(+uBzdO?4`F#5`}_?qyFw65i#O{C1&)8vashU z{A0#iW^!*a%Bz|^b54fzgZxCz8!!6{=a8WJHQ`U01p)b2YknzoX!V)Dc#llZ7KA<( zao+5%+6Zq@wTPgat<76An%DQ6sNgiFVQzI+5eNMfxw*{XoNqRq*E6l4wclPdh)}hbFxZN6Z??FQ_UY&dO(>f$D}|b# zudP=N6}Yzwql$*6JkC67#p+#8<}QmosV672=R@51DY-DekonE@d=^vt^PpTq$_e5t zeXM(50>2>Z9#?#q;e6SUq7dR4>tK+u>0n3CJKvE_MXIY;X<_%Lq;-pJiqY~U+&E=a zSG9RZd6tvY-|lBZhb1VzRJ!xZA$LJw3|ml-JUSj)?PUm)MRrR{duqPPPucop567F<{!~IQ znt=y|ET=;#8$&^vUvZNBRN5Klj?E9wYE_Vza;ti1_898tKTk^mqep1P}t;0kT!(>u2HtT`A{) zW=NavGsIo+uXorT?e6w4BzF~m+);r%osph!rKA|}Z!VTK+m--)sm1R(|CUOdNEQQNz( z=Q#9m?ignGB0YK`C#qc*$~wi+?1A>WJF%4;Rdv8PIU6x%jkdKd9P(wAx}REmG& z`@RNR$2^>QfIV~Xo+T9e6?L4`{GDj1lD!xORNxEN59GOEq#%lOT0^7RL2*vO6Kklw z?oNCqhZra`hS%juzi|o?a@WS{)2j}HL)2Z-r;>L?v&Fb}%yE3`{`P-Vp~K+LRu=}Z z(1Q{sZJl%4CISP2PJl$kJvkAep+TM^0Oz7@>OR6L{b<@ZrhNR{A!uXk97z0v1vJ() z(M5Q2;k{Xux^qF_NTz{gL!cA>U1l*$D7eD{#tb`-wFFC&k^Pmt<9ywF_y29*{L8NU zf7!ABzs-ymNOZ^|aMU!gsuJKi`#B31&W_?ax#{J!r-M04$a^d0*A3eYp2EZk0lkZY zM@L1!dC7ma&bOP+8?g(d7W>iO@Lug>pgvA<*9f|DumQ26-veElVm-22`+|UP?;x3F zTU9S=vu;L-w#mqxD~^gJb$1?CTb&}%e#lklnP?i~LlWB8l4Ks& zZG&JXR@$wFrG@ANJSaNprO)(E=Xoo$ApV1(KxktF^R{7=k2lr@CmwY261BZY7LRRe+>~E)?;FD=ZO8lSm`(y}sy4T+8e-@Pw z5i;Y0*2quF@p~_vBK$w(PesKA(YuEP7iQLL4JFkl3{KZ2GDC)4#2F40Q)`12{XAdL znT9Y38nfC)E8;J^vIM?c(O@rKg~s&yZ!i~z7_QB<1gXSlysh!?VN|8)D0sbGnbRV2 z>|X6AmW^{xBc^R)(kkQ{$Lch>PcsOycb~1^!=5U89+?4teG-TLd=Iyh+rmzW<`43q z!Dr4y-nsc__Wt$!e16LWQ$nGkWgO*9^j1gQODA2ya&G=%tIEy{KaJYGc~Xv8-HP*m z4i=>`e9}kx4k8+m#_O#pB>#=e+_tz>eDQm)joJsYs%dYXT|DJ81HR7us!b|}EyR(o z$dD$#FGxA35^_IYOL{;-(AT4JCEHg>+Ep^UmRVGJs0y%{*g1hIPud4Z-YHYp^wmxN z*0_N81OvWTVz^D7MSoZBGg?qhsER|TRCo+1m;T~@+KfV~jwbSml0jB~FLTUbyIix= zmE=j|J0|hGm;)6n3A>g0sCxUCCnB=>6E7|5$npi4Ja)UJ)z91%u#T9C{Y|1(3C}un zMX}B6%*+?pv;0ziZVXrzsXd~Qwh!%#mXO$45&F?~6YX zW`CaawTW?7l!Odx_j+{#o^iI&;%0TbJSJFZkb&p!81A}R-lZ?cv^-t3sX8=YR8~|E zLAGVmI8KH&lVfbgY^71BFU1!QdWN5KwQ|omvke>And4{*xy@eQ%v6*U?DGi2U{DVG>?c+`k~ND(XAX0{K|l6 z?fBRo4Hen#oQSYX+q_YE{;H})`Uu6-5v_HHVh&mf2b0dIVibDP&l!X2ul5>mPd={W6Y(QJWE>qGWkIv}?rtn4bK|?-;-k_n;%~*)vB{ozi!5rdOGOVhKlpn?LyjsjgL{70y#CGQ0bIO5FL9R)CZ9P1OP3*fBRbF4p5=ZIcTofP6zt0xYSoVUQ#| z7JeM{XRns=f)#&xMNYZlrI{!a*2iwE2xI;ksZA?|8^~Lq4RiK)W#9^oZu57x*)*PN zo?u!nQ3U)>TxkeNd(6-D^M|37(bKFmJnFKsm`a+L{Sh1-Nn=+ysy7qvQl_r9TCvuY z-j=5lbWPV?*%JW9wwA5O%62VT_j4o4eOBAhBCLQ8xG{bC!*}PX$HI8(7lTEoV%GC> zC^EPfAMe-zY!3_#Ou-EAE|)SV6~#-C1PSlvJmvs<%8>lZiqd|!u*eatlkQkn`?@YW zpToW32}2(w08>+hydXe7#XV+ylriP+BakCsNrxuh!SQ1RMTQUuU(7MEZSJTeq?2 znT@}6!F@&1*kUMOvGc{EwE#zky1ujYO~J_5cxEmOj-sXH%na3HJo#BuL-5%JDwHa2 zJ@CDatk3L03Ezf_CA2m9aY~N2a2}PKvHX;}$8Vx0`3ZA3Z(cN~-&DDS!=P zF^%b|Gmcl*`=f95g&t5?!^i8pWz48}8GAW-35VQ=mH$++W4!7nG_)b!So^qcItY2fv;!e4Hn1%g za_8)+J}|u<)!njGz?2~(6uqnvOm;J62Nk@bPE_0TWNR`&bdFV*wdHp`H4k)RiqxlB z!$r#6QIn}2qe~UlNN5pxVT1q9M@-vMF@qV_rf?zK5VFXw#dZ3fD4SC$vPV;(arnk{ zcVckoDNOV)AE#76%Xr@PziO(Vg?mhX-A%(tiS3m{%z6i1HI-5KYDZHXJkmNG6y`zQOw~CgxNB?ubewL< zw}4_$SD(KH=D3w2nVx4zrXX7qny!K#U3sUFC(np98m6!c$g0dI-8L+$PQ0xs?={A@ z69Wb@4&dBy-M5DEq^=aGR||khRSFD4f*gtFgF*CNWMy=}FP_JO`6_~$HkMsOD`|fXYqOAHgUhN5U zIxdKm#WBvEedIh{&rVduk)`5s_Cs=D`)Kq%PlYXObu31c$NY5%;0NQi3!Vfk{;beS zZWXpG`+4!_1xR|inC_6zp@j}#lP4x-O!9$fpbM`e*kso+qGkK>B<2vyTPgiVi>jq> zrB~UF(1&M$U?0vXQ^(M*8B?yIz3|xjBr&N=gb^!*wPVR?6SM9}2Rw@?29rK+UywPEZ$#}-~;UM})I3aG+rq-DXfdAVO42pxb1Z--RR)|LKf zOyTlUBqsTq$!($x3 zFn^laL=LF{<36@M;%0`>X93wr!suE7ZY|?*=n`=La3MmA{+qz4%A%(Z+aNp%y~*LZ zXhhLs1?tBuglO=q0RFDO-too=0;@>W9+XH^)JFJueS(lsOOG9JVTgb+4yet3x7-V! zuvO3rT+!2D8Ja?TxDC}wPXdi~27dS7oMq5X-<>!~!wGsJm*d-Oq!Q=#@)<@%8 zZJhraz$8T$`3v;1vh0F!Q5*2ooj!b9#05i6@cu;OuW>>sgO1XMn~LU1h{`k1jbkGB zz5A;S?xO^{6oo^!De)Fs>L$gtSt|!AgJYG726cX$lcItadzV-FPycgdMoeplpXQb^ z8p_00HpcBKcfo+~9=N3^r+^i!@i4eqwMTn2YtL?f&u(V{)SA5bLy|b6s6Xt-i2vA0(dsH)X7dB=T+tVQZ4NNhI@0B%u zbf;ElD5Am%G@BEfb4C1%_ji3}v`jT`*S2T&|VQcC%+-$vyLa0ot3M93vTz8zpKYv}wdq zV=dkzV4CsTXRThBTip;@%+Xi-)(X#!v+jk=oAk!ytGo@S!8AW7*+zh!Rv3J{Oc6E@ z+|uxC^W&DZ`1#d6cN$&o3rl#)Pe6_5nefn>vcY6=X3_vt-q>0J#;{^vMWmBygHg^A z{*#=yJ@&VC(F|;?{4aR8E-8N;YJX-@{Z**g_OMpZEGfK@l@F z61HA?+NOSITN(?+8_sdXqoEIHV0hp($_n}D>v_I_~|p_0BP*{Xg7L0 z)pqi&admLp}eGnI&vb@hqgH!V?FUb#Bs0!k#0T-e|P9xbKmN#e3U7~ zZ=!``##BCDu_6vx8Quy;=#s7sy@-PeK^CultM|Nrmxwd$$MY$ReBPTlNe@Ocy z5uSmFz$TQg;~1)+vDuK3PE#Gw(Fs)o&LH_N64~VP25uyKoghc5K)Ej|9=5X&rYc*| zq8^+g3TZtKlz}kOpni!8ALNzolGfJvczxb;Q6~Gku>FIiY$1G4$vIc3ea`TK)Or60 zbV%i*KLoAYleVfNvobv}cFI;pxz*YL*D>+6x4Js z48X8hkHiqu0-iRKuGNku32*YlA#(tqa6^)wx5oYXC$>@awO^;p2qPK|62_7yJ~+Fq z(@BN9w4xZQGMJ+pI|r%FiKFNibhi?DV;j5NiU!U{Sp=u9z1#6a^+Gy5y4LdmzT*g?*(9za5d~cG(Ep!jI0oHm3 zb!v*u&(ACqP#L2?SXk1V&pc{6*F={+@N`{A#CVSK=O66#HcWqfJ{Wh-MoR9dlTOCN z|G;6xS0dif(`+D7^%fMC3P>ozx6a$E6!0IR}wao+UD zj;KT4qoYek^`LGD)eO-`xU+%r2=BEq>Z#B~;zs(=&VK7`6HoO8qptUY7V>c(J>mdr zG5@4LL22JE+4axzWeknjz=w<)3(q<7y%MFyb&Q z8SK&|Z*7!eB7X!R;LVA0tuakH`Z47O!bN^MF(1r1)nVP56XI;>mO@Vg)$`+I7$i&h z2WQdK^LX9KI=pAk1hnU;Tf{pgEwU(rELQv*3hItvBWv~bTgcHLtt7ZTQ$>&0#1F)A zIGXWMlud`_4Hlo5Y*y3ycQvKlzr$8Kj>mj%(X&mu+3<8+IG>)oIV<|iC=67^gts0$ zfj-$9{Qg-T6eQhHy#61A$?ZMPk3WxlS;GOMPb zSu73xLMSCCl$y_b@N&p9J|zwFvx7mnELjPjn?Oe!X8IcaB=}a@d(cK<)*9e zLS-x_CT1)MQ#3l|C!^tupj|qQ^%9kSWHD*3svbi3j8joZxub2S`>zD}r0?%Y6pbJ_ zG{n-2ZO635-&Y*o4I6QJgtHpVEFy~<3!M`c7FKKS4iW;to=qOV?bh#TbPC6&-~ z0p1AY$3NMF(VgYMow(LIf=TQaQNKb{g@G;|T|yKF*#5b_C?8*~+CVc<`5Y>m<^~k( zuMwx`sUkubWu6BGuf$vJ_s!g3qtA`%kN!0GvQ)ZVYzIV&ZJOYXKYaW1U?LR(f8`Dj zAQ3wslT5Xqx5S~4z6>t7pAmy0y&v}bSILnHBMl4a5MjhXZTi*~^Y~ud>$_`PfIjWa z@|C2eG2BF5sZUwO(b^^?ApWB2%P2fwb2iwboPOvD^H<&{1psICkuS%Ww=Yn5>>$R%;(iMs5#ytG z4F>x`)X&`JMeXS>8`*P<^VfC0Yy;9#YulWI(`wBYuHh}H)Acu&vGIYq->;fjl~i&y zhfQ_3FYM5{z6zp?s@w-|yVGhGsZ~U}R?XkCGUGx+jypeIQ6eHnaZAX3C*1uaatq(C zyG+>go-ZZ>Xn~I>#?n(&d7*!YViY|=6H0q&ny^E36 zpyyOX2tyspjdkXZ^mKwhR;zWHUQ?x&CH)+3c>!o9%EQK??bd4mgK+UCxyJh5w-Ob*|-;l4!haPj$1}TD%3Ho-fB- zX4*>W!IyMzuX~{TM#ZylX9isBG9-7|othxG%fo4=x7R!C{Rw3z(6gfhh(`tI>(AG+ z@NCSpAqQz|yZ%Xi_6Yw8(kPAj;mL`Kb>V1QbkE~^p+8ZEKYo#ESXEi3n6X&II$OTy z8esrIIYAjQ`27s4u@d2|`Gn^ou@kHy0lAm@i{1;WWI1mRB5Uj95G5MNTb_Zsa`J(^ zsmn@~MyFe`nuEwuqo=z+^z$m^%mOvMPkObItaB4ZZDy)0Sy!(*TS~8VSN1eL zxW9MOxYR(sKj!P({9HK3poXq`qeOr}%MN1s&+~pcv`$Bs7Zu)|;fOuhU$_}^9mIC6 z4X2qXs{H`cov+9A#R;P4TGGp&pSFOvyO&5JZcv+zek=raMhqQSvBmS3Lfgcv)$8vS z-4rs5a+`X@mORegtNE;$I+etT)W`^pKR36w%(@=k?AK1tZ^O5HrtUp}QJ|AqP1RJJ z|NczfIGN|lcce0fjUfaMd<$xtruO#TwTT0n*2V?+a~;AH>nr~zeO~*ZIYohS^z=8> zoDc8p6Dxdlf@&;HKTiGBbsC{-LK_U0g}a}k>d~_)Dx37m3m=W`=5}@{>xU7Embhx4 zl!9f+x$4odP%;P=1_@+jytV)YHDMyP^b`H*5$iiX=aaTUweY_XI)$3l6 zzVhrYtzaC)7`2?d6YU!WPM_u8AZ%e_X=Bx*B$xH?iqs|yWjRY3-hLksTe~@mtP@GtTnDf154W- z4+mFvHkJCJ4o@P6w5S&A@?ZIzs@tsFO&!eLuI|~*T98~yyj%^=ey-9hqT`drHz}~| z98R9?s;N^^)VP)u`Qj4$(U&eMw3$vi%IAg&cI>&9VHy42Dfm}tSkfiqe0!o~MxR5| z@p4OM8TE5qTwIA}|AYNmW88ux?yqQ9j>JF{r@Zj_cjLwUG{26u?~U>D7*CoI#`Y1Yu$rU6kMlKt`6N zsxy9S4W&lwiU^DBgs)@wiUV+vL)sZtrLShreeir4At_J>fFrrU|3B3!Bau(W`l6e( zDbNp4G5i^bBGC9Od84?OMwQQoQ%sHsx_hA%`bl51_tFPhU0p*(<18tZ8PJl0VTk$Y zZ2F*gMRn`4+g+(&yyJ*E`U+*;t&+jX0Xl;z^D%ffobuY*82kqG+tbt2=pfCyXwnNwLZu2ro$7x1_hg^wOnq9&)YQ_GlWsiyK2t*&d%El zsnze&)Ni5y^Boe;Kv+v?Uk$IgUnm<3`FaoDhn$YuLAhB2MxwL~G@*k01`KGx7Vo@p zY$XB}ocIF0fFR({IGDD-4G6%oG7Pq%sk2Vs#dhV~`-Vz{FYks%R*E$m?5&zF$f0u) zc4Sz>_fTJKO3NlpwM-pO^;NL})9#{Z7gAaGXZ>y{{B+z$87}ARl?;0qat+&$?I^Qd zZ`8;L`ll}#u9uC3n@GIvB*SlX6hM{ZD(Yw%t<=^}C#wDXqAH>GO=ixj3A4wQto)A- zRNR2K|1bZ=f4{x2E*Yna`xNA8>FVYJGIRLPM<;Vz+^4*6UcGtspHHHqTw37IATB*s zb6b#w8<(cLx!c|U@(yO!ATC`SOSez2-tzNs$$@OFKe@f)d;6A4%E{izMf0Xz0!_UQ`e()qE z@`rM7$orb7yfJTt&`1xfR|hq4M9l5gN$l+%Oza-%zN$YsB!@L@=N=QmAviEZBr zz9q>Vywf=Izjfd7%58-zM=_5-$_}W~ut;rR^S_}WaCvo?S?Mip;*+BR@`-T|RZ)h^ zxW7(MV-RG6Jh?Yqs>9#Q#Qsy*&+mU2HFr*Bs$O8xG(;5`74W{jIg=M(9=q$=FG2X` zDK8ejKR$o#ek%}&GjcRlM){v?2OCbB^xgsbk6kPZ&ldgD3MWz$KkzTF-oeYha3{gy z3`E8fJ^V$5vE`aU zaGB7zH%ypXw1!NLjKM1Lose? zVNjv(Q_Z`A+j{e0fxYw(nP|nu@(>4Qs)zZB-<Y5$WhD9+-1t8;#lLqr zwf}+}|5xq!KV(*hDCiO+-a8XlC=ak4wpx>G>f7VE;`*!EJ(nlcAADBY5wV--Ck#Xi z!=9q@)R=H%0!ODQ2rrWW9lON+6)AXG;HNjE0z=4GNh~W{GmD-;tTo1o7r;rCB)q{J zttFRSOZ-7ey3>cN;etN8ZNztNE0Z&aYn7uP99DC!7x+ zYs-du4Bj7v$*d2^Y1sA5wYI-cme6g=dr!S3G{frh!1FkgKBtJp^ONmZ1E6ZkXSw;B zEiqevzQA~_K;MKZ;*h>;8XH*94%uFz5ieX>%61^{P!>P<6!hfw)$wdC*O2)Z&&l{& zq>9-ZiWFXe_SYrTDG#oShEjhi|GRS!+CJJ60UFHz{)9ih?U>4y5GI-c%R9 zIZpp77Wsiro@Lw-VgPl`eLd<~T_c(`ZWq5(TRI9wr89jP=?aKa$5Rf<SfX#GN z32Mv<6z*??ZF;RfQ7E){09DQP(3(@`=1sDuBZA1_=7Yzu`dd^K3phi}1=KFN`;Shv zJY&r_LPko$sTebC2AU&nC32DHUaJYsN3Q~F)wW5R z_t*zNRc-L~h${Fd*?N2VaXB@-)6R%AJ^sX$`!na%U#&yPWU(VHVU}fIs}IP zGKFgiRfFAh8r1FcIfWQ6!=9bpxcBOYs?f!)^>(f&Jb5(sY+92&47}IM{ zX}%zMmI%==;s z9$(lM{ny62s_J+m9$JN1mg>h=W#}Sb`<(n?B&rP-q|O_@Z}pT!mZ&*(RQF8*g9glx z#fGE|liF?_n(e}pvqI;4!^u;RYiG9RF2OMt#1r&6v|-#$7v-A!tEGASG1ew`5A%k) zOdvM6BkBfe{qgFfo$S?X3fg#nZ@%!tz#^%x#30Ww_}YVxjQympJRDMuoG@5 z*}UfEU2w=J&}`bA%88Xs20QHPv)k)UmFarx#g&|xq*XUA&Nx{g*9e=!t`eAj`|M8U zOua@Lf0&GG8WHMv$7-JU3_m+vp01k>9mT1D?k1O3df|x|O+v!T7P`i=oHMzoJtD?a zW`PJv<sFEFMSzolwpaBZQ8#|2T8gC9KU8N1Z>HTYR8f2oOxy9Ol==_TKNwr6zGk zgQt#X`b9H4U54ZGp#63pBW5G3&qek! z;b?h{0%tE2uh!AV7@;Ol;;;;4L3Pkgi0`(u9BIv9*(^mTc92g8jcdNLa5<~H{`4{U z;G}X-No;g}$ERMn7quxqvhus~nV~k>+4#uA{i(Xr-Q?dsX2GJPQur}tvkm%Vi7Io_ zHIQ6kCe$)Q)tpJ5dDOu%4y#^IoM|-ylN#;rRIFY%X*X3{Xsf90u07+hTaELSL8e2G z0@#aO@H4uiQd-8z`##Xd`h0=wtNIyoaUdcTGAJ4vJKK~lW2*y?7xPxm!Q0{s-ht7Z z`U<%0ABoC@K8TMcjSl?cy-1~t9kH69W3_}%TCAB3LSh%_sZWgt4bfE@191)7!vhHg zOEk?FQmhi~DNQVIKw2>x*y_i?`Sd@@Euobe`E9;=&UGr2t^^07vYb+rcr|8Pz9A&y zV#R^7y^w#{ygJmKD<8;qbD#^7L_=Ur@{j*$;Kt-0hgcA5^1-lQ)hK{+9AK|PpF2kA%1d6q+dqmmMHePC3RwrXSS)Ux=L=AmK=Gl3c z0{Wkk-EBE|G!tK5R%Td4@9!zk#Ipxi#dzhLI4=Fe>n74fSaAd0aJ|Fa=?KJN+F5R2 zad{_Sg`a|;2s@cVJGifo+WboeeYw2HM@ig%4+oouGce;yF*3P5;1jY!vG>4~d!)j1 zUWOw^k51CNmhd_=2`M$dy2rg%KYl!8kv$0UTe}%(`hl;b(f7VkcnjTjs5dQaIC_I@3k=v(&KFv2_xZWp3r3}|GtPNG*wk|B z=7}O5D+g5KO-tq%aw)2Z_V)&_5;7(^)7ZEp%%0I%N;v%7n5cp2L1}eor7DEq`Pw!lPk~AB1#e z8sX(rQro}v8V#ld>^}R1iyNV@gh2|u!y(=Yf7(MD+sT|8(bady4Q$FA$f;4O0>wVA z1gxR#tkve72g`y@XWy|cC4xy9S~~1d>T5%>?q8V^bq1W>n)e%{4UT2qiF8oI_7q@Qc3DKQT(k6V@aqU{)H0IP63qQlo=X_LwW$L7fJ~)F1#Mq{2tgflKF-4vU zKY8w|A5`NEnlrP_N6(zL^4dw5KVfMjLFt*EQxhQdOS6z9-u9)q_pvC>CmiGFY8Yn) zM++Ej?u=+5v`sO+Wzz@CA1mo=5M$v~*)X(Tr_Ld%kT0p2tu26lo1sxx(3WKV1RMD$ z?uVVJe%{YRGKdkEJlp8r^l#(Do(ZYsiALt+8F#qnlT#6a9aBTD1%61YqVdS>-xzYQ z&&}S0F7u&wr(C5Yob2(93oTu;k21kbx#Nn;e ztc-;`ijXtXn-*U1iuXOxe;P0{yrFqULYOLkM0aVigsPxY6gEc-kOPkEF93>MF@mi= zh$Y^lbZssc9LV!iV{yYhBWi?i`C!9BrrG-@_Ubv8Puw<@|H(cz4v%JUF)T1F*U{iQ z%@kOJlwYC4!Ulo^#X8u0y!sQgz~60Eg3nb$P3Yj*H@HUi2`r%@&owdn;s+00aDZC@ zA9gv)Xa#bT+Nr>|VT*fCK<$?q?NAm&+iS!_kWh&bR%gp_`2nto`%il%BEWee{sx{| zi#0vUfX|}aQ}nf{6F}6 zcTfL6INjGKN(0X1uF2iVIVNv<;MrOn1RjJbn$Whno5UzPsl=l2&zq~RJWETcsP4CKTUfnFW`?AB*~LHb|mI^}Vu>`^Ym@5>FqW zDy_VLip6=Vo!>So^HL) z1>*z1{tmDNTX~)c!3_%yw~VfeaB8lTW=3YhM>Go0x40(WBoS2Ml#f3(_f};b5&t}Z z!N90Euw4tbn7QWOOqWf9v=Sr}i(Q4*uVdhg@XfuACk`tQ16fjd|6CB5T#AD~;EHA7 zFRa96993K8ab+9n+zF4tL*s0^Dnn7pbu;Us#M};WbU;c2bnKI)&fHX&bG0!clc^5Chxm&# z&>#^n_dvfLN6S4~Fm+?ly5ItLBZ2i1Z^d{3{_Xof!#*e4IRC%9Do2x5T8ETl`dQhn z-(jkU$&L%&Np)%K6HHgbOMcUzU=nf_69ZL0HYnH6^1a5u>GMN5@xM0tQZ!7mXEe>L zI7t3@(_rP`QdI38a&J0WtHg7sxOPq!`gqMwwR=56D;N7+gZM;y`M}s?PT~Kx7L{&6S`|DU-JX563 z%bXt>oLYPH*9~@rd79pBBr=x*8*b2#cWi_2-UjD=lWIQAXhvE*?X4*ulICu4w`K!# zY?8s>Bz&sScO?fw1~zYFC{v5w2hX&8lHm&~oE7oha7xOmfzH!^1|sQ7(L}{GNZq~D zLq)R$X>HRZEL|@|%7D+K&>2|DcS^4$YqvKxlteUDoy`pc)=!)ox;GDAW78DYvs3>X zDz}oLZP50U`zyp=A1a6=0T~=CN>mz*4fY*!<{p1ibvS5FO{C=!;t5f^JgN85E#{%{Zs15r^*@LF~!?Kk~JB zZEjymJ&Mc78)$8zh)3$4i3_2oCVpthbHRGe?joW`> z&>Gz)+z~`h=F3h;wTjK#FTm9rC)%`CQDvL&P}z|$DoQ!OZJdUL-}AyOr8_?Oy_K8%7>U9NrUr93Ife@Ib~H*O{w1M__2;9tP_!DyXr z=8e~lROKRVdR=m#8(l0+EXkS*)T$DAyCi)uGAGsCkaAzM*rIf6Lw}Dh0{r_3*v_k$ z1>2NtGdG+`h$WtS_Ls~)$eF6BPg~jDsk7OjHL1-IhO6~jEznv*dDlJ)CSvY$;H1oa zX5A<2g%FPS8J0b7TAsDOSxg#F6C_zowtg2 z?V-GD&&oOzc*s1Da+~eFsDc+p`l%wB=xf~k)PQD70?j`MDVUH9GSS;i1eec|oOC$* zk+I3;OX=9qCOLZY4UK-gh%;*_y?9xQHJ4=wwr^M;9SGXC$*~J*A$(ijR<9~LTAs2d zxh%Y6Innr={avF3ej+^d1 zfFBl|>)*SJigZ0(N+iNq)Q0>v>i6ttc0WJ$@$Y_Jh)(u2*{G`Hb$tl96}ub}x9cS@ z6sd&SnVinX6W1~`iw9sWUi0}cC?AfJr+J`lyK&hPLFQZixX*g9Jkg$L$8O=6d#%dse6!>lJoh!wae0u5 zr6J&wxcqm+T7po{sd$dn)5QV9R%#bRR7ib(2a+wGHMC&Rr93;x7oVl9$6ICDmK!1d z7X3uFSpgonq}Rc6no98 zow3AkdRPc&aS$RCP0A@754`kLJF;#@y)6?_*e*)4P`f2h7E$((BXI&H-{g(IU$Hg3 z*`eLDOJt2*G0mKbiSNc6{l#F(5%L=;=4&+(7F2|3=$; zMm5!~QKP;uDheV3g3^`VkuEhVAkqb-H>HIh={-@A-lTVs-a!bxD!qnYLJPembdmre zaN{{=-0_WZ@4q|lzl^=Jv-V#5Su4+c%ADYtX~m`|iP;o!FRI}3l@yMb(rd^qGZh|6 zTpe%GrH+LL27234ookc%k!F7>)CN!z)|8+PbGF~vR4?+GmJ0`2dg2j4u8iz!O*27v z-vpcT{95v!LTzNmoyUm zDcR{Ct3(E=ed8k6F5VI>qY*$j7pU{pKfcE1NpeEs2F(4%QwZ{aaEe3X|JN9P`m4%G zSG`K3#7A4Q7A4#-ea1`43|;=Al7k_>FGh4qalf?O&{k(*_s~jHoUm|ZxS$MEgD2E{ zlPOfciX_|~6LCM7ipyfTl)yLDT=K%VTl=Q`5{g*%ZRW7+?7K*Ruc-CsNkW@9;Ya8S z9COb2Km1CU!2Ce;C%=28wcx#NJ!tguScEV=-VD!h>d&k?a5f$PnALr7JNXA5vrA?0 zf#2<6>Nzc8E0cNn1K*pehD0$wqNWp)m2vfb_qo`tf>yg!m$vO+dCQ>OmES7~!F65G z?6)OeSkf$;lBYBhMNYOD*034=XY;co!<%>G{oa}5zP7jXq}I8VOrW-&P;fBBgpwVd z&X&5%D;3mZAKr_iDE+R~ef#o`?bKyXo;GP7Nkm=JC9!>C^Ehl)AZ6DiWid!n;f32{ zw|h1u(hjl1d`weK53|Z&i1cw4)|xzWz!(ocW*UCXJtKB0lDf3CACrP-GqS052T~8z zMq?w@M{EBX9-pY;jx15jgAi{T=~sQ>I=27b=iTDhziD*b2xEOIGe5oaE~$6gSE)`L zp*`*a_<#-sH#<0`Ms1QoO=_jUXYdTi_+^iLK74Zjyz->M|^Pdiuz{sXMb(eT@@ zGTMm4>ofX(Lu*I%wVAW_?uw)a1$;juY36Z(gLPgeDPg^u5~ef$(P$xcmG5e1ReO`q zX)ih*aD8&R?;t3^^LfTd^A~p12)FfzaL^yQRe{tWJp}lkgwQ7w*JRI&f#Irt9Zl#- z@&@On^VviqrD%UIB<2++o@?Lyr4Rn7aB*s{jyb#a3?D_0KwLHf^^>axCmIEQfzk9u z?d>kOt&v0L!6cX(nFD<1+Rw#U^{T`?!9k%UX0s@=k1=+uE>bEbP%1YdEuf7$ z+P+%=+nDTDeW-P6Sh~9!1@y+;6~2hFc`Ix=6}RmLLGM=>BM_|@U74z!n2O2~wy-px zDbvf%UPPIjRi{IC`AAjAvAajJN~KM3hNgfC?(?UnWij{Zab$?+RGlpLplJvJ#^T94 zuH4-an1Tb2kalFbTa3d(EpiPl-2l251OR)L0529l1h#e{zf2`-B7E(X`^$UP`vm+? z@m{l_rKW(7rirhGUWhySU*xK%i_5m^egSj^tdj0vIQ!^6Fb6P2KOOulb z))&>DL+#m>+0Ggflutq*%hAg|*llC|a=7Nf_{m8QGstXy zUaoJFcTDhQz<#CR!PV9J5y}f$#+r>iV=|n5zqd=hazOof1UqaFnT}k;kfR%@p!t2T55HTYrrRe zC=pu~oC6}Z22WTKr_(R$o=o~gpu&qUvQXO{SrXs@AfIL7`$DWWMuf{l#ElGm9{B<6 zk&eCjj9*Nek!llbg%wEULO#>OiROS^9N{@G`= ziK?$UtK7!(!4F{&aC`krUL&zq!J=QOxQ=UUM7=%kT8yR1?Yxi(!Qkf*rgt?iRJ2u6+?>#cgFX`}o<5We5F^P_ZV0Bjtr&8((`$1-0tnRWd^h8z7|`#j4veg5b?b7j7R)ESM?2c8UZr8^n*YC$T1>uw9#7Q6;Y_2f86&{<-zBhG6mL zBo(7)otOr>IV^meSZ?X&q8;A`xItttZC<>=L=*>Lij4KsNaIUxHge#j5YO#IdWjja zjR!JJ;ue?|k2Pzw?5J-LTSe>H=}iCxjXGZEtZ3FWZ*tj2W%0MK-KR@@-dKnnp^`1q z%#Zz4E^QSN!}WY1+U-a_YFCsY*yGVWOQQd97a^tnl)%N~ zq9EL|rptVdOg|mvD_4&qftJH`GjNE70JtE5)gT*WYWPCh`q>iM2zdE|F}b6qx+}i5L4VITeKO~6g01K z#)cJs4H+4V16C_r6$!ydBYMStHBx^#n}uf2#dAnN?+hu49SgugOuSA-IkbmA@G=%8 z3(OtoxsI@-w_!KI>!wR+X&~MGC3$^!GT9|9=+W>}R`W*xzP>Ny9Jo0+iKWBv(Ns%V zcifmQ!mI&?TlI(=hL`Qfbq*gGn77oFhH;tmT5|j5mW0q=?Q>k4(!V*Ye`Wv&nI>#n z%YK`7^iLagmv9YIIJ=8PcR5CxhNj=IeDsrx9Hff;fskw|-0_kQ46)x)4-Ctc^SVi} zr@d=ce&Bm%B@EZJXLeud%}ZCB@kygA{dRj(wOd%n>7Ut0)cqq)OCxG(xA*SLhm|;Z z2aINqAl$t4xiv?JXC^0xKeS~f2#!NDAWkdh{KOM?;tkXWtvkAP6Zm>Px`gU)l>WWL7 zZYjj2Ci{6*Tki=tSJWdGm$V4iKWWCMJ zjY1%G#k`Bf(M4WWg#7(vebf5PLsTo+M%T&O%+t(Q?>KJ1FIyIJ?qT>8L`h0wJ8Y=u z8xJ#-Uz!L7(yBXIr4pA6s~Os>cRhr5l8XLJX|x)HBYu^Ol%FjZ*D>886ScUrim51& z9O2vLgS_1F4y@`SI!HWf$aL&`5;Heqx=kauOK-xBWxL7-9q-Hq^7Y$o?<%Cb>j5M-PCmo~3z&`36O|KXT1wR%FFgm#gyO{#6IO4R8&evl0e&yAR99 zJCJ9C>_LZ)AP31ybXsVtAVe<)l&tG@W~R9vyLsGf^oH@KHKM}HFAbbk;%gjT?bZ`p zD1vxcWfq&7pWz(fZR_-9FYlGbZuWbZv(5?(3|2pbNuM3%SI&0G!Mci12zoV zYY-vbRB14y_wQ4)KmL^6bRrP>6_LQnuOC`m-|{CSH3qUa{jpkZBaC&#@!u3e+W*M(-2Pj)XZydpy^;Uc?fsPeZ{42g z|LXR({#&;<#_<2RSe-gcNa%j<48;^jhQaMejO)9Hao@%gjY70i(P!9=K%pa`q*M77 z2RfSBnCHj*$Ou;k(hh4+s@doMT0{AJj0o;GUX(O1c*bfG;V@ZUko0MaQvaU1oYRlpzmn6-47{4F2*K?uvVO2m=ZkQghKV00xef}oQK8ZN6rn|} zT8!k)E5cD+sm0ND52F@TmspA*p>j_HZzVw>j+i|ER0rF)>egTLa?a`^i@01fGTZZ6 zhQ`nFnm^kH6yPyMO0^Hd>Yodl$!THMl}m7RbXa~d7w?XMNv{V6wT{&-SsU`fp9t2( z@^^fmENVni{afZ*t!fE%M=L5|2f4a}f=CIFjO->OxbmlX&UeAhdZg0$uR2lxJBfqA zyrg`^#$sgV>Y0IIY$?J18bqqaW8qTNlfT47-6iYNB=?fI5MP`1$H&A(%cC!?#$rpt zfC~H*w*B_bf-y2_OG4tf-Tn-yoN?C9wy<;7r{)Hjhxvp!fs7%$b$o9nj?}Q1gvL58g#0;0ocrJ+gicFilfAh3U)|uU^(G z^6fvZcGn5Wr@$G$dS2b1>%wVxV4dWrM`0JbGJUM5K&J)_P=?YOM0Xm}8ECK-n#3v# zsdn_cR#huv4R+N%@+6;>jJ~P-(3cdIBhOOu@B33Y^G()FXebaIi%vBHS?6+ zxEiX{rHrUdr7dV)Jzxm6x~tweP&&U;Zk3zeH|X1VxmyI!ZP{CjfITABMNv=%8l)MF z@*I>z@U$3QB`etE@QJNCJ0*LTM$pt%54vpOhlwWj^=#61hnB~Dsx4pjh8Oq*$4lw3 zn-WW5MboL}W#o$NwhfkblP+cJ9F|6qLsJ&h_24N0z_%?GURT6Dz(1(aogZk&}BZw zQpbw|?)qc?3jFZU$L5;=!d`>>g2I}Gg@IpI$FPFS4B-KL%zgNZk5;3JgRZtdBAL}6 z8{6gCha8@X?+vg^9X=jv?~iLQ5}63oxf>-ntU_0^KSX>-ag}dVY6zg-1`X9=IWEl^ zcv7NsOP?*{wc~oIvE+#TD$5W2kS973dwqVl+r82^!a;x^_30Yi6|l0am0VZe7z8ua zFrgfXq)YRSDmci!+&fp&Ni)2ZO#7AYn@^E!(!9bp1W+77A>`=dKBoC+l78$#Pl33j zq&iD|8(SrKqkp~A>tvVOV^lUtf`;SxtVxAPe(pLsj`Qy^mB7H^0Yh|lJ4RC5w|Eb? zzM0tacv*cV%0&E5q!AnYp)2~4bO>avyU+I`@#yh=Nkxy(NnUA}f(1fF3H$9yc&q1z zx|{b`eL-16aSOx(M%9A|#|eG&9kq4mUsreQKN7oWa#jY3uCfdPG@=qMt?Lu?5VbVY;;q*( zSG2YGKB@0yk6&K6pF&~bDZ1_F6mg9LyWB{3W4Zv%dRyBCnA8l z4JAqmCt+fK2k*n*B{c`WE4MY0PR73h;c**k5 zju@yik9h{&Rvvy!=Of2~q^`$ln>wf8xGr1}%sQ@D!9YRf!=sx&wjz44ZdGHxNWvoe z;n3m7NO)QahpfA+t05EfBy@E`{YAn$sjR?|qk*u#;8>WJSEmXBQP0hGN6s znVJ~e3tq0=L=$rJB!m!Ym=_FuT&Hke^P&8nOcb9<>Sk@A?TMH;WI#c}7{QMlc%r2! z$O>lIsxiNi%*`AAxL$Qyr&?iK;RuHzNyl&u~k zy0tR-1tr10Y>A2BTEC_V9!o$jwixyX+@ue-SOdE3jXWae??jfrr8@ZR762LsHxz>g z7w*1(yV$A8nnQK5OXXm)U)IECXjxOC zv%v}wvAGAlAQ7mEjPF{LplGKiyUvo<*revsg5^YI;|m>^K_4*CB0DDtFKz_403Ur3 zxm7y}hZF9a=Ds@_dW4~iGTgzzm7n8ghn3JQ)J<>@x(T};XKLb7p~(8wMO2X{(9!Bn zGG`**Tfl1BE~!0za9M_o9h0N1&R6Q18yz(QmO8by+b(wexv6;Cva_gt0B`ad1zT7c zzKdu!@OTnY{@jSB`&kzCXH^kfN5*6zgXib_73HbaUe!nbX@1GprfZa@Cr=g+sDOag zH%1d9rOk$C+B{zDYAUr$C5HFLwU_HXD|7@78i#CpD4kT-3@ZHHkI>urH_%emwKwb_ zn22_Z;pPzXUo&%wV;f6owoDj}*ZA+3n}`SlG~?b%mB3o+*q1gcYk&_OuVdl0a^A$X zv=v~LFYR+?59D>wUC<)Z>8O>N;3D3JgH$5Z@hQ^kEj<&S6qe*HZX7UPgDo;W(Iy{& zVuCR5Cq*xVwTJc_D)}1S&q6N)6x%FAVgx_uul5;YChjVkNK9Ssi z0Kam}rX;`hXEfU7hO+VI!sp)fq3sN_!2r9VjyDYFN6|u6sS&A6}OXB|o9lyqZXi{Qwul-u6i8ipqce*!XkO zCWBtp#`OIhpG-by##m{JRQluVIO`>bO#HmzAHgZ{goRnQZ@n3x3`0VXcc^J6J{T=( z1d=vNg^%$vo#OZ`q0A!r0v_d!sc)+|f)5s>d!LJ*(QiF^0Y6=vxq$IhR45WU4bMgY z?gGcq>>u;9H7FZrjNswj^qV^#rmz}8H31y=zcJtElAw(u<>gT{qT_4Ee5=y-A`acH zKfcomScN6q8uE^Stb#`P{D&D<=1@h?+;iF&9>XJPcpffvYCm*o_+rk4S%PMNgFT=- z6B}yjVy_+)NNS9cQYtB=3Uhfmq+i)v(fAJSZ#PBIg7*7o(A+HjC63#6K?h6CSEel4 zy;gwXyrH_ICtkAFN|?8mR_{IQ^-c7=mq+aKGW zYjY3}5Zi3YbTFx&A#5t~e>audsIafZv^Z#yKT+W`9c-FOGS^qO8Y? z+C!^+eG(g6o@`sJ(La^G*DuDB0Ur@PVPU{=rF{=&NT7bK-bgu~LgFu*3kVF|u&k$d zb1ISIU`UdAe%ih6%9GHfac`74KD86|%exKr5u>R3xirBpicQekT_G5U(#A}fPlXnJ6;#9X_X62q|LnhP7Z;i9> z4TrVoUCN0`z$z7Hzu(&r!3K!wbt#0OD{VLr1~xu2?V9DaO^>|k(Rt8cCK%iU5B*>~Nj5;Ndh z5k+riJBvOa*Szym{RiU6Kp^425$Xs39QYm_O$t?ga!FQ|wLK#6XBvHOm~+N})juk&;? zFZy;=RW)EgjfTl0b7h=v`#-N%zuNTdBiFSP&ie6gY3-D^#?nT$E=U2mb(x(81C`Xq zJ>{p=a z+ok81u*D7Q6S-#@L}>mPW^Be>2Cv>-`syIaZeeya)0v$A+yeGj(eW@AP8zsjfj*dL zN&c?5Kqvip`_lGk_cRBnNsacMryrDALd@4zhN+_U`xcnbWc`oc3(?JLqDG?0CMT1M ztG@NKylBGACDxlA2%puP$YlXW_4PxLag|wcO@7&yc%3*0PqX%=f~Q;8Su@tOIlgbu zv5IfaXooQFGCPndZ1H|?Y881l9f}bK{?`=xdt)yz*;rS9RikVCs{hqeavP<}x`1bW z`MrnPneYA1*PISm9y~ZOW5AXEyGl#ko9sN->N7dWLK^Eh-%&{bgi$~6a(7tDE`~ZF zSG9-Rf=F#Doj4M`X)iLFM$czcy(up`mh=f^R^`<{NXXutf-q#Vjjdfh+HW(ST)S`o z$(n!6XxcSQwInawP-Q0Dl3VjkT%gF)3(qW%of#&z7!1TwAMSX|cspYYQTYkyXKR8n zi#rY-2^1^2JnX%&x+i|=5V-4=%|bOuqJXWSmlN0%bXyrQ59D7mq`7h@UbekT?Q8%7 z20GD!kgIu@Fj=mRO=uCN2AZwdbf|5AbyxGlJPdszGLE4WWS?1NpZ;*M2yUk|S9Y4NR zED;3)v5xPwOoD3HDwNWEr7PKBwK|F6R?1OC{T-Nv29_Ss)d+d(->xt>0&_F}T|XzMNubSDv26?IrgAhI6`vpQAAG2#8sBx8>TI zDcR@&gKKRq$tZpg3zflRi&FD&7ru z+8e0K=YjrU$zFYgfNa}!!Q69U;G6xn*6G)Lmf@E&)y|#G2neK6j6*>y^)L%@ab?&Q ztz8n@@-3n2i9zk|ahVSQHy6(sFpCj@3cpu}hux+T0*HEMU$*{!C;88ibqDZ$1`;fGW!jP+$$gy0N&TI+nS^**%C?&o?pjVgyb z7aVJGq?Zu_fz2TI(Fil&BU=ZPkKS8=7UsoJ5z5jU1jq~g)a7?*@Shvx%eayPb~dd# zd`H{POM*~I#X>{t)YK_zdAG;ra&T}EgMh|;5&OvxTj`4VrM+gc50(H8 ziLJw6b;L-3hbT?+#sDOXAv{L!yLM5l;I;R>Y4x*n-B*kkt=WdCwF6H1hS8W-5@Kgh zfSqj3gqaU@0{n2491C4 z&Bac(pS|F%jI#&KX4DM_oq?);;geqCa*fxSw0=4m+~|^}p$R6v!|`Z#n}1sqj2p=^ z?ec_}QLyUD$`uWRGdVlXhn8l>xzQ|r@;5?s+&|R!vJSi9F(>SAN>bNR=RFSf%u?XW z>N@0B>S3;ln(n~h9PhsW?8ifVB~pTJp@rEKA(gqkE3=yw5hP6iq@%G1>2>XWh8jtN zB}EVerJwSKJ1)(luW&KaPaYo9iRt;x=#q`%+6cCfJG1RHQLOS0Z@3onmH=?9Oy@85 zqk!24xRrs^Ez*w2b`r!4bssHve338??`gB2VRyqrSi^nf1bg}j;Juky2gFSEyfbqa zI#mYk;PF?{{{K*^@CU@yb~Ji;kD#+)_SwH{>&U!}qn#XfK=au>x>+xAsca@lh_A;G zOKiRO)eJ%sXSaLT_>{zC&bIZ{xL-fmKlba)(4Y)|K+#2+)Lk5eM_DUMb2wanKeXLI?D`vOV zKUHXHSF3fj&l-v|wE;B{aouJuWaO_~Vx_mdwd&V?V3&LVkiuJ+w12)Tdy$IjOO_5& z6ug(Y+xz5Wrr@nFZ{-PF*3kxx(Bdg`(A35uINr6iAp62+w5RfGC27g>Ot?0WTe0NC zaXHRee@IKyShZtg8he-dOvc~;=ZhZ;0c)r}E7DoUL;9VimS(=O$yxYxA1ha3jk8li zQI2o$UM3WQI7&isl3!wm>zEt(NwH`zk5gAqauvfG?D(ru%$esC03Vi9Yf|Why!Fb$LBHzQW2>^0U~)U>2TjY;XGd?9)qX{!YkJR5 zSgOl*$R2zE0=~*v?`z`mSZr0<88&0UG-ze6lwgrBOJ^-KS#SeOtk7Af#r&77%&d63 z|7`Q3Z!kDfTjO(qWpFui9LlN51n|M2wweNi#?7Qkclp|V1}AjnZ?5%`tJX8FIo*Qm z+M}m8G7f?#nST=7*>U$h&P*xG8pJ*2e2>@Qc}he?MC2O#%a0Bm`*d`#?-7#3p08mO z0Y!AwL_+6{H{&alz&2CAnZyNJW!)BO_VQh(%hR5*$@Y*%)sK&*4onuBYJPt(zb?Jc zdKgqD;b>%>4$6^Utc)J!W+~YUaT^KH49SuMpLrkct`m4-W_0I5r={%&GA5Hyt>e>J z{~aI5&F@#BQ9;~{VxucL4dD)ja!MdGm6Hu2;D8(gL1iIyr~%dC)q$RtGG{EYoR4Fi zmA*84Ad7^EzL-M%DJ(D!U`jB0s z&ZX{!n6HOhyd9E0P10bYd2X)Bz;I!Rt;@kC?3Jedfz>Db>*u2hVIviejGJ$0KM4m= z5$niP$zf;YNL7u2B|lnnlrJc&7Y94%4Tb2$>jjdM>boX=dtWa^o6Da2w5P}O>f3Mc ztx@Z>VNbFH8(iB=&Bb2d5ia@Kv<9)%>rr95oY^X6U1%~enhW(PU`4)gBHA=?DbUly zXosnZMJ5P}SG$UdFcDOLMeAzZ#A!MfJL5yonuhY{#)rF2R2?mBHlI-_n@?}=?!?H{ ztnoaM7?co&x(JPD+rEjh9~j9XQcbS9S1q1`IV3azsS(-($M{y+8=4QD1xTiKJ4hAz zL{DG~x;Lohi>LZ6yNAnGZ5lK!vq1XNn3(Ygtlr~a=B5p z>&VF_?+{51aDG9}ud47dRVwUW%DRmuEdAgw%pizB5slr}!CUeY@@O6Z{#T9a|7!xR z%{)PH)nWIzj!otdCvN>00SFy+5dPBx*1|?)S*UbGYEHt3NJX5;tS1rdgp*$=2tloH zN!_1bUjq%tvj~cs1Xy(IODy4N@SpPYxX#9Bt7q81I#wSE5+YMCNY$(QQ;}WS*Mujy zb?X6v>Ya|pt)^6Xt5MTS;_soiuL*~2KJ6y5D?hj3A9w%1uYEjT{jk)q$#Y~+_aZDd zxO4ZAz|C{(7UAnWzBFcTyrrdamMlw|ncs~jmkEqZw{AWBJ6=qG`EWF5>(piRFC&KB z-((cgUzYh>E0*6;5@N%h6TGh57i)}!s^wcpT7SpB+x{O)^;`Y~=IO$J&26bNb>gWv zxl{hmIiYfw0NUh^yE!!ejGwNrO}eU{i0nuGA9JxR_;u_Zk3{02dN<4Mzm!ksJOBS+ zQ8_bz?r|ZGe+N?bFaLt~{Pn}0cuFVM%5UGIpRb1X!S#`3IIw8SD~{OofwRPoLMbWB zyQ`Cm7nDw>0j9C-(eHcLH6akfL{J5yu*WrOMLr`_aL}12h09GE|6bwqJL~(_3MP8v z!yJ0PA=F~fVax7C%MW*E`O8lPNCi``q3J(TvX`o`GVs>}0VNOD`hcF#|Bylf#@#Z7h_4ji#|iMxBP zzqpwyLdxg(Ptvk9AEVYQ-$V6$fi^CdT$bXw_m7PuO+UPvVykEKe4S8uX4Xw-d9ab5 zowanw>bb4jzlPR`S#-1OpW)QhQ3ejU7i>7ylpy3JXU;qbrt#ZB(X1tj_Hhhqx%*Px zpHn$o;?CSu0DQ418@2tY^>$l)lBr|@&=RBlkrvM9;$^niZn4yUy}H_whOaH}Y`?^e zAI-f38v7xR=00xct+9~@GZ^n}ql*mYuWHE(zWTFD_C9&fPguZVe}{AfcEmhSqTh)$ z?(Tnm*)vLoEdEycCx@W7`FI4oyyqu&^b9ur;k+!aH*T$zcs(%2wXK47LM{_fP!5XM zX&zS&;zSb&Up`h7gxEAog}NJ3Qh@PCmTVu1J}o>-USe|u2zh2X{(fID^(J%_OzHCN zJBpR&9}(sSot&wz(8Jf1J{jlE9G;42?ieUb1#&vF8seD?L8D^c>GOg9N5NB-`}uIuxr{YHt@g0<=3CSe2lJELhq5}IA8)Z290r#EM)EMSt>&~Z5@PUQ1&7PxeTJO+iwJ?137e904S z7^Bn+V($M{6DjH4&e1oj&}gEem3g>fXI;*HW%#ws_*aLGeipG}dT*8VFMcr6keF_to|2!?)5Fow3g?|_UtH`SX);n^N;j#ZT4I7@(wc9{Xu?QIPd0~2@KJW4yC-qx5!wA^)vDqm zs9=Oh7D*4{?Y2w-Ys{ktZOU`8%!}{0li#aQF`o@44BU-d(5NbAVKNTApK?W+`5IVP@G?zJxN&#DXD6@LD=vGXN)J(U9xJ}5V=cg# zHKzw`Ucx|(rK>4S&SxBKM})(_Q9M;O6+A#`*u40_DxurPw()}P8nhOQO>}dtL)Tf`XdQzu0A3HUm{Z+k?dA*k*b$#Sc3w4JJ z#BG2M`hnB2^p~ubRRozSL8-ke#(Cpvw?ln|1la=#^Rr)LX;Sa|3zSTi$Qerlj?Pxm zs>E2700PqbvIjFM_*{{HD8VDWH7XWQSRFY88A8ra7~|8FxpSQp7~6>eW1V~oGSu)+ zTVdFdcS5T~=DdOu>Zbu+Zm%m{!qP*jmaLrgq9^=MiC@@Ip#FqvT4 zGf|2zIV*r1Jl2GPY9Wvg=7ot}$7rkA>^xp5DLotpW?BB&}xVJkK zwA3^+^;a{vw$!c@Cj=I7;n_elQe*7piP{{>=~WdFRqgV_?UY69!Z5ig{Uyw)Eple+ zy?{>R^MxtE;dpCbH~+Xtzy+U59}?u%knE~>E?O>w_Uh=NS)X?-s2 zHwM2>7pA4v+J@E0oC*@SxoBG|mQD65L;glGN$u@M)Lcg8bADl=%o$tK zw&p0?W3G4>sqKHNKW96S9_8z#?fi69c`9-?xf7|>EobGsACiSlN1*y5pOyK(dq+`y zFPjGcL*u2|K-l`E0w!YaQdz=>-GI12mNvlc=c~0yZ)d+s5A2oqoS~C2PE7ysMY>TL zXk80%g7fmDvO#SSjpAJRz6r`OTzYy1H~&JutnUG)8w(z;k$S1p=O;n{%ct^l!ny+( zq+l)HeAGkUbRmE35Vufy`=qvEMtrf|95Fqfv0AZPjb1xVqEm9?cfmO9w>6ELf$WW2 zR!%j|7jdQUlWh!r@*8AtMx&^Zta*AGD%>v@UM_mtHT>E5`bMBG%F}GovL81@j*Qg#T@MAve%~vd|~CP(#e?tQghyeOB;dk z!^=PJ1DXEbl_7ct@Sa$ux=NaPBUKh>_l}n-o8`}pVD|;2E_{n6VSPrq)n=P9M5A=k zyLR?I)*sHWb%k&HGOHj)?YJ>?(t#=MF*}f1uI+&u?Jd`J6r6jNq%y{$)UR$R@QpbbGVF`poqIN1ly)_a(_ zz(oi5ySaQ=@IDTcf>EI$E3sprpp6N06BU!J_@Yiravg;#T6r@e9cE6_vjP+KC^|W` z0We~}`vnM=d6CQw53s9neC4DMPIvG!;K84w`Yh~2mYHbVS_P!6(9`4B$cH+ULN5;- z?wZ9wTEH_VG1c@fcX-12lKgCR%pr>VK_QxZcZMoF&79l)cGmVUvq;%XcyfE0hrq$G z9PHiYY3CSiy$#_F_WrhxG8`6)uzF&5dPkAndzs)%(hwX*|4VO7Je1Xie0M`c!B8gi z^`9Sn0Dj+Sn1Kwde99lanaMCtE?wF2s&GtqLom$2_z2avqBSHqF6kATy6^!t^|SU3 zcjdBGU`INhOE+YsZbVQDWaAgXxgjj7;~5}wxiu~KHQn~h!DLOg-YboTv7Lc6gX2lB zQpba{FHd9jsToR{o!j0|zdZYx-AzwQJ%YKK!`c4=6C6}W{_T-%`d%Eph|EQn)yUKbD)BuP49FwGu& zY6-&?V>F@6TZAUW-){)+w4oIV6ws0qLf@vvzg5z*C*4jH2r|)h@gF;I0tl6MI#)4qK;Tf z6cDiqwKY0FtnhnrbM-!z-ub7%UiO#rCR zSSN$ynuPF*J4NCqU6*tM8i3x8R==vy%6+dO5C^>1fOE4>$aN7sCeIq=-Kug>gqHoYHw{c52xUS26pdR=WNeOXGth7|5mx!PO~zzZou@5S!( z+vLR8-7l7IyJ7nuzb@=}DZt~3VxbhFT4N#O0I4}hdsl@%blt8l@+`2~qh-HmcyM(c zAgsb;Q~6Kz{ee{OZ;_2Vw!|VtVW1^3beP%$&szP7g0xaktp1dyNn3$CE;hLRm=l2- z(~AQup9YsWuhJyO$5Yc&J)zmDD&yHF7~#k9*O)-TXco?+{szEeBe=~~Cpf6Ga0;1f zt`J?;uLpDyHETMgrG ziU?TZ{tx^|xnJB#k_GE;xRIl$S(_dK@w4U8B1p(1F1bV5U?&_0w%eBwDev}CV ziHu$c^^CvQ*5;THq`vj>`Zt)7{$ z(OZQt4b3$*-ApfK0t+aPQ#

C*m0E+yMn;WQ;`X-~C|2s+yw@u&3{J^b$>mK0wb% zR8>a$hx+@Y$w()(GG$mLIRv?$FAe=p0ir1Dg;`le^nYZ0tjrUruBZu4^~-47Ixqg! zkH!J50fo(}pGWQ1Wc$8fB0m@1d^-u((^BS!HD9Wf(l9;0pDS+Y^N*_2<_*eZV>2N` zbTbfbqxH*%C(J%c$EXq?Qa4XxG_2XmAt@ujef07ZV6&j$o`2Fjx3FaArpngxw^}P= z{&9AN4N;E=BU1*sa%>Nv?_S${sY^W)#u&w}4(jWQxkqaZQ)a1Zn>;XAG8PUKnyzT= z;>1aEh^_eFPxsd9|`Nzx^QjW>}rRLYTQP5v%hT(SLdFiI@EDDBFa2rRc=)W z&P;-l-1WU1M(9VB;6#{@T3kElH)*yL%1qpkl%|N8(!$s)8;d960nZ}dNZ}t^J91u6 zhkIudvR9$yt;$vQtOCa(rE&V4ymSK-?`zIp@bhUlLRJB7P(qYfT_`#BM})gC5x)^Q z8P=#O3CZk-UJwMeWQ!v@ z3^{*YPlh002Fs;-Wu1}5oQcW$U*(rUezxG}OZK;TsKyg298u7gEsew9@4fsSPUDwz zzAg_DlSYau{CTUacxaC(b6DVo;m^;Njol_Em!DLbElcTi&TgtXIvivgdvze;b4T$r zMFh?Hm~2cd?Y@6D-a9y}#o^GC{DEhEU9H?cBOMBlS$Rve)m_h5zZc%Sy1ewsu7%LU zv$N~u;0&IZHAzMGoI{6#hb#_GuMW3D4X=SjG2A9Y7Q$tL*T2M%ZZ3*>!JT&o#=U5! z7JY<8MaO1N^2@w_bwKURU+1^V7-yO<-VF8s`DNW{!_d*`7lVx1@F9T|MhW{ZKVS?! z;h4EDn$I$qt-tP`4zAbxq=}J%2rV15=>$qsK;b+b*M7(YG}%KBStlnN^xM&bL4WzW zl1B%0kcu{lUyjo50DWfXvaRpp_#{|(+3T&(12No>v(DkCPCb%5=2`D+i*hZHy#(Im zk{ds=TQ6?@V{a_BEG1;_{Tkt%Of`8vkL5GSHqcyHd#UxiP8*_4L&1q6&!Uxft~7_il#MxT1)nNWvnrfRIhN!UWD5g94~{=RnT)&buT(Vk zi1B*Eb^TwdvQz_pzYfWfnfvbqNA7#2c<_C~_+22&4pk_*)DOEFa3S>eSA1tO(7j#= z=lqMs^q-dqmUL1_hIvoE)4!OUT+mVtnJcoN9S z%za4(P3_epGYam3CH+|)EWcIQ_&^KecU;GEWa_#;azjQV8G3D{mNh-ISHH?BF)33)y`g|dG3d{T$a#uRJDrSG z9!vOUk$Z?QNf|pkJiAsE(lr={H+V^U=CC7O%h3rp1~N(z<#$sgAmFu0-Zuh8yNp#w zPiJC&eS88>r$|a$xPyG0bSQ+T=R@A(?u1C?-|D_SOyfp+3zF;yoLw@7W)4*5eBf-ib9lb2r{UBSJtR+7WTKwHS%V<&BWcnJboHOjlm&E1 zr*M<>Ue4G>jV_xlQ(U%ZCz53jGDphE5jyVOXU`9DW}f)Z-CYW&tkjeu9V7H7jB29! z%ld?nt1#hJy-C3vg>I{;9FUiJ+p$%}z#MX*X*Qv7L8G#^tnvW0NK^LtQ8x^0Y=PTj z$6sM)OG?|~qm?|L*Ky*Vs3&c{>A(BjXX@8bvn@_MxFuApHh)8ySwlpT6(ESSKl-RCXT$Y@IH1h#OWjN~2&wmd+*`5goy8`|%;@&bU&YA}5}f}SUuKO{-0#E68jWLT*XaG{1_2K65#xg@ zsZABR*}a8{3K2a3wCisA_c}V72nm#?*yc3R*W$bx!<3$g7;1rm55))tsa0@J{azAG z^H6zODz0zg^f>PLG3dG`DMh_TQ~PWpZ_GgA3QQfEzg>P8QJ&wWfU}ZU%7`Q1FGW2ASGA* zldZR1Lo!#dHxTD~>4Q9PPQMsBk+qHi8H7Mm=$uDzvEXLMF~>GPk9YvX`n zwq4rOr<2(Gs?5g{DP=_eW)Fc0?~QBc(4MNEm_<(a=-!Z%QtGt2-M7#o2)>uXseuO0 zgP)<1Yg62d{x-5Q>fY+fvT~kNCOi3)rMnX;eMtp(EYxFwVrXBkb5OfMl0X@dvVxs? zDM$}WuyV;hT0fg@|9Cs_c>h1vpUs|y1Y4u+t0$Y}cPXz3yE-aN5f2_*RtWiml z7v;@{S)|XwpHbGwe7$oxdzl@lDg9YWeu|@ZGn<579RdTf ziv~3M|9Uh?tlin3Hk8Jux0f9QC5?9E!if`oduO0YC2N`j`!O8cf{gH=aU~J`Xx@yz z?`_kw{5Mxl&KvH94ROn^Yyjt({p0ZnwaoKtiA_iGEcm>TR|MeCX`8p$pj|1Dh)21C zV*Y5qnF^Q)*KiC~!>Tp&Ox@KfJAD1Q#{H&0C#{7d{>mR8$)x@7k%M|1z>~2lozg3# z=Msi;%sA4R_(jrUr?Ge5s4hMKqaa1$<>LNe)!+pezL6sSsVe09JFon2cA=_ZloPrW zVfj&ShJ&}c0DGz$>Iwzh;>1`!p?&;wPUexu60Oh5eLc=1H=6Y$ zf`G|aTm0zMK1f5`v(!yh+IJ_)9#?1pM(z$~qFzau_w#l5BY!Jj=X`DJw7lbelgQ;40`C?-{lmj?ZOxN~w$_V7`)koEV0|Gw!CG3ndi@o9 z)7njW)sD(cRMp7H4Yly)SWmycU_0M5&`MlS)@2=9*2w8Rm%Cbfvwl~0L+ywoT?Px)6NSGC`CV1kGzSA^j%Pb1oKbDSC{qAqm@3Xt2w zh8gjx7Ox=d19%bTI#cuU?r{)Z@tq|X=(y)yn~W{ z7N-_4x;8Z58hcpHE1ODrDJ@sMpHn$iUDYweB#+l4jcGo5hjOjt&yaShYu3!V zn8jd`^?T?YYRX+9^F%4@RdTm@n~iaQgcRyD=v$%~Zr@=%MGKUCZaFMDy~AW#OkuQS zIC_CmNfSQurh)lQs z-fMwz&AD9hpvS{#E>-<45aq$Gb>KDwC-?FwOzf6@*0d}~S@T3Vp&T`s`#x4AhM0}mpANHVhHkQZ(gEhkh-5nwCURD{Ac3QSU&X`>7 zZ?xxfjJBLv@BIZCbIL)&9YOTgW);EaC#&kxA>VIWCu<|uf{Ho#1B9YnV^`eywDW{m z58{5nZoal&60HX1$A)PS1rzKiQBiZmI_?r1gINY*g$EdnY14}xn`nX#)A7Zbw{TBU zkk%CuAl+JdvC|vUPu$lmY%DllS)yB8&Tg?C6U#M%T}GyMUo=$Y-S@)}jEzLc+#h>P znAl`47UKmEW46E)Vi&ni4%`slurS5A-N#K_q%WKZ0PiR?(^6bPrEi`^q~quB5rrVC z_AfJH8(w>IfyZ5ce!sifS)~#)Wv%gAv88tSxnNryHy6kTU~`NpoFOL&S=JyFJL_Z) z9h+&0Q!vh^+5ts!KA?W-d$E9P1zWD6X7}qI`EokUKbswKBzx#L-~?WshCR$2?m_ZI zgU;=mTJL(H*H9+3EAbWXfM==G>^Zr)X_?e{`#n6Eier#?+=<*fM}){l3>w1I{!heh zwwdS6V=fjczKcYrE`+JmsRCqdc%F>Jsw$7}!n!&ig1l&5i58j|kWAhqawrfteu@9f z5hFxpr2p-36SFXa`nIwZC!&ayB z5i_@jBRF{kdbH5SxTd8oyV!>)|KdRd8^U44#)5o#0kp(%kdB{@`J1H<`oD#|RKwp1 zU`CfJ6?1ioAh=|abi)u91?+ZLQHz9!qq%Mu$tF1viJC}-$P21gZ?an}=WEIe3d{yD zt=0d_1>tRt(EvIE{?ucIbFK`(_lWv5M2K&eU^^aH_Dp1P2Q5WLO@Nksbw_jlmHl6H zwjZGSD3MlV7@{H(mQna)^K85Xz}|<4-Vam}tk+oxUq8G}gj=9|p7w|{tQX?#|74ge z*NRZELP{jI5YOzg8g#b>uOP@tKQz$(Bc1(k!gYws|NEWK4}495NOSv=c=o-MMqAe2 z7c}>`qu&wKtUaii*q`%U#W@6WVe+AIzAq>;{F_tqg#i&;%inJ>)6|-FOTS|M+t1&^ zj~d_cte9zA$~3Xaci{i6h7d=@l3WwFbaeYdnFRQo4TCg=I0%Qg8(-*2B+`e{{=LUX zLMle=i!bxSRMlKfRT3K$;+iuHz|)6+jlPnA>c4g<4tLa(u-)HH9!=}gWBZSHG$DVR zGc>=PEtV#;{i)dcUk&oi(GRU@En5CHJ&KUTd?&TQ$@u%(WdOqBdhOrmq)xrYV_no! z|0kCOVA6Ddd$n^9ag7I>}-0SxKP_ise}Wqf6Yv4_D&C6BsB z0_v{6y&=Z`zZy;b>(T$h+~@=*a?>{0N2#(*c&7poL+cDe0}C!UQ&*x_SW26``HslX zaAa2ath~qwKO~H05ye%2q?y?VHIZg;vCs*MdYDq@YF+c=_O83|#!fetPKsOJY7bWP z)O%i$zT8JdZiBuaHGX=%n;Q7+d{qJ5_^MG;s!!>j5d#!PP^D%DK3Wr|TS{kRXUaQ_ zYyn-V8sm@T-fB-Z=X#im8_p~4tuppszW-Ttq@3=^uxiY!@9*&W6!>&x2*WucTKb&jT*e9q+y=O2;ALD(LA>HMUv4~|?7RZj z$j84Yyp)7ZFgBp}iYENx*=-b|t12Dv#(EJK9T|IWWX1?T(eprzxUV6+=M_J=ol+uy zFs#3eDy8+4!2*0@0^S-Ih@w#2*KXVUIdW3gY^)t(j(tjARH>?b(nj6`suwMfPuRou zLvV!d$S8v{O z(eY(;4_`U}gbf8*$^k~EX5V9K=x$DDn(MZQRjabh>pgZ2>=W;=%lIi#p?s64sZJ zRxK@Ms<|hid#xD|*_vT9DNg_5ne~bWM11e!T7Rx;&3}eRL{tOM;?Xi=r0iRmWp3H& zpTm91KTc(>UILQZX_p!P7y9y|m;?O5MUc1hC@{xiR7mZ*FX{l_*4b3#IViy3eFv&F ze{jPiwS8Vz)LP|=u8Igpc1309ExC67Q*FV*X|~OlSI#tUgMO0Bup|Z?!=3sf{gqBk z+vJ>3#PRc4`R}%md(9u2UzXs&;q#D}9}nd|ZmoU9Bp=FW564KpJJnMvW{$U`XO>AZ z3O=NIQP$PmBT$PMOYwNn4bVHZ=y>`_Q?mQIhMQARN>gH^j5~kfG{x*S(elsSAYq^D zKTZG#wT%Vl6fACB=l~0RCp^i_5odHcg$M+eIES=Vd1-81RtIyMizlinw_hC`x9$rM zVBS3xb`yA`Tao1DDbJe1cbp#h^g`k3mM`)kvlil>h196&8$mvuvGLl&d0!o)FN}?C zf9vVmo0nOE6PvYdR|GXWM7kTp4p4{#y{Wms`gGSruJFw!{8Ojr#RZ0 zK>Hk#;qzf};??bI=5|_zuZ>hPb|XJh*L{*k2LuUSMY@jBb`tfD@RCX*mVfDe1Vm>QOj*&qa*>~MAu7a=xC5E#h-3A~f_Sg5WeI_|r`QjUe z`~vrQubXIWqr&q*JE?8_YYQLzcgX3AIyHFTZ7%382wXi2F5dLm$-UPXH=#!sl2PF zPtac=Cna-AB(^s${KkfDp4Vs9{Z^6Hzq0+Aq?d0wej#C6{g_&v7p$ z`v$vJB=aP{IexTsva;(plZy=*=BiIG=i=KQ9{SX$!NpbEplzNEtbVB&TtwR#T&IEq%QqgMPAh;O%U=i6T~2<#0;6(x;R4J;r%_6l7`1hqCS;q{iC?I z^MWip){#ZrnQvN)gp*LRhfd5n=t~9PV{&xrS?#0@f%-55mOHCw{P4vNK3@uMcdT_~ zc~ik$!&_K2KbcN8sXHnT;i{b8!tdqaGR4^xrMcy5+{-FR5zFxBywoYIWo<6;ncR+* zV34hqt!-a1IKookD>Le8Y-~<^R9Y@mjO6r^L0)}nazQ~U?X{o4nUd1N1zQw#2-)0x zj$akqu?H`&WnrI#`Xu*`?wj|dTuP3}>iUZ0lPN+6hd-?>Jrm#J4wcdnCzQ9%RNyHl zJPcu}5nT;IEqjvPbs~o(-}ZM`eS|K>6UKq;9bYMu$XECP#k&CH9z%-hWQ4r#3_W_b z*>!K#xCru!&7v*Z9Y&3p=xv>osZ*>voSCxVk8*guW`S6nhcwODd$H@=LKob$d&k>N zKsAv>lUKh2#P}m@h9{U5yR^?>c>YvKODO^kd84$o1Te~HcSWO_-?O8UgL?N36Q^J9 z9}8Rw*<1`V#JyaflQ1I~C+j7x=+4Hk!C+F~xk}pO-bm_|8KmlpPp1F;k}ArGg)(sx z#Wq*q0Pl4R8@9$r3wnof)QmEL%4cee=i^>rMuMThS#pYBO_E`gfrXv$?wn(lB%|m+ zlnveykdduLDHsoBTHZ(?*4&AnFjsHKZ^*^orRfmeKU9KiL=k4%p2^y19o=$6lZ z*#-v*`ZDZbxR?*tGb8_*>L=o0;W)EicCRSkQAsQXTD*xZmoS5YX~Y& z?Yw%YLY?^Q?Jm_D4BZ#YF+=piCtdOBMFgFBep41NJL`Rl_-pJW(l9#+e;JP>shkoj zI-*sgW|k(lbbo#oU~-4&uJ$Eog{oVyXJoH1H8ei$HrwPVTQ8NYVASCArStL;5OAow zGPr#-J-z*~39GIg?ta1i`K{s<(;w(z<=xHcnu?0b%Z84h2Qc4E_&2*^eMtIryJ3K; zk;pQ9Q**%I73v=Q_K=iAfiG^^y~5qX&dx00WaTO)xBDEsp}`!w5P_^->&(n-Wku5O zf9M_I&n+DenwJ7R6~K>|AGYUjmztY5DqFBnhy0XG4~p5}7h%I|vD~-J32NOh1LJlE z+<#>H%-k4%)Dy{Q83M6B#JVTgMaT?T?-G*~-$VACwAEhaeD9oeU-fLaFmVHT*_rt{ z0l-e1WT(@l@ne|Maj8Y7V^6p zm~NX|WG+74yNol8SA}!ASzz5Qayyt;k*uu}eGntl9lOo*PFag+qK|R(ZnZw8!dUXI zaPaXkv-8?m8Fd+&&Ixo0c zp?MIIzxO>bEzPh<`?>onIgfI$iVcQJ1PYctg3sknxw~_#tGhch8?T7&SunU)xjUT55qbKW@ac>d5^Q(2K)2><2Rix9m? z;6HJ}$9nj^(>T^%*70g9-6iN`uU#sTee$y1mp{h2Pbj&oNC*c#VilWc@jOvK!1J{8 zj_&a;ng7RD3io9U7J;a?dr!uyHFoxTwm5HGhvB!poNw7cXMfL(Q->DtD=UA1s;Z_z zs^MxFbK91B%2o94O=uI8R+m$Ld6VF%B>iK9KnNdW5tel-eS<|^1qJR= zWOzA7Nn?tmt^&K4lFZ9`NQNAPa_dh~(tNhCs#yH|Yu$;Xn+Szxj=yD;0xfdBOht4_ z0Uwm)-cddJLj5Ih;vI#*rZz`fhOi}UO?$obE>X*rqmR3dmK+bQ!80SJAtG^UMiJVz zD2*jko0dHgdo?2yFY#XbX63_*cCf*%SPVDe?5iWn*t&j_5k^esuw-gL=x zeo$>XdqyYhVkg?PM-xwLmff>^>M~6J?$;BTb^Geoz)M}@E)+*A-e6yv&2Ncn(}cTh zCLK8vISbK^l+xrYiCR21pMsOr>`VZ!10bP!oNCun9F4BKG~>s}!o%dxq4YNI&IP}P z)Ag|B$ZZ(>!7E)mcqu=P86R0@^Mi6SK7@U)T08jHlj4=kf=pyBc0tyldpAT)ixi8b zg=>YjCU~3l(eSsc^ue=VKjJK?PCcHz#9B!B zB3m29%MhA;ti5{VIcz?0CU#~d9aHo^#oX_uZ_GOIMmfty_O9iY)j^3Z=-yT^di2l$Zg3k3IJ?+jOj%^kC}d zmhw#{DV3E;l~G}05q|CDd{hCGcV6X;!o9fymF7n|Zo4Jb?JckQxw{6{pvT2GKX`?6 zDC<0%S`6&hwtK9h%q&>81NVbJ#zE-=j~oq)LNeJe*$XZqc|+JqMzUics@JMgM8`5N z?~21^go>R8f({53!SLbfY9a>+lVrAFxYzH}} z@dgdw`+WX#YRUK!z6%TB9sM=$=XzvlTo5|Y6}=IBamwBou_dqs^ibw8hSYAO&8Tz) zc_n^%FAXU`f4ZOJbi^H`^)4DzKV{Mn$sI*Gy74NkxSdv!L^h`sT?$!p6zB9h_Z+Gg z4o~0O&uEi$v>aM$aG(pY*#-P;axE(RaU@9XY^D zD)V4TeFVt>@KSR_Mk`@VY;})b4^Xges3S6S-n)|eGl}hH)rr~}yl+F}RC2Nc?K__v zIBMAT9OcYQ;ARrZbZL9cFn-eX6Nwb)a`PT)&DU-~6GDN_#IY;k@E9#pR+L%S4fVnu z7S6hR$vLBs(|n#a9!9j5ok+EOHmaHTYqPT{*l)*BgCRrh>=*XnXB!N5v3sl6+yz^#K`0U=_u@W8i@DlhWwc5kJRE6Ndxx4G}|=p9ENpz6a4ffrB8+3q&hBepkVt$pP!zhZ&-*%hUGkich#+x3ZgB~KoJ~6QC>JRIN z1fkk;@5cq2P$Iugm($Z|;~cxo`Wz!rC^|UkNLQBlBe^P0Sc*3&8r~V{$4sjAN~xJ= z7fsLT%KCM#{;Lx^mP-)7ltL27(&==!@ldI6xk{ZhdngpzMIswyBr?)y*rFh^s=Ai{ z>joZy-U_#r2C;6zDSiw`>@n+8h3N#=bq)(!U#wg?KA%qyH%NuEhBM{u%Dz#%P4#I5 znAS1HbQp%hT_2M7AJHAvDdhA;HV7?$fUBXB!j607l*&6B)r z1GZ)~7;q21ajwh>xN)oE+!V;YxBYduD~3Ee4=X6CFt_-5QC$1B=Tc+mqcbS!Iz0tj z9oaHNiP5R?SYkv9GDT;8QoL2KE~<)4>kzPRbSY=N=dwgVIf^5A;Zt*0NuNP)(s4lT zRmO^0RqrA!{4f$RHL;Dn6K0Te`z~-as5zr#9LqK<6DB58N3oh|EZFjH;^E!zkKS=L z$lixtE1AT8hx+JmD;h*$UE52+6wZ>g`SR5(YL)Tqqo)alOsp)>GH_-U69t#0PBW1D zZl`DHjdFE>mbG}|oRWyT@S>4jiHe}^)RxuE`pD(}!8TiX&v|nDL`zvVBkOVY7}n)j zW1WMDllQ2oc*cjbr;5_Y)vm7H$=U-QmQ$yx-ye^WxN#AI^iF)0$Tz;1G0eow z+@eF3joM!ON3aRPn4MqftFz0icbOlx@v594)P_FdI_E1^>}il&>oCMrwnIUdoxo$X z0N|HshPG4c;lld(gVQ?Rq(!~NqN%`A>SH~C^uyjK?x&?4l@KBe!@3wRMuzDoWz5k@ zygTO0y9nH~dNIszq0RZo9Y)yhGF+de2)YW3zsuufY#FrWK84dUEHpm<7bWnBlrLxo?Vruixr0N$xLPrAF7pzG{pQn>J1VyLl z$vIoxY;Nm;;V5RdNg&oaKZmY|T}~@;ju{jA?9SPY?RtzpIa5%m^B{!%g?<>EP?ucU z`~s3D5~OML*a8NFD=lw(5X)<&Md{qc!A%EtKP!8NbPn8S|ArVqzBaJMQB>ItK;}lo zedSO}KG%#lU7Z>Skscr0+1TKN-0hqicHKm>?^miZYQPVL`OWqD?HfCnva%QWV{uJx z-4cq@nt_lMZ)1MG#@U&<_5i<*cPz`XWwm*tN+?I(9fKbGkw%;KVQb7PdMO=&aYy=y zMDr0H?Y$b!xH0w1(`+YHe9FvJ_cZhC#++uVs(Un*RW@?!pIF{Il)i%VFacTlH9O;l z&QCkou*r&m2-@Zv{n#yw%#7W4A*n>A;8lgUr%v?d+N zDN%}ZSy@^u_F>xj00SadjLklLlC#h zSD#f+#%g4EVV*|=LtmG@-X+gR;dHmUTN|2{Gc^;+DUep@1ZSXBX1Met30nP0k}7@- zJ}NOm&X3!!Pufc-Sut7pH5y`r+ltLvu2w5{_RIFy`Tj|-oVp`B>8J-zix5;|5Riv% z#Q7+eQ+G~ql;Pq3cyo^2U|+j-wX;&@q3VG@{%G%d(6#U*D#{jPL}B&Bf&(XdScq@w zV~Sf$ylBNK^(iRc-bWf&eDp-~Q$-^0N42aT}}+-%`EoCVG88WL?G#V+|c; z+=BO)oNPa&TrbH_=_VyPBSwm}qTiE}O8o>_pnp#;=5f*oPl41Br(K4G|-c z*O&A4hOJsUJC>{kY$0&8lJQea{nn!kD*)_r%2)4jsaVoT_{3~$)W`Ar@P&l=>3saq zjW*`VSb%9gbe@ z2Of3ZXk$MMCX>dgZ>U74S9HkQ>D!8`=#M)e`QefS_zlVMteJ(=mDP92@Q|QCx7YAa zR}6l9g#`zO3ydy6O3#8Yc=lqn^!^+C%6scdXg%4~-*^y!DaTKh+}bs)e?)BD2Uv_4 zI!7_QF@7cbl@^3f~116sdv>_W5NXKY4uLoe2%$CQ%3q6vS zkaMo+|3nF`NM&LuxO@;J(`zOtpugSjWqpn>;LytTS{u0=&Ysf-u79rt>+Z2vv zKJ>^6r9Vh{El1hg3}0`>Wg(@Fr&l8)Hf4u$3&?jVk?SDTp)1y1fw4FG%&;N74<@8I z_c*a1lcE_HQ$ISr`^JybK4c@f9-s-OzgD?(7+DYY=>FFKjTep_EZ|qH)C%tqNEe@#zFQz|i_FY#~bH&^F3u^~5 z%Epc1-7AETZQ8u(Qq}6~?A6oM#a8e5lxSs(y4{FRkw((j`;x`iu@VI0(${@Q{7g;3 z={*e1Do8BNqINirp`H&`eQkb#$hI;ZR#VeR{uS+KSX5ryPZI8&#*eFE>^-g3ti!Dr z^mIKaWvum!wO{G-cc7#?f%nbHC#ytpFWY$6gPrK1r1aO!qMew2`crxl#dagq*L)dg z+k8O3Ma`v86JjFjgbFj{_BFuv%e?sJu-4Wd-IooWZ^6MmT54%}2Olb8;NJ{z0TOoNY#npggAi{C?;{z*oF7l9;V&1*sybpfaKx0| z2jzfOU22iM^+7DTB*xKgb8;~&@pMiGsL4~oPMmRMdr86S+h9>3aog;cehebqT%fst zd-&l4yNWMH1I8c^vB>E<<%~eHpW%^gy*09ZBSigy0@ny zvMTIl*rmKXk=Hj~Ti#6l0w=6LdZD2E+P=f(jW{3QQgZ)86qwFWAyInyl0%YN6x<2 zCf-I)0S?c_1#dRDS~8e3h&+QhRDSaj=Z3X!s>O3z-R4y0W##5l zmSegWYKd|;k*;Zubx^i=1*jSX9ITc>N=U4tV{R2f$Q?0#rupuiP8?TqEjCwh1hrb4 z1a6#KxC7|ZT9{z+)z^2-KxO5GbR)sEq@3;q)e&K@=Brf^)o25SFR(Vb!N8UGJSyO5moq(y~(Etzbk~oj(<>oG^a6YvT>;O^L zQv^*$>q#g0$wtTyWJNn-r+Y6yXPNm*z-hHQwk%xD&&TJvwm;BwiB(jBUxxyNWir*_ zdx5h%g67dpRaW7bO>!dAs{5Um z^Lh4DIJ^et>cBGJOHW1Z`}l=hs9N*OuL5(ltwNj^ZD>{#Ce;MbgSy}I3Rv~&C6ugx zi}IP+7W>>=ub<55-1U5FOW+5dh!-t^*gQjJw=;Duu=a4U&Y+P~A2BtcL z!uhf)J8bk+-b*7kDaC(Lh@F@_&+qUF*BO&D&OVH^Z%-6U13%*4zw)Ere=&CvI$(H| z9h}bRNlUhzxHoSJN>~5j;JrzLS)C?u!n-Suyk{_!c8wWnis97gLgD%mH6DNieb0(* z@<&37vLT5Al=xY8QT~;Yj1~Fia}g*#)a{H9MZ+ZFweHx44HRl`##cvyg8> zIag@q0iesVu0z_SXh}#SViLylfV=L5Bg>d@nKUH_c?%EQ!3JTeq_?7s>VX$xE%lg_ zFP{Tp0@dj+-0BSCS3rM`j!*5J0|AFp4!u!XyCi_pkc+o9)5q=*@smIM zrzb}~zE5Tj>#Nbb!&2%K6^;bbTTCaarBBDyv(dKY}|Agsk_in|4 znxxtD0h1?|Pu!NQEwx$1yPVRu#=Wq4Q0aCl!}6d>YFiX!LtAlh;8e=a8o69LL|A@h zLB)1VK}98)E+;d3A%Z)19XFj}^h=xAS7(K*X5CHMUR%}KSs#9gj3JSw_>|4&SbeH> zede-PBygdZ_65E|Pamks&yT65EHbWLXS_gAZ;_T1DB%hDbB@xrRQXFnUYzE7@baL6 zYPgi2^YrxPd;z%5G1qV~l%E}4?P2cCtqk`XIPk84%(&s4Q-4lqYu>O%YDJV%c_w0t z?xg_TI?pv&XMz?7%7hc<>?fPhFaJPWPpHleT^~z70c^4~fPK@qS)dWgYHYBdKO}2o z7$a^ehH|a97y8?W2JH0wTUua3*=6H9$G^3RebxH+VbS9oNzj!%i;{UdI4o}?sdOnq z0~LgWr)rmd!*Cm2VA`{D-5)z}2EDnh&oXO8 zC5VG|@Hz%86`gbGh>|V(>VaPOST-YZiG}ScDG`%vu;(+8z$35JGHPgrNjnyLF8(Zj zsf0is%4mqG{`*&R{f{rSlFTN^6g{&z+~Cg!v^ScxUp-KkFDoPkHx0NPiJCr~B@f=e zeHN0p=|i`N`JxpSZS`>JwbmQTs_kwcYQOQDr6@$^bDd3KoK`O^P(h8&ajDY~RTt-8 zFKE}eb@G0MaqNBc&;ohKn32N$>2!!9YjaT!`D?ovE_mou^d{%;fpfreAi+X>N81u)Wp-T100cvFN+x19a_H);*Rm{;>F!2FxWT`8jsq`asH>uC1;%G3g!& z2lJu&7S^jw9LdHIS5!^3EZ`=MplFn@ zgyxJru8RkhTsNjA$L9h&5~7#aY?i|_ygXgZ0=&FhT5juNptAlvaL$7#PFOIHe$Qan zfH=b&fzh55tmmk<73w^&i2~_Edxo+EkL3>o*zaerGq82^@CqMg7(N^>DJXna@H6D> z2QtOC#~r3ujH_@6+1VLiJ#_~eJHGp{7*7p97G~E2l8gcBY!HTGh}rd?DE_(0j_A^f zf@=ug|F8c_FC^5sGDz_THhJtk&9|O57T3Uy*PpuEAaF5An{`Fn*AMu~Ncrf65jdD3 zge+<(`)xON5?z(CZQgi@ORd#UNu_UIWfgq!%n@`S&jFsS3QK&jrf|KI+PD;{qNZux zuGOAhgtaNIcUDp^U2cUid`v1;MCc45wUZ(86k~tbuBZF7x&Q3gdaUlzoGIbB!NKOG zD*HXB;cJSh)H(NT0r$)M#Y)!0B_j_bmFwysL6-ad?84Va$A@w9wSsS};?8cvRU}M5 zi*Z{zXd95$%yL?zF*0 z6ZH9Zq#}Jk_LWY5EjBuj;av7t(q=q$0_#v7n2lQ|IHmUG#LZD@TV-eYF;NNl@3}UD zt2*`qENgVO;Ne)yW{Uhy%XN0Pc}1VD4RH{!3>ULzO`|gdErZhc@nYdFHw_fUG8A^` zJQ4vT$MMfTpyPu5UU_Udke2zF*Pv>3ImM6M=sg_UHz)*d2>fnm3l0xwxC=NvY@ZGH zpPNf3>h0ev|Je>dw7(mErP^H{ptTE?g~&Q-IFHDy#6jLH_%`^SO~m#OU_Nt!lSXXde0zb)xK-=LDSY)NM_zCL$Bk+#Sk z$y30-P^*%n`WFK(eVG3o6J+c4VwKJ7fYrdK@iFcgEcZ?Pi$-IgvqL%k@RV3R++90# zPT^VphlkN|PtvHNs0GUiXAiM9@9wpJjXRmycK;=r%3On>inbqqOIfMCslBl|gPE1f z)e5)7?eg|Pi@z9{6$&a3I1r3L>k)`~f%(oW9y|fNyk7BD!=|MK%ztcMkB-kcwVRWw ziL^Qh4$p8LU@w|%2I<2P8`}NJ-GZ*}=!oNCPz%E({`-YfU=RC7JQ@WK5c9QzL;wtO zdg7F@;o>8=9;EWPIRUy3UtGM((haD5Ty8;!&%K?hCp-@w0(7*K3Dohdeqzv?4qbTu zpv<2+1bCvb!}0z!JBr63^01T9x>TU!(6Wmq$|+u^gWGQeE6sQ<&#`POW%AHPdbd&x?v zy=nwm!#U5(f?-v$(-d4U!c0vU=n4 zA=vlNZ0Gu{3vS1@XdAL}(!Gc@)cTHd_wnTThkHFaD}M#` z%si}SZ_-TC(aMSmCfe+65&oy6X$bKSr&@;Gex!tLU=mKrdlk<1BMb zU4`D?*z31}fPE~&0QgNdY#<)YX$x1)7BYS)+w!6KybQIhF*YBw3k*K+Cq!i9v%IWX zBYZdYbXFVGVT6cu!*!TA$jN~toX2%EBJ{B20q2ODz3`)^CGAEgyPh#-eyBC`QIojK z(~Gp1PYf_Phj_|I>yBU1B;p;u9)}0j2U{~+4o3JKT2h2eFi*pIk^P#PnOcfZadYAb zNjTsoc#Yb+<7rTpd18Un;jYZvV@#HLI>6y_^Btb?dU8`uV+S{L|KFn$%*$d z2itj`V{m|9>~IFPh#FfX7}_N=iMXsR@IHnK#1 z>1!ACsdjO+u79;1zBgX)wJe{*VyHV6&~a~OZttwAOP6r=RV9gp3U{rd^c@jP`}eN7 z>`XxO-q;MKFPfdmR%Q}5@~IP*{>*uy=9NgF};@X~8lv`wfn>Ugm<42yn zGWruFHDY(ZUzu@Hc@odfv0F@ae&{E2?}r|qurroV^5g-fU!2J15Tia>Yh|07>F*lt z9v`0Jw6+Zcw#8p0)pCvlf(A-zsVCxB+%ijjRdxGeS?(F>ka}~w-EqOmdD!-TN+r4M zQ8QRqQB{OIfbRk9Y@37JM#bCntL7jnshyrEGd&%uRda{#3F5+44H*)IdRd+~^n zo}3)m3VkoLeWm7S<5C!OwoqG7>meK@1grL83X?q%54yK8^s4(&-`-&e8%NjAvIk_IKPuHhaRC{A?g(Z*D&@Is6JR{r6%q0Bbcu6}n zRI;Z>wUS~%1TwDXt9|7^3Q!sw@oF57=(np}Bs8(_3Ml&s{^N6a+VQmN@(!4#?mSzQ zXB_n8`;&28ulX(U9G$zer~ca6$Oc|1qp(vh8zvAGKoVbW0fDbQ!bjjMECC#<%r>rT z*~UTCwwQc81tkD37;QJn>((7js{MeAi{nF*(9j-92<)IC4Z@f9cJC?n$XbNe&T^+e z?ofL?+qU@P-yVdH7z4wfrg-?OJ?g4GtCIxD_Q_pVpEd;Oeot4|HF)xIa}^j*|4z{p z8Y*{071=dTt444i``cs1xRy=6uXn9}H!;Ar!^-9vl@CH_ImV36_6;v;(akcQTJJ`B zj8cp$D?b6?DIeyJ&LqaT#VURKo3fH_$ago^DXPT5Z`#4~W z(sTP4Gv>xJ*A;#$cQ!Xav?wi+6)zm%=V^3J*IjZU;?J1r#pg!nPN^<70g--NX!=HW z5L=O1#mwt%QtH-FlN^P*)m~jzX>PLdMzeQNT%u{Qr2!xvGZNr{t+Bd>_=tV@j-Zr1 z>oJL8Yuh3wD$4F&^Fko7&Wiq)nw!K_h|x05Ff@5ucu?J?$Ctv zzWvf&du&4#D;Xk0HE%z!M?LNS#Y5db|BuEdQZep-@IFXW=>H*G`m&FZTtU=82r3{x zp8x(~a{uKoB_IMs75E?c8PYeg|FGO5DN+A7W;&{(t3b~5wchph?p)kSH5$hM%ygn8 z!rR}r|L&aaS_m8me+$_(zEe_iC+%;0NU_KZr%Q=V z(mU3&qZ^?1zo;mrFYgg%u+5)RC$~Symf!!wTp{&;fWr7%T z-5u8q{D%=kGN*wBlH=d}d?-iFI}7^P%9&yC(GB()F9WptZl_vomTl%A8W8CnTFu&A zFTPxE$X3c!vig)+Xy8|}=QA0936+uF{SQK`|L-qI{I9wH&dj&c1>9O*K?7P@<-yGt zze>qT|JGa=ey>>z3|9YO5TNF!r{W|79{p5s@plj+#u1g$%uz`vURJmT`v``smap*N z(S;O%TkHjuq&U{y2n(yGdh2ZcxA4np7a;^-Knc0+Yrdq^Tpj;gh_n{Uk_Vq=G#XOm zMy~k36gJ^QzA_eJtlF{7@bmty`ej)8{7Ck8k=WgBM5{u-t$>D6>ifa$KSw@QAk64| zRL}VJ5LPrH@yG$?vnzFS{QDTvOxEUtsv#FMh)uXRuWz#q3_>iTNJtt^!`9-rmH&oz zr@y)g%+*tbfOs!V7zED!SD_spQP}lwx*^okt?dw0E}a7JD%iMRSN_8+BKlT7SsKL1w_*g?%N8R*!NlXQRs1bDYS|M|VKpe*>`))8U{|8JA%|M4CD zcXKg#U*XF%c2ehS*LtQ7HlVK7z4XZQGwZK%q5COzW`B>h--Z#OJKN~JD7w?+WDb0_ zV4gbW#`19C_-0uJe|b4UHSO#0FDxMmb@VPDxmkR_?h%)^yhiHO;JdD+)+e|9L(iKu zobC5K{T1ktHt(6TAxZUZDTjO{58}cwMK}61R1#BllB$t(oBGfzS1&8fiu2uO@KekTKooM}d*6 z8*eDPx&IIH-ZCt%pjjA9Ab44Un3n45>gulQQ>Uk^R$lyoqOxB$NpT#@gdS>tscp+knTo_MQL5lO zd;8GTvdZo{T;X3V9tmdZh3N^(m^w%*=VL@yUTsgV7Y-4UMm65>CktjP)55VDp9etm z0+bF1`Ghpq5 zlc$XA1v83568Y(ToX=7 zbCO@NYH@a7+n(_Q7nEoKPgjb1RTc64dsg8NN0TdLudg)s)gi<73{qi3bO`H9W<`qS z#)+d38Gf@FZdp0swbK`ytx}}zySJFNs~uuly2@V&lC+Ytu*%u)yK%z@uOuZ`(|T5( zosVK-@I4VJa<8?$vz{Dm1y$Y&vEE>Sd>%}_ymtC}n0#|a(LWo_u5SlG7ui6a-gs=& z*)u^$aP0^~WoJHNl&VvInyxUE<&-CsRVPrxVw%XWaYzB6%*JhF^~&cnCQH#5*gdE!+?hCuOS*+q?pQ@6k9*W{)Tjw`j0gw9IXTr^4; zi(F5zOCHCbT>T2ql~37gH8{po17Np*q^k0D6|ZoW-WfkjopBEVSr^-lI)Sb=!fs9N zX;~#N22M`om+`=i)$5($--&_kn|sO2k@AIy4o}hvT|&!f>5edr?G+k0jQ{|_GPhtZCsW-$6poFe#}Q0 zt+^;l6FGAk@Pe5;wRj$#VRHWHlmd-ml((TJAgutv%gT4u8VcujVzL#+V=M^eKF_jJ zjHQeC?0@Yj(_ghZ#M|QYbNK8h7gCT^WIKcuUe_{XEca7! z<;7oR5lrPoR~FP7lGR0iZ1Wfr!6(+v@6RO;ey=B+}KIecWdNejwJ`e z(NU)SPS|9!&us~<9sGFr(E80xxVeLQxm#^tu`Tdti1}K-%;U>!7XwDO{8&ID^mzmT zJxon&qe*>p_(-G6JR49GIbw~uNsCU(9elV`XI;4ebpaQX)n24rbfzo{b zpfbprWR%a0qiElMOFV#*6Gh@r&n3%1JPl3ok$x0~q9#^hHWfXpQ*9w!=K-=*>63;U^1g)?zUg|l-t00Y;d$l&^sOR$x;0vNO8SgbIX{(;-=s|jL zNPT))tydVPIxb^LUGE@O2=J4tjI35Ll@Fb|9lHlbg~rBDGCM75IrCya!_^34DGs@L zAApKOA*Iv=Zx3!6$LY|I%t_2;b~9yyNV+D-!a5}_yb&gE|UQf|@bb~JEMmteFyDTK$p=UgWBF+S)1+|F+e z$gJ4=QZO4urj=(y=>y=gq7dOm*5AQPPvV}?+$9x~&I8x~qR6@k3NE-a$yjeGqhGMV z_du35AUtWr52x(?opoSHW^y-`dAHz%Y2+MZE=uB&g zq8r(h!Q;y&m5J;0rzW=6Mi663ah|LVLH|B>`Q26GFZA}x0TU#bd(o5J;QKt!Q|rAm z6i;p0%>xC?T|c_W{!K!;z^&X*gz}wod^uYYyws4(L=)bjvmfU=2(0RB*}DrSpaQz% z*SI#1a^oUoHFCQ3;;)7d83dYL1|8eV6e05ReDb1EAxdU(6F@+Ysqi`3wY^b}t5wxz zOebbSw(RI^j8W3M)Sfx@?c{1&rhrEkT^Y-$1-Io`*?w&foBydcQD{Ad^1?#t?g2D? z7Ny6Ayzt<4WV_T=`(b$$W%7NePOt!-{N7f>ILb)B1NnUVj4V6SgpjCy-9A_~Pj&rZaPa)Q#bc^j@yK?r0_xKRUfnrBFCS-_xiIBqu z;!mz;L{>_d(OP8`jJ1K7I`oCXltTd;y0Ky*+fm&%${ttnVYV1 zFF5=KAua%`(A{t5At+*gpW`P86go{6JTzx#=5i`41wQGLvF*eZDRig#^fHU8yR~&y z0hfonqYQbr>nXL(NwPcJ+V%hrr)9BObT6p@JH_W5-#mZ#z3?uJ zsa}yl>!iFwsF6{~fFPmqSnhPv&~C-@X>5dC@GO5fJpKgJgWO-*aG=Cm_I7PH^`<(r zi9#C5?x6DfOrEIk(r zI|vq7e(s0b?U0E3opys&+Ijhs4pvza$K8)XmV&muj~%h5U(xObwek;l!{cUWXY(or zv@}ysCN^VoqF~3ARxy?Jm!qNF@uzeZ=)QDuS+=qJhE(!|ax(%aAVgp00gh%l7p^(3 z{1V%AvvwL`w|9~4vYc%1wIymXOjBp2mL~aYBk6K`MVV^$Nyyw&3TLP~!I-kGTNk7Y zAe?YRn#Ay0Pl3Ct-lp8)3O-BSoAM`>Dqn|mZ6nltI>6%D*ICsupg?{bMC^!i6DaSGp<)XAeyxLFt8Xe>g<_-pvixQ1Bm^k}63Zyqum5&7|xl4Kny%CTP4FJiMT3 zf+Uwmf2V;+a{ebgdH&%2s$Mrn`7OgFtzdu*8rDS5q^H~-K28h91nYo!xco4>a8D$K zl;CykvBXJdvdTG{M_eo?x#gI!oxS!?zrJ(+55NfY0R+7!jHF6>0S7u$wmX9`c#OoK zceT^#=pRxhTn15ajHCTi&8o+4K74#)rAzYD3VvT_Y$EjGfL6EJc|nxS+T(3LnDK{N_HzP7 zE3x)LIV?m9k9pp}QUOEZ9O*$^nm0}~oQpc?htpqoQ91qAcLnfkhGZV;bgO1Z=e={I z6!MAC(o8O=jT(5m#*|#WnTWzs??6t-r?M;RoVU}}8xOwDy`PvZs&s7oH{dM!OElmw z*yXJ#rbgOgV(hUe`&fkz#wI#TJAPCp$6P=#@v%q8{r4~IWHSo#V`B)=P=>>xV%xz^==TaGSNp~BPPIj>cG zWb@=r`K;8Yf`XvP#Hf{HN8!cg>@-lUIWsYm%6k3ngVmQJd*H0U#lyIv>qGET0n*&3 z#?y69?O>pqvZ1|p+wop>ewW(-xY}5;QKsi&aN~EKm+~H&x3}{3$Yx*`L;UAF2fy1p zn~_RVq`S}HuIJsgu0oJ@{c}*zl9lAu%J)faugA!6J>x;P(H{Z$au(QqiiefoKd&A^ zPIvu{8*4|dnsV)StC6a+yOzDSS5nbaNWnR$0T0CwgX$vGBJmp5^o^f)_n6q8uOIK$ z45Ly$e@pRFR2Hr3onmTtKNt(6gG_4sjk}9EEp&+TGIH>;3eX6z40VT8t~edb63pL@ zII*zfA7`~cya^e<&9H;L;q9tH=$}?ua5;{Bnj*Uf6Gpssy;~#d(Ac$BICtY0ZZ7wQ z=8W;(oh&r@K=*L>GmV~}Y<=6(`VUBot?x)>v0{=*#D;-{@^_l{q@^+Dh?o5JXzj9b zSpzr|BC1g}tD=4=W`DQdRbU&iU zF)96YINB1g6M?^xyd5#XkxBQbWgHu&$hlR0Hl7CL!tn$zgdfM8D0G@)a{q){@xbj4 zyvPP1kL!>$K8#uo?JWogLXop4V|M{LF1)8xMwQm1Y=gF>FULmgn<`E>zJ@{KPqaQi%D}t!Hh0wvUUC z!&u}wX&=h2NX4Dk{Nu+jg-22uP&a^AKM2W1Ai+cEVv-X2rcheN7htit`6mKiEn*{ab$tcSe>b+xg8*K)oA-pM6B%48!;*Fq3Zh)(|Tg3jwX*L9UJOFw*ooq}M*yKc6m#{1T zGirx1XfzLoHv4MfeXuyG7?U_`2fQ>=QsgpSd?{`)UB4w<&3gwCLbPbU6$N&+x;GW2 zEFW>H=DIt)cuSKnLvQ5#_q#D^SI^I1JU6FjH_ue;r5ajCwxE13F5uF%=&I%M-)6f| z*!kQwd02zbb)OSOwqnD4T)_9m5=wvYYBZto`Z1-~%@gDt)at)^y_GTUm!Q8p#RYDQ zXDv4lc8KIf+FqH2t-I^yC9 z@y%#YbFicc6gi4a20#Xvsd*)?4v&G}6+;`U4AOAljKaU|QM<^vh)I*ppnsgR+sIybQhZf*ny}`D=Zr9~6s<7_^K|}~(C^ag?=GM{#U3jH zw=iPgKYwn?znAwh2TgbY1*Z@$C^+7HqrHyVOvL{X>ofVbjnXrBKYOpDKg-}Yyfx?K zWpwwXY4d1%rTXpeiY#uquAVMQY4x?(+|r^M^|2y>;5q*b(PW$Pv`r-uL>%EovBVl4 zQtAR~>-jQ4*h3>}-8BM?^(O;>ig7paN&`ClFcB2nF}YRYb@A|w_KuhI#wn3+gH~AY zJ~f6wC!qE_D%&SMr)3`WMq_Gz7~K9{61V5U#F8o}>1S5Ecp?F}N!CUA3g(u_1bBI= znzK!Sv2b4uk2RnBo=z_LCqkG0sMQxgKNc=gYxb*zOW@kAQ?B<4SkvR+i&oD7gaZtj zzzioO#8@wg6t)^@40!T7kL^e@U{Q`hf=tA?(WlEj#zgHu>VQzTV24Il|}06Y&+h^zuj+NZ+6-{9yb~c ztA4)T@`)^QTv!`fominRf9_;ZZJRGQ3sWgWlN*h_y8MIO3O)%l>s-IfS=nRTX06hm z4xbOW-|P#O45*ZguPtm6jZ85%2zb07c616h-rWv_e5f~7Rb4Lwi@Y=N|6Dxw; zWDsEZ1~;e53cM)_r}DwR-%q~4Z@3HF08W{|Z1Hs>d>mqc);I8%6QgD&9>{CtS9Kop?8=cylw6}ZW;mAIe0;z!H6LngC2p8 z+w=0BObl6g$Dx+6>$6oDUpv>nt+})qFKQ7yDz;HpY<;SaCKb#a;XJ{|&CCxqU z47ontzmg~g4QGBFSUBumVcQT{S}Wq~(c3~VTIB|#-+{!z$1VAMZyeuppJ~6~^AFxO z#h(Ea=6=&C4MMG5i;NmRt;Bm>YL@N2;vWrVRGE0Bj#wYDJ{!wzoozb(Ag=i4hf8(4Mn+e>MW@aL^OEIwUv zAm}a8#A@c%3&@HMV_8A@-H6o*Pd@}L4fXed%uUbxu;%gC__#=_IBu4USRt)e`>hg+ zt(+@F&p~@hw}7u5vZ{pJ{NImxvhxL>fz1__b}p_W@I#RxFW1w}o@X~l)AbF%RB&aP zJ>yl_3>!@LACCPoDONy$qm8<&#o*w9Uf1UIR%s?)pzEIP`8*~PYo2Ib4R_z8RaOrb zOf{`L?vG~*a1PZ;`oGKvjH=l1we<0P?}R{J{Ax2B&0ca>&fCvy*;cCu(^~T61PiQB z`>ONKjdab;1Rl-iMhkol_j}qI>fl=F98;=uyaCNz^OGvpuy#CP>%Iw5t7vC&Ixw-)QEb8?zYCytw(mu7i?0vDld+RPB5G&Nx5qxI#6O!Uc zy!Pq+HPWqvT$x#={*U~(82Q;X5QL9wHkqwaI`2bu89cljuF5xn^!W+yNd%pe%;-D} zOZ3x6q7maWY)STHif`Ik@mJXB5>>60d;MObt0wqTZr=;+UiQ441=?Qz5jEEHgtO$9 zxRfpq5U`7|jA;C`zuW^J735;#0@L$Sch~rtt*COXP0*whR=(DI6#aC8LB)jo=!a_? zIhr$;$Z<_KC*Doue*Jdri}3qpaeJuFc`M!5mO@OYNb(WrBUM>Y`Vx*e=jY4qN7S_` zQb+Ta3D4KZ*AA_}!xUTxMsg(4C{1@&d!IDAiNI+7$)2FBjec-wq`mIT_sQlq9Zt7R zuK@_U=^y9`L5=)CZZOLiUOLWXvgJJ<<;Rq+Pf#(Tq zy3#Z=YekWM>&H7S>n_ej1ijz~*Llx1Z{%SbOAq@=FB_`bD+1dLHxY+FHxE_RsC*u( z!#%%5LeT{_Bxprp&Sq4Qmr z^C*Qpla%LqH0m(4blDTz>$9cr=zQ43UfsUkIsGy{;3{gqP1I^DT9GULr^Wah0r_(+ zjQ|_g9)RwWRwtyDqU6^|d_;~(zXDKj$S`7q=|ty@&nM5xFVMMJr$pSHGRHH~{KUNH z>qrxdoqZ<1B-}c`?z6V(snTeN{2w92l?m2R&kZBqsq~5xOIFDeUi}3hZB`&Hm)AX` zgGYY!V^_eliN7FE;-y&<3zxP(?*XuuJODa>eI~g2Mrq_}x4q$Pzud@s=kV9V6hBfv z_GoW`hkM$mGln`PL*Pjk2%OR`GNFgZ~W|Er1o$+}Z?u&JGY7%_cPvzzIAK4BNUe@`g_Z2oz ztp%WfFAH-Yak8rCJXXl6u8eMZpqFvJI--Sb?=KMAHW?59XP#k_nfgq=BA z^ORSR_I)Po?cW<75-IBby$~SdN@0++y4~QNclnX#|6)o9a3jG=D zDVB(iVl>d@vD_AV3sqWyEg=>@>)#Y|>u?zm>q`pf%->c;Av?6)2JumB;Va&row*XcXtDG`z=jz-B-0Q5?G968n~f=E&jn zf3w)jJrCKVs_q@PiGTfpE#@H8mdA~A#WuZl+RZ3$DkirgODYtJW~>?T0lb|{7YU=X zA1$E~eyUmg8C&n3!dkF#EJ(b_Cg`}N&sW#_(#C_q>zb3Df4<=EZJvkFPJq0IF)a@C zVWglnZx8`T%z`VL)Hl7=qA~e58&8FjNtLW2gSlfk%<-smcDYuax^9cO=9m%IYbWrTMM`}tzbZ93b+|k}s1}a*Ze~N_=AN}5a zN*Dl>G#dntf+WTVV6QvfN=KzN>wk(e`RP~{71;LF2Z;KEqC}j3Nl^%wn4E_Oii5c@ z9iAUcDBH!1&l#=a)dmKq46V+(u=acgJJ5^*?zfxlyl6C{qNb z=RGj|rW-vSVzO%XV!HWQnRt{&*9GEC`kWjL@`#DQ(Dycv7`vU6P(qfV3--zt3Ej8n zKPO^lfhAc&MIi5cV>X|ot!|kU>ma3HP+=TBHnHcklkr_qg*mD3H#zn7$7|R6#=WgI z;qe@2NHpOc4;6Ej0TuK@<5LGFj9gbjk9nf&t#t8Y8%@p`%Pp{&yQ=HTxsVTr!&M#k zWp=*NmCj9-g(Q~*BlQG+&c~Alr)XCW_>Uu;BP(vH_Wl76!cIuahD|7Jdce)&bJi21 zsvX*N-=cF6r?boXBbCsclI><<$M$FsQkuu3ipof(uu0#(s?({l?{~Y6nYmXCt9-zl z?wpsW<$*{7~b7y4DYzK#K+v5uoM~g)Xzr z7!@BCV0|0U3jUTJRzE9kTRqi=rnV+;*JeE_`^D~yziW^49zjFk+{#9~<9Yq;ui>Wa zig5Wz2WoT5S^e#Ibkl!G*jDEA&r^+q zoxE+(H%x4Sbx|r5E4z*vPc(rEkmSf+y*CF*d>!)F1qU_X;5=&1Us}uW#RgN0iQ5zw zbk62gnS>s+;$ANSGKyKqAA-2x&q{Q+-#M^3bg+CYFUm?idyTm!ALAlsi^-80+*U2{ zUe1{DCXqOB0Tv|v%2I4T@+X?Z0#xaQ%7f71q?o5f+&^{CDL6x>8B$xZ_j>Yt@@S-C z6NfZV%`+qQ1ipHKdcY1III{37>@iwxShGkGOP9Oj3+-yW(1Zg14p{;E{P!)q8ACI| z`G8bs)o0hUfm7|oq3TOlS)v{GbHU@Z23#2p+-W(vWz}OR6m8H0{WoA0xmD?_0h~c0 z)|rAk--bifu|+Ao$2smyh|2;Gs$Fh_5h94LQ+-kU&r@~Sj$ewU1Kjw)&x-G%EIjbo z0!y}4UoTV_S7&EXs!W0)jULm(tfJSi^?Y$8>OyRPxQMYf9Fd{zj@BO`FE?HsyDEVT zIJed$(1dR1ye?xXrp7-Yty?_x22`={|MCxGt<*%_$s@331+$L=)8=k4J;lySSC8`_ z!niF9eJ{LL_8@ifw zga_Em_CJYVRP1ex=Q*@tcey0gFgVCBwFq&MfGOKJ$jq<8)$YvJX`|nVDrqgc-SNcy1+$x9k{{`AtRc@`u04TByel({*LN76uxco-U0O1pd;BW3gZw zSi;a0tI?S0ryA03urwu8Udej(zZj^u+7N(tK!TT zJU+Dd=C=N1e-=2gz$M7<9ASJL9v7jkO{iONDj-06@{9M~y zHk&JCy3bImV)NJ)%jQixdLiu_9UKL}EB6ZGW0mhbmmd(qsd>9o1WLcOSj2{{l6ic3 z;*`loJw>U#pru$0sX#Lb>{K7DNz5?CblxOn+&}v6Npd_}B-vH)ZV5lV6?H3d)F@M! zIiObPa@Y)i*rAuOYA||r^rxdG&SDMmPfnT)ac&;&8f0Nh6f{GHf)GZt)ADGWlwUu_ z2F=K)gSVkisEfglG8`^Ze^#Bky+CFgxCjRCJ@LsT0P~rZr`f-+!19xo6=g`Erg~%S zWpYnZd|G;51vuTN6Z;ZuH)x1f?URUxlEL-@&gi2CxeuVoF<^Wq18C+d(HW8DP_1laI4TC^<2~BjTu=ZG}ny71#desl!6Na{Cp^y z?O3lFXS3fhwBBwsgLL*t60;3;^eU@LS(vInk15n79y@wzv?_W@cznvh%H&{>x4GZT zrV2z62+cs5yV_j-&7fjvu(QX#g#AIdTf;TFVtAHE`oUW~S2CMX0Q3=`DNTN->bLI0 zyFf?#KLx4^@-B1P`2q_qq2sJJMso&xRYbBj_^c+xp(*wy-iy!UaVl%|Zf>84u_v>C zxG5^Sl81Gq>%f9u=xY(5<+p2B(sIodg^Id%A{CdV$QtN<%4pLv{A8GrOnTI#$Laq= zb7hE9#>J?uUR}=Om^>%9f_1y8qQdR7+iFUakF6C=GdOyJ`R9gHNB0*`!pR*&QQQ3N z3?m~w^{xG%F9~=<_8r@tXiT&CJfW?N6nDHHf$|T;^(T#lkF%a)Z#Z&I+(dxd={gez zH665qzuaif0g}b!wEI2>T=rE1=Wok6zc@nbqz^Y=7jOG!?K1^?+6+{=5waQ*^~2nm zC{9^u7z;-Zu6S$d>Ki(Cyv@@tsPVJfzZe`>k7vwl7|uH)bRc9GU>ROaa^Ez7|rvlg7~ zD=7B(q^qe&!27Ted+;LBK({xC0rHDk;ty!g%M)m$3_4Jw`}nAG=YwawoeK9HE8geo zR;Es)p-?!N-15kD#n=rB;Rv7{TYT#yY1-h$Tqq5(-qW||882fym3oD%m@%bGliQH* zGH7nHhi&{RlW=2;pQZ7M?==iH6><<2h=L}=I`gjYMe8G266=jP)|(8`?+|KO4RVkY zzPxw`mD3LBBvhp@qzrc8Ag31Da0Raa$gB7Wk_R<<|mX%sUiMI9%t13s#VLhftwEsBaXwL&_K(1fn&RI)+@A!;@0(SC@iOGb{WfuoCbYny`Mw?it; zrz20ef5XNCfFh|p0(A#$&W?=z=S34-)5{6sneffCcXq~JUHkqLdwe$(AONmM4$r=( zRYbUa$2{ZF8VJV+2x@NnMbJg}Y-UYKV)ANOl**L&Q?cYCPiIJ_HZ_%avt2w!>G^DE z(|TATA`OZ5Ce)UYg(V%|B(6GA7RErJ(|3sS8x20W(`-~QTFA}zw!4@qu1dC9q#I)) znOXU?SJE5vS{9W_DO09i><yNAzaMkwr#krwdqfHDgOOo*^CO^om5XQO9?OhT5(;0r`6Qu+q$NngV%O_Dvp^d9WcgTjLp$%~STtJlEin3Z*bRXQXL{Py~b!v`*bXtW>a z;`oG>@s^b|dmS{HZCD^_HJ{f@h}OPhrI-?GVSmDkN52j`E&&i}2qo8u1z#u}jzfb^ zdz0p2FJqZ}mOrLd^h5QWe#Hnp5$MYab@M^}F;-;jkxS3ap0!$tnH%BgJqU+KO>!jg zs=8lZpVx;pBK?YcIWUkUg;4r73I!0f4W^`vp{}mnF z?G$%0T!!@8%+$OBcSAM5H|4BTSCSjJ1K|ph(lk5d1&wLe4=$xgKT;T|i`6Rv9I-&* z1paR(^=%&H--{rk^I7j&eK{VNupmzGe}xJP={H&eyhg=9mP)nrB!9h_gS8B|d2HP$ z@LmiN-^xU*bpvRGX8p{e=TD#zFLC>B$r;6z34m^4YK1)Y?V+P-6zR86D#8b=;3Ka0 z{0do))BUWgK&wQy7wQm@~`uu3Kt;W2GbmEf;U6-fi zG@e_@Bk~(rfHlMMN9${rrIntO+DkI8@tu*;c4MJ5nALMwJk}hVyO<6~Ab0?LrysEr ztHaNZ_)cvCS}1jbl;JnwKITYZJ3sE@yL>M3`D`RkPeDS|6r}=;O?rn7M>sk6TCWyO zSf9#@PiijlUb11ELem|KtKgjV)5o5qyL93+4Wj_;zY46QqwZ|K9#PM6ve)~I?U-nk z!LMctGU&ofabSYSH?1=S24m4W9Gd3IJ;#gbbn0{9*!*EOhPbqSw2dL9a`_(%$FtYE zgtCX%v0t;N8}7JS?qB`vd|+{%gE`#|GQ@sEh^-+28Cy%kB(q=(5wzz|Cy1 z@R&{UX1_j}-afm=C+dU#wEcc7nw-~QA!Vy-pl3a+Y;-YK^MDSW+Mm{IB&LGHUZ9^c z;=j1h<~>N&jl(xc6R&G6tjJo1X(?=u02^7r_vLB>{lA>s*}slz%cI-@OeJ|nuKf9? z6V5!YLshKC*I}IbDm2Y{juVJ>4#aPdOz~LAVn)8Io;sNa2z2y9$N!X1$Qt5F(=im^ zNs%B{SODOLpp8~NuE4j&T}QYGY8!km%P7!~2^Py3J9 z(K^J{>dw5T8{|^k+ZEM#U;B_;7Gu}-#vsVUIMH!JpAi<6+M!)`KL>Hs^*uEpc>_od zi<6|B*@S3$b(Yq?LImdWL>*^To9AUaDrEzF+PE?L%LDKL(-E+~^btqd&g4{)R#HU4 zdfO10NU)Cwc}kW2JW1gVczfkzF?!1Q*N%~HW_WZq2e1YUrvbY(XRkwWQZYovYxRDrDv00C~AF(X_1)d2nYvFs87{FzUHC& zp40S}C_SO#IbEmKdi5MbYIJK`k@{s%4oqs-VeCuEvWD*M=j1eEaq$)wW!&hgMb#RE5+jETjl8T*wCU0l$3(~18Iij0Ep=u7ChkU2 z>Xr{v_kTC|EB$SJcM#G0R=IjDEVR}@wKP9HPo!>jfPSw@f_vCr^*hrcwnJdmcfr@v z%aMxQSwxCOy=AF$9yY6Nhzbu)vez6jTZGPHc|0T|LBvl0{AuSw;l8Gsa|YAaacE}s z$D@*l2Udr6>EM0XrgLOHZMZb4n7kM4Dd<%cn1x=6t$0 z3T-wJ@(4!mE2W@FiA_AQ0D1kwyz3n;8Q6TjdBFFQUR9OoUbjLQ{jF;sh~3l|_I^8( zT+CzKl>Qi-)hF#e*#i~ArM?WQqofz&%Oolk-2#*7!eWAsVZa#RdlkWEvirWGf*Q!nS2$w%1 zOMU*GJz+B#${Ae&$QSO8FL5lDXg5CVE_ zqc84e8VdlGPkfPqonE5wUyUeZx{D=}O94MFBU&HhZ;@6D*di}VWkGan?Jy*rMM64< zEZ6ZI=?OSZkKiNoYVXOx)|cT+qi&JGV(TU6NW={HHnic?0E*Ikcc-KH;L2$)NA`g1 z<3QM6^rYf#v8qZkwp2~R_Ggp@>xE==ReaWvJ3q=8QA(WbDF2f8SXD_6;e)=71K*C* zl!pb$CU7S6zS6Xy&lMJn1fSgsm#)b+xZhdKYEV@6SoQY`AN8j4-~(J;{GUhG9EiLb zRfU^ehS(|C^MCc5VNcaH!2f&Z zeGs`CZleqzBo;oV+BF>Xia$(+oo?r=n-U{U+EJO2mhuKVJtnx{k^KU}<77sJ^47H? zNmZMjy8ApZ{q7`CZ~nOFo6v?4boFuJ3@y>=qgU=GO$L(qg56JHo8#YHi4inZF8KVI z-nE&72puh)PMaegh#eX-<}?WL^d_J~Qk|h#qN08?G*L8aH_}mE1!ma>7hNfd6~U(I znOm&%9`KK=<)RM>Fng#b^EkxQOGStv0B6Y$-*rCExoBBV*a!(VV5?Q@>It6H_98r{E;#;Cs9=1 zw98dXZ>dAO%V(;Je$w^0t-*=AH4r$+GviVN$%PVT8aD_8y3%~qnws2}yHlO3FFOtX zSqnh4j$xR!0K$rjc(8Y{+Am{6`S*~B3o|f?#dss7(PNK(TqIn)3J8cSvo9YB{`>6H z9|UWH`;poG3N@RU02`Nr#NH+>y7O-pi1h!1wQ`TYqG}WWU&hN-)`qsT7!&D$*b~bC z;LJv8p=5B?Qjp!=R%A&Dc+K_ScF+eaxHGU7`!-tB25jkpm< ze}%b$A6I0G95avT5bWMsV?*8c^N;_wuvlPE__2e~%K+)^$-Wnu*XB&c%Kzyy^|CE5 zqjz{lV*GHWMI8!yd5-R#>hD$Jty)!n7m23dT6}AuD>HNi*&{L zL=EL1^Uu*CLQU}sazc2c#V%&gk11MPunS+?ZtY9ii>G|M`FC;#E50V44WMK#tf-ro zJ@w?p@bCp^q|4*E+WFFOzVzg66k!PLGVG`Qh7^p%Gn@fG)6`yGV#ZxLyYgl{nh|Gl ztU6((S?YN@z6H|~to4e1(^*it-BiM$-%|*UE%^N7YZ>d`)x#-5ybR?Rf%H(Kl-Rm5 z`MQ;*Tq=8*aZ@}WPSE3I#1?hOamhy(#fFahaR0Q=Hj<{%pSL$!OyAsL-+lK`gwhaY zXquyAYawRIJz;-*gRj-aRnpb~LRGM;u31E|I1=D6@fa>+g~gXa=42u6>1v@;nJ`zH zvVY#6pvTom@Zo;GVA!~N;!1xe9{tY(NLYVW{Bli*t1?AD|M;)y;pMdZH45w&_1Et& z)uc&3%Ksn#+DOclGNjQ_Ega3=0In7$4*!x)rncy)TpU#FRR2=K!fcHm$!|AqS>$^QuaZ=z)EO|0Dh_8<>1v9~c3ceJv%pkikecQdna1W*aE^RWGG z{Ws0R$-&MhY2qwrVPj{DlRTI4S9vrw0nfFb^DV(JD1 z(Ezx*n*sjA8#gN6|Ba7-G5_~ck+HD{Sh%vm76ZUS$^y1bEnu_cXa%sQ;uT>3+v>lC z!7IBlP2XSe^jeCxw-zr9zRi34*oszR0#tezleNSD!s<~HV-nAiOncN#Gu-TFF`~YF|ybcMO$j4 z7vr1!RXM9&H~t5{VnZ#cK0$>7Z?dtmpMr+8*V}tA6*{{b;<>=}{s4|tM znE?tZ=Ui*qqqs@DrJ#b`z1Ty@;Dqzxx~UE6lT^0tYA%hg zC!mqF|EDwJJYjUhC|4Sm`!qAW{FJLFZ*PtTJg=|EQ`I157Ki9ac0t2ZG~CoAi#t^h)TC<5?WkYcgcwhw z#dL%@H?O__M!-oujcx?ztZvI&aAKuetbJiD%#cJ8fk>Vf0f!H%MLI!3-N3E~)FgCt z+X#yr%&XNh;!|Jyh-A96uKoY4%m2#ie=q)jLiJy2;(yfnKke`zO-seW1=C>vrNB5i zxp-mXY47B!;cQ}N@xO$QO~MA?re@(P>Ez(-915#S(@0p!S;p! zS3%?F=Mdod-$m_YHPRDL^YP*m^l^fn^XpqGajk-ozBlG*fhQlkaU?!sOG#P6vG#l) zFYS3BGpb5%u7)M$BKapK9qXf(Zb-;Gx{o?YWXf;wu>9aTcmYXOV2^c`B6Y*nvNPt{ zK&QNkO@OxcYMUncQLE}~rG7J?owv|GKO_JD{rA<9h4##@dGB0Ak@tpWk$0yj?NQeV z=G=%%gr{ja5`6w*vHUeU>;Itby`!3bzBa&Eu~4j_f}kMMdnXkA(i8+ldRJQLfdmMl ziYOpe=`}Rzoj~Xyy(e@CgwP2!NDZBh-`~6M`<~rB``2y`hnz$C%*>scd++mP=00YD z2kX{wZ?g7zeS^ypU4mVwta$fMBChT7R5xG!A*?L=u!^^UdUM2TJ1Tu#R56ctUSzrNEPaU{zZhx#+jQ8wuQW3Pxpzl;HJ*w^Rq~NeUF}kL z&g2+C9b6zbrv6}}udipX-8De7;x7$4K9llsuT6Z^LITg2a&}ZD`XvO~YF}{|La2)4 zCE@hSOr}>a>))SVU#qm6oHi4WAX*+ptas<*B;fD6jzWXzfvsHB9pY+P66Zh}@Mzk^ z`BUzh=YRog`NHkcr)J84#}!p?@>#6zAmNC6-~k+VN*TDBwY+Xkw!rrr*I_0P!HcJKC|@u-U4v`tYBu*d8br9(kw zVQU@1FANIboO0=Mit0~Y{&~OMerM?OGkge6{~b3cXDqY_jp3}c*p%<}H3c_mun^D! zG!=Yae5c1KnWY+kuG>nIYGF-@_nQ{6{Jo^>0O2Qhfg^u7%?HTl?=~+F;yXu_9MHaX zZKDiO+PdDK(onP)JM`79#ZY}3#vz1j-1Q6gcV>PC439W+bg-~!Gmh1z1bk6_-TWM^ zA@X^6_9Y+6LuKZPFpO690aj+4+qB}7iMPY+B9XgP^gqQzR+Fmi_feb8SoJz0P-0d` zr%tr!B6)0c-j^|VLbBA1@Hx2Nx^p|aho##vZjU(PcYhM#_*{?@j)TS)R79@#t6mM(-?9z%T-X}}H9 z9fSO%cghE^cgCple4rpEEX~XOHHXNp|bfr*JEz4Nnz*;8U;37C<->i+lRBYG&#d7<{Y`(Vm-HQ9j{8&A1y&CA z@|qO#G)(AX-Uavw*$K@2_*3}3ws6j;U56M2F#Vy$f0FK4o&OH~Z47`^+a1tHrfX z?kR2b8=`E%gZKIY`}~gXRV7s$dZZ65A(Qv+?ElOwp1eC*(&N74hMJ)VJKV!w>-}^3 z`3R@KX`NFyY-EC_HB6sYnQtJttEV|Qxi;#!1`)0FO)Ewqs%BSj?Nw0?G;XF~ z)K^Y-eVI4t$@3{y3Q>wS$Go>R4UMGBWC+!`H6JbK9DbS}LqWD4)9l2|%-pH&qm|RD zXCEY_aT>zBp4iVG7ycB0g03s&pD?WI^G-!!{t621wqKTkk@+J@-z)e;sPmOvH3~OA zWEFS48`vJR|I_e6NFh(m*M{`jorSMIWYVKU)nN{j*+#!NNBV3PMRryY8gLe2%wCx|ifPh%pCR2cPFW8k7*_EQ6 zDg^*{%wm$$dx&~V>(!iP!9lY}+sdEjYpWQo`z~$+2GT4rtU}Fi0<4_v>7c=_m6Q}~ z(u0jGdCH7^OLN8#SV5Xsf~E2cnziU%Tn6QJ482&bevqtt)65@jd6kU3(^zw7v5nUR z-;Bdn@H*N;6-5+#Rinz(r*&&Z-xg8b6!Clr?UB5_V}PuE2zh9$VdeIvsRrq|d4A4} zxOa@=JA{$e?Y64GD~63Wui8<~;U$5bo|!Rc%!eHufq~xvMGUGC24$y>5S@dzk)Xjk z^XRj(o}cndZ~ieGnU1|kz5H1*TRN2k?_Rg0tV*i5Z|O9SxE8ZCQu_gHll_FL(zIKf z?g7J2fuQ8Mn<^<5*vkk*j5mARM^~lf0iUNm?R=M#+o80%#ag9MS15TN>Xu;?LcR_$ z2>FA12r;L^sI8zglDbn2Pm4!?O;8hLR$N(BmeFTiD0xW~jdRCL12ZgKo0>{9JWMA% zhqJRod`C&#?WK4l15r=5r_9kMMk74z?f4j#p=e!6_snfT;?@24e3+k4+~OjewP0tu z0arHjw4z>j?i%I(Qe<{uF0uNy_TaJ0Rfl;FO!X6dDgSr-~n z@HCX13y95PWAMK zO2ttH(wUT3Y7auIlo<*t({majAmj4_6!U3*Xo83>MH_7eNpckex|=RvWbx-=!GUv0 z)e#O`nv(#U9p3!FB-cM-XL5(+R{I+|OnEz6w`x=;_y|{HNA2#4U9J7a@o$%}pShD9{uX_sZ0?bn#sols}^z28&P zEdg92`q7_Mek;qFCESq3^`h%8+ltagp0^dN>i+pG*+8~q>*owwyK+IRG3%0}o%#ps zM?-jLD@dl)apNfx&>O^&47dY7u;!pp#Mxne;+|IBHJPht=lxBq=(s(Ue&3m|MW&tL3z z`~kciQ?Kx0TJzaDE38-qxjS~dmvq0JQrEVey%qbeLzRi=>gJI}lYvO1lJZ>v-Cswx z7$*lR@*f`Du6d5Fjw3R9l&lBKCgHMi>+^gI3p~4tpQ|f=fw> zi|qqfc-F+uy%J)m*W5NES%hPu&IwR`?fZ>l{4W;u?tE;)TyG?%;>1Ro;>HcgV5v)3->E$+E-rPxff_A z;;$nY8ev{Oo$;Ti){JF5VTX;;uImPPfkK|QRr2N6U-H{@?)G6 zUW*k%c#X!v1J}cslie*%wL@j%(;mFwREmsV;9!0g!tc$_a_)zJ`sCR6DnMAFHpzCh zS9QqYhm>q3xX#T8b{$|oY2H|6=mV=Cz*(Y_pmnmc$x9=D88 zy9E)qOe#ucgl~Aw`TE}FDC{+^Tc+ebu?RW~Xbco_{$V&Hmr#v?_FoYVV+M{^z)Bhv-WYR~Jr%Qm7Oog~HwZ^ZXd3B)9sJvCg2 z-n`jUEN@wLqrWvK`31;Y=0Q<1Lxxvswo$x?n{SU$#J7Z*DZs#D&_dBC#Z!g;&bM77 zeTHJ3F@NzzXE?PuEcSKhlz6gF(cc;U3G_tBiVgqZe;n5^IxvM0JDrpAudAx0I0(rV z?F+6y@WJh4%zA{(ImbG+97FSP4C{xSCfEe>mLXAULKN9OqmsQ*w^?Gq0bH_D%=Ty2 zD`%fz*HDUpYMU-==9UUxuUt%;R*tX6{*~HRx!`VO7Ag}24wgM1EVGF(cl}!K z{k0tWb;q^5-1AqYkTN!|@PRy6Cv!}cMjVvcGX$uy$EccHc8Q!k|;{u#wY0;kJ2}k zAss8y%!&~@JNIH({A2EGFe@?{3Z?mqU$MJVJ^Fn%Bi!XV_41C@W4IPcin~`RYv=r# z^BX$-_;^iH5XIx2MQBFTADQY{N_I1Sji9supMTBe{y|8oEbWG&nf`VO?nx3y%>KcHQAKJ3QN`5WAX5k|iTg%3|f0)jK-CDyR! zQ8l}piG6A#ucM#I^bD*n*yocs8b>~{2FWX*pZ;FA+kpNae!iT+REwKk?Dbi0L3&k6 z+UJ;?T$iU zuJzTbOxgMvuU`)jS~;F>iY%#@-ieEdbhHR9?0b?~sG>0zq20((U{C&fQec1gu0-YO zdUxEIw9C#Y?}aDd+6+=@Y>P=0aP|3SW}X+*Zw0{UH!I`Z9oo0j-5c+WQcL=_g zv=T@|9eTrI<>Coopdv_W{o44IBrnt|h%u*%}%@ECy?mrXz3zW#8Z zt)S$rkVxB_uvGQZw`4KMapr<+iBP3m`!D30XDA(b2)6DnatsI0BoAZW7$?v5QisQ#*29ji%?y*76b_ zMQnGPj-xqE_p8qu*lwBlnz`Wa^xEA9SPyljoDCH~1G8voqy^YETMD9-&-dS84K<7T zQa_wGXFlZ0nH)pcmc48^J(I<``yM2ztFGb7kV}=<0JA#7`IhTGB)2Dn1pKFe+8Ss& zrT*+4ww=@pC_e(E6?dhq=h}4{JCk7aCJ!?&jt5E?bI)P;Zgz5y0RX4nXXNnv|JUnv zp~AynyUT!A(|5-KfLGqN{rliuT8Amr`cT<|cS_wJd7j?Z)oGI4HtQ14eEus4$j0I<$*v>V&0>NkX~jZE+8Pyql`Mc!|! zW^jYSw+G0@p-p+V?7?uA>wwRS!+Fq&r%iU|@Y8DmfNHzL3pC)fVa%Jw%6nGAG6O3_{ceE#T`e#g_cPDXY0)T4@L_@D^0jKiLtwM&432Nl-% zjH0FfhXBBr*GQm2NSC#%b+P)K_w{$ldn=)A=ZpUFuluav+Lr(~9C;>D>t=AnYvgtZ zcF;ePUc#tXCme8x-vxn)y{?Mfm9~M>Akob_QSd|NAhG$(c=pD~-Jpba=2%^N^8bux zn0KCVg9`wFJCu`^TM+0XdfHR*7skuLs=tBxI)1RcfyV55!s`%)wlA@|jOS}lWuLRU z{-f+A`*)ti#Cqw;!@Byt4(M7X#XFwT<-3%%`1Mm}Qq`^P6mb2-fdx6-h4*9;)^@&B?M5A@FB-{?FVCA^l=X%RPNf zbfG*l)wbTPff&<p_1+Sn6XG{XGVxR zA1UdH+Au(69uW? zUL^c+E2;3vtnjR(EdJHIzg7(E{SFVArz19H5VMA+`Dz+tYIgYoVH>A|-g2<-iT9^A zSWWMLs4zZ^XT|i|}J%`}M1_zI$}| z_;fi=^8?$PGQ?S#U5q#gTGp>3x%xW0;F?NpKt#L*n7obR8b!c5Lm#7jpP!kf#GL*q zwbP_-l1y@Js)Vo z-GtcSTlD%lJ$`{|4!$%jYK`F*-;*$VRfQL^U3>7bnI<3r$Naz6XjFtNwfk2G9*rQc z0c5IckTJP_mA5foG)FO!q4G57&8WT740-Zh2vm^OwU7C{fvHj7i$2MziHw)0!sFjV{M39iYS_4{}ZEAbz7yx&tVKX$x=-c~y= z>{_mk^mH)~*v;6T59NzUfx-Cr(4tY^Vy}os<~!r&_xtQ!peH0s`y)86H1-MWh7auMQMH+UqKp zmOamxXgXe}fit0l3SFBY21=v*)=UF+_3*Zr$&sAwtN-<{Z`|3W1&he&gI)ds>n+N( zCk+>6gp1Y8y3L+O*6!LmJMy$h(>|<@Eg(u51 zKMmY?4C$%Bgfw962Miej@B6ph+WonxOEt5g4pXex6& z1drQp#DzWPyAYV1y;Tx{lh{kGQ*nh`URgwI(HApdXLeiyzxfFrop^c_XQP8-g^=dhWalxK`8v*QW^2E97oDT))ueDV~7{fMA zruKueJzpDlwsVl4^jWW(W0*c(gKY73!{g6o7#h4L8qLH?t;oQ#JdKXf(COd|q6O#)T~19r()!o zMj6=aW};Hh$72#F!y64#B-9KwH;i(M4tG~4+k4SVyai?Mhc2Y|=A+PKotS6i3{t9) zh#pJwE*Z?MJ(bh7pMR)Fw680Lb(4z+T}#)Dr5{IeO7k6Ut>v8L4SUL_IOn&0#9RSr z`Bbtqo}B_07~r;JRmI58_0*lJn0r;vNcja_68?pbp_j-cKLo_|kEB}^jR*C|0e%Vj zcs-*B_a-Lm(9=A~N;_R2PRZppq_L&a7+IPwU#K!4S5w$`G@Dxdp|HdR}?lBG1qZB#}5g$vCoo zF+nb?C0`J^3)wyuip!6c*&#lNS_sW5I_;=bKyh7gIXTQ;pSWfi-gRAOS3wQx*=xU z&E(2lGBsciuYF%&u{cf5x2+@iruzXc!96?+etWfu3cw$T!&VWcQ`F-lbyHQ{@U+No zF7y|@dTP5Z5^gNSt)!%UYfNj&S=$?hypR#w%>_C`K~Nl+c@$x-Mqfjh`P{yVu^~D7FE|_rbM21`oh? zBkvYT^cPu7LsWpYIrWhFg#BW1nA@2Uqp7MMeCTMDhCY>)^NKV*+^(-~fWLR;v*8aC zgVIGg3c;*|?#33>dL0E9#<*vu@Q!#Jlhb04=R2nGefSW|uyO zp>2nPU`Qoh^^_dTr{Z-~Al!@Sge z1m;1=4xiGFW|(ed@-?Ck!w8J~s4|f%bd8(9?u4I3Kj1yRufYQh*hPA8>kshy3@?-_ z!@=e4BoI!j*jx-WFSL)m^qZ$3ZxJ1)uim==@xHk_p^87@7Fzj#05eD{cm(vfapm+& z3vux5u_#ObpQ+r3N+R9mTLiK~(w(oTHX0)c;K}~yWh}j~OEx-C*C|H`p!WrbjUu~L zpKqkc&zOvs{NtaOYEr+DSd(P7U-8Y#S{ z__3Gt_?jpg(AzwRQJbI#lSXq`w3~W(Q?SL}d!_uA``=UB)<=3cbjHcjQ_xde4eqY9 z_TF|&l2AS+-&^{`y5Z3U;$lu_k)uD^yU;=iY2$oj5~za@;{f#i%Z!L8+@VkdPC3|xlcD&JzmitB53#vHhCe*Dg>~&gWW_zawDW*zRkG{LktPNo zB_Xqeco?-LsKQkGFkGW#;~_+k*g~2=EhIA%R9!pOWSssbYGyN-LYKjfwH-CI%SJ=H z_>|)uE0VqZH@;efJabBIKmTa4M0^W98X2`Dr@Wb$0M=JyJ1xmDE%~yIfmF3SrpDBM zv=wxI+={S_kRMAX(CE+9E|+>IiA*EEVhxRqQNDNq%&`?&CXKUqL68hd)h<=>&UeV3 zM6fdP!I!YznV~1fG*9;DzlfPIkW1kl0mwY)fBofu=bQgF_&@0~`LL9@K3@61knttJ zE2sa#HDp#{*5bbrDw$4b?%vV4MSg4juOa_8z#vcNRkmJ34)Pn#|FyxTfPp1M>GQ#x z3mxiS8{2z(3F^1!!w%VB2A6P`Fp?RMFaQ0Re>Vod^H8P`;xLL#00<;4X-tXz z-{7Y6>d3pN@vF;*sN<=8!c%n*3j-||GiyEhqyu9z_`lmmzpe4^foV6qt#(k7eh`sO6;?$5!s0VA4PQs^5p0n(S~sX$quX-PhWPbuh68xnMlr$h<> zc%7#(%9=Hy3m8TuhG7@<=@2fP$jHb%p>Dzn;ybil@E(nUFKs`u3Q1;Puq2*RyFDkXsU6uDESA&!A2{_Y3 zD<<|}GQhjWGa{8M%G5;T_N2g!y|)Fq%>-?me%hbpJ-^oOKqh@~CzOEdhZQud2T4GK z>8rZQS!8aE?k1SLpw-f zmz@#Y*M;o4Z}=6`@8j(G-p#>a-3Ci7=Mlt%O2;MFVmr+NM! zB~Sx(C-Tm{*sls2H)-imPwp>ty+}9#3W1gvmwBUrLT`z$@VoVlOb`NEf`9;S_JPnf zgyna!LnlD%57sERQQ)vkOe9%kuSoIyhOa)sak_ZTb=uY2=pyn8;8kexCVWAA+S7G) zav@TsLC zxxALd-(S_ z(vd1Bi5!U~Q;&E%(0DJ=AI(*LqR|W*Zq)r_=k7-qY-B2j{NnY26qV}K<0W<~TfW?^ znvdCAo?`0R#Z(th%P3U|*oVdx*m`oAJ{_uGyipDvo}9!|lleRH%V=*=I^V!KWs{w# zAp&i+xd1?y3Le*n-5ef2xnHoK?6Cgmq%GWFniXSgkKAn$9KL5({(HcFbD8J)-{=E) zMKQh}kYqqQM`!#FO8WUw?@`}+-lQPNCBs)`XhiHFWtT72+qT!fpt7aVe52khB6H)k zFI=djbMT>Nt;>_9Q){QPtz~sYRDqAD?P5_esvmk*_^-y{B$jWh<^plT7$p7gY96e7 zzM5xjO5gcKnh+e0I(=wnBZYj51w~PtV_x0X7RSKEEFJ zJ!z7yV`Yt<8Hbyq=QIN*0RlF)W6;p<^8r?Kt$XE2?Osb0Soi`kIwas>wy^q`1wI zz(scAQ}xafSqrjvB?og>V-KTo&&kk)1eQ*PxRmzW?Y#=m2S<6w4+Tvo?Ky;tYLBh) zshy&ho1sd(1(&;PYTcXfXm;Z@k0M?u4wo+fyAsJ1er8?S49_6Xlb3Nf?(;>|u6>ob zHk#gEozHm%ijqSW!EMHVEoP_q3!sXNc}uf(N1vCew}T)&d?ke5FE#qHte)#Kq%Hk} z!Mv7l)QVM9UF1ZAd_U>VPv4~#WNY`7nV7^pgNhUN8$^t6kB@V4?ZTGS1BOWI_KEsV z!lF)c-tZ>0)@*<4I7vm#*TOi)Q4G94#>VW(h$Tl)a`%Q8YVkXh1ll<2`@k-{S|2k>X zgtvL&7}LKZozEa=6qJ!-#mY|+G48`Wx^C*#8#|0&4g(K0$*00HgCW`u{@n$#4{Z*I zN29n?RlO_!kzMY+!~eH8&k%dHbJ?F-h1l>%y{2a#lNFDJu5Ht7=S;98Y%7ClW53ne zl)oFpN5n=q+3MC&klM7KJu=*9+Ojlt03T(n%ZS^auc03CeDGdZP

VHfNBD=1OFQgYogl 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

My-a5$UD6t^H{_f}LkL{`yLPK6!Jk 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

pyP)_X1I@uDEj*xPM3S6n2jHOC7m4FGl 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

Smart contracts are revolutionizing many industries, but vulnerabilities in their code can lead to significant financial losses. The paper explores how Large Language Models (LLMs) can be used to detect these vulnerabilities in smart contracts. In this static webpage, we discuss the same briefly, and link to a GUI that can help visualise the flow in a much lucid way along with a report that entends the ideas presented in the paper. To continue, LLMs are a type of artificial intelligence that can process and understand massive amounts of text data. The authors propose a new approach, GPTLENS, that leverages LLMs to identify potential weaknesses in smart contract code.

") - gr.HTML(value="

The main thing to keep in mind in order to successfully discover as many vulnerabilities as possible is to maximize the true positives and minimize the false positives. To tackle this imbalance, GPTLens proposes an adverserial model that consists of two stages - Generative and Discriminative. In the mentioned stages, the GPT, most commonly GPT 4, plays both the roles of an AUDITOR and a CRITIC. The goal of AUDITOR is to yield a broad spectrum of vulnerabilities with the hope of encompassing the correct answer, whereas the goal of CRITIC that evaluates the validity of identified vulnerabilities is to minimize the number of false positives. Compared to exisitng models in the market, GPTLens has some key advantages, some of the key benefits of using LLMs for smart contract vulnerability detection are as below :

") - gr.HTML(value="
  • Generality: Unlike traditional tools that target specific vulnerabilities, LLMs can potentially detect a wider range of issues, including those previously unknown.
  • Interpretability: LLMs can not only identify vulnerabilities but also explain their reasoning, providing valuable insights to developers.
  • Efficiency: LLM services provide efficient online inference, making LLM-powered methods output results much faster than many traditional methods
") - gr.HTML(value="One can imagine how powerful this model looks in theory but there are some challenges to consider:") - gr.HTML(value="
  • False Positives: LLMs may generate a large number of incorrect findings, requiring human effort to sort through them.
  • False Negatives: Not all vulnerabilities may be detected, especially complex ones or those missed due to randomness in the LLM's output.
") - gr.HTML(value="

This two-step adversial detection framework has but one main goal in place - \"to present a simple, effective, and entirely LLM-driven methodology to shed light on the design of LLM-powered approaches\". The two-step model helps to mitigate the trade-off between finding more vulnerabilities and reducing false positives. The primary goal of the generation stage is to enhance the likelihood of true vulnerabilities being identified. To achieve that, we ask an LLM to play the role of multiple auditor agents, and each auditor generates answers (vulnerability and the reasoning) with high randomness, even though it could lead to a plethora of incorrect answers. To realize this, we prompt the LLM to play the role of a critic agent, which evaluates each identified vulnerability on a set of criteria, such as correctness, severity, and profitability, and assigns corresponding scores. The paper demonstrates that GPTLENS can outperform traditional methods in identifying vulnerabilities within smart contracts. Overall, this research suggests that LLMs have the potential to become a powerful tool for safeguarding smart contracts.

") - gr.HTML(value="

Below is an example flow of how the model works :-

") - gr.Image("src/images/model.png", width=700, show_download_button=False, show_label=False) - gr.HTML(value="

Below is an example prompt both from Auditor as well as Critic side :-

") - with gr.Row(): - with gr.Column(scale=1, min_width=500): - gr.Image("src/images/auditor_prompt.png", width=500, show_download_button=False, show_label=False) - with gr.Column(scale=1, min_width=500): - gr.Image("src/images/critic_prompt.png", width=500, show_download_button=False, show_label=False) - gr.HTML(value="

Below is an example response both from Auditor as well as Critic side :-

") - with gr.Row(): - with gr.Column(scale=1, min_width=500): - gr.Image("src/images/auditor_reasoning.png", width=500, show_download_button=False, show_label=False) - with gr.Column(scale=1, min_width=500): - gr.Image("src/images/criticism.png", width=500, show_download_button=False, show_label=False) - gr.HTML(value="

There is an additional stage called Ranking/Discrimination. As we know, the role of a critic is to filter out the correct results from a myriad of false positives. To ascertain what is the best, we consider three distinct factors: correctness, severity and profitability, because although some false positives may be correct, they might possess a diminished level of severity or may not be profitable for attackers. The role of the Ranker is to rank all vulnerabilities descendingly based on these scores and choose the top-k vulnerabilities from the list as the output.

") - - with gr.Row(): - with gr.Column(scale=1, min_width=500): - gr.Button(value="You can browse the GUI by clicking here", link="https://e5f2d87bf4047aa563.gradio.live", variant="primary") - with gr.Column(scale=1, min_width=500): - gr.Button("You can view the explainability report by clicking here", link="https://docs.google.com/document/d/e/2PACX-1vQMRO7rtLrdXchyP1TXOH8jJ0jGS1lw-OcAvmYGDNFve1plgXjm7bBGKaWrlxBC6XdIGpvku3ArNavO/pub", variant="primary") - - gr.Markdown("# Meet the Team") - - with gr.Row(): - with gr.Column(scale=1, min_width=333): - gr.Image("src/images/developer.png", min_width=300, height=300, show_download_button=False, show_label=False, scale=1) - gr.Markdown("### GUI Developer - Aishwarya Solanki") - gr.Button(value="GitHub Profile", link="https://github.com/AishwaryaSolanki") - gr.Button(value="Related Work", link="https://codepen.io/pennywise97") - with gr.Column(scale=1, min_width=333): - gr.Image("src/images/author.png", min_width=300, height=300, show_download_button=False, show_label=False, scale=1) - gr.Markdown("### Paper Author and Creator - Sihao Hu") - gr.Button(value="GitHub Page", link="https://bayi-hu.github.io") - gr.Button(value="Published Paper", link="https://arxiv.org/pdf/2310.01152.pdf") - with gr.Column(scale=1, min_width=333): - gr.Image("src/images/professor.png", min_width=300, height=300, show_download_button=False, show_label=False, scale=1) - gr.Markdown("### Advisor Professor - Ling Liu") - gr.Button(value="Team GitHub Profile", link="https://github.com/git-disl/GPTLens") - gr.Button(value="Profile", link="https://www.cc.gatech.edu/people/ling-liu") - - gr.Markdown("### School of Computer Science, Georgia Institute of Technology, Atlanta, GA 30332, United States") - -ui.launch() \ No newline at end of file diff --git a/src/Gradio_UI_Files/images/auditor_prompt.png b/src/Gradio_UI_Files/images/auditor_prompt.png deleted file mode 100644 index 87beda3d944cf0425ffd3c3eb45893c9925a7c90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131536 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
{dN)aPN_hVC0PY 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 diff --git a/src/Gradio_UI_Files/images/auditor_reasoning.png b/src/Gradio_UI_Files/images/auditor_reasoning.png deleted file mode 100644 index 369add67e4c26d1fec133dfa94ef62809b464d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73285 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�JonlU&~m|65GkJ7}H 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

mM1#bPL!R#2r(`khfUyA2H>FBh4iNm*z2~6Z( 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 diff --git a/src/Gradio_UI_Files/images/criticism.png b/src/Gradio_UI_Files/images/criticism.png deleted file mode 100644 index 499ccfc9e2b2f71d3cb3102e7bc633c95d8a02ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120923 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

KSkHF{u0^kcZ* zU~~vR|U6VXZ)ZJZ(w@>K;#09X)MMBzoddN$~#}Q)6yka~%5(ht1WblQDeY zfe977YLOplb@TRz60q!0(HKX?b&7!r)n66VLnraGw%qy?wd2T$O1f>E<&}<0|48}{ z-D0MFADnyzYX;qpDinR^!Pi9lE{~(aWS-hS`!Txui1wqR^gNaf$rL9RXcUFFKew0; z9JdS4GJdt(+Ol#;?bmurUt%=Ce>3v8>bfrXA(zs2iO@9qOghjH@wfC zvS}Z0Z#D<~jWyQpU)F?jMsGUodYRp(Qh2$~XaM8>#^-afZ5ghW02hZ9yI-(dkSiCP zcZB*}PJYA1RCMr&pcV`XZF|$Ghe2RbSE}NUn1dqs$=$D}7AB7aTLqYJ_mqIAktw@l zh~Yjb!Y`|)$FP97v?9Ib_p_Hn*zV*&;A=WrG#|_BNLDebpPIIc-b33Wk_v1kwodok znO$^(7)?^z*+b!$`(-bTC;w=$vF#h*%R{`P{Tc{n6?U4FVG8y~Gyg^#^Z!Gkl|b17=>sLRM_F8n)y1}$ zXCCCI<;L~FYXRxE(7{DuyMw_JOt#H#${0NI%46LagZ6R0Z0~dvw5Gd=!8x)0j1*?d-~e!nf2 zxp)nJI>`3zX|PJxb#-7FIZVhRYTgL{#rhCw=hYtyG%brFNE4JSZ4k0#e;lYT&U8)dheV!j`-RLyHHva3%eFFTmvH8}`LeOoI@zQs zdb}P2F_!t`xK#e0eSeR56bU1jyXr5NM)&2G59simFW1`}@N9qB`&j2FwR0+66Dlfy zjZqE6UnDmtEdP}4kf?=NW5DI(S` z3O$thQ_upQlxC~c`mo{Y#A^1Zxx4Y#14sux0vx#n(?QtT0p9n5ea1g})pQ>_&)ZI< zsf}#q0o4O7(ivgL#y$j1Vu4&w?I3{>?2>CvjlQ^Y<5XZw*1$ZIHHn~q*%RWfte@bK z&*(x)sXz(;{;m5L_--klT?aD}=dVGU@(Pxjd*x><%~n^I*6|Yz5910YPTR#-;IaOC zbL}OrdiEZx@@lLRvwBs8X7}qJaZX-_@Op=e~Fw(GC(qWEOYvmsdK9cri5^jz zU|n}I0c*lL7{%4jO;yBWiEw9`5RfxS)iTF- zll7H>z8Y5BrhI(&zoTU?#A12pla%vE6-IL=T^9?yAHAna?uu=GXdS$MC&IS!(!hGc zf|z5L4Jr<8)37&q>cRe{yyT3KN0;ztxo-?0e__HRFl8RqkYF^1*G3hW-$d_wBS&#jA5`v<;;O2s_YrM=~#{KaJnI zV)O^O;m_Egw;q`7NYK9wPzo@kM${Foxq*&xhzDJpZ|80>eTN9gT&Cer12BNcUh!i5 zD|*KacWw@s=5^QE!#s6O(ce`a*P}bpHdLx#yQrmI#9nd5e;GlARroH{XQ{#~5bzzB zAoA(bc$Wmrv#S$yYEb6>k*xki?oLmeyl zn#>Gj@)gW(srw}pVp~PbH5DgnShf|xk0G6mqt+6k)+21V{+`w9FMK~<8mB`Yney?G zxwd}tWic_igtVA$(^lJo@T(3*_>f`Es5xD`7jPnePbUi722l>6HvVrY>7dZfXbLArn3d|a*ZY~e_p9e*~V#TmZBW6Fc!10j0aYLdcPeLY* z|BjURcvU*tv;_>eM}Udik!9S~un1tdi@ARAFs)%&VD({p>I6ZCIHfO72o3ftovx^6NDvC;6A_*kwCJC1g@H}h|&y6KyiNGCt-3YfH1a7c`es@qT9 zE43NEUjWM==-Q^bjM1exlquQh7FE@C*?;886Ya5TuY3*+5LTvhtq1Kiw4Qh6`uvIt znl-m@d!*s<0t*Seb%3u;1~nz8!I&~FvUL4@IZwP4SrPS?tPKQje{U=ZU@yA2@Q}tD ztxjOVBYn7r0;#Bl^SlNf^Dq`ZCc29^gvMDnK-R^4=adT_p*X_pd0UaLfqW&H28AP12Qq25i}qRKVNepX^PbvL4*N_bFVNEb?Vu7CezhSf;FUC`6kVI1L# zUUytPMdYa4fCvz07Y@l%(#Cyj?Zv()h-@hayW{B>qJD3#q3M_u`GPxUD1uIOav5wV+?$s)R0uy4e(v2G2e^LYS7KguLuvj6t2hZR`bGP%7g*K z6oy|&fQhb)m!#~=Mf3LWWYL)ERd>M`?FGpYBG46v>p~k5Z68|9$Ga=yy?$}Yt`d02 zH-iE8xq(=to64>Y{1j!|CP5d+Lj>M`N-goJO8UK=uX=lPbar!n&4dFJHLc@*?b)b4 zv1(5J=)NAMHLq*TPryvL*?x?Mdt;;4(PUPq!|q?V??)=+V-laA=l5dx5@k#GP zswkBPBwzMKWc98IB$}JZm!Jm4ICI&8xT^@4@6c8!ZK0{37?F*u+Zwj z#^@sva3u62<3gasmyz{eiwt|ln%lxgtdYhr2ZPaENa?fzr%d1bri5sLpOiOCiE1{Pe?4tvzZkYTs;Ysk0-k};Hp*kQ&8E= z8n235+>2>#hY7qI(&u?SE=~>9BB7+?xp*R-lomSV*Awy8#=#ls0Kok^T4XuPUBzKY+ zxQa`B0Sg!uT(8bvLy0Hq$G~^adZ(eX(f$3WzrmfN3tQDD7?zT2&XA(eXALngEyI{d zruo8+`VS@F{rq`Ic_beN-(2Iz_G;5nVILDkxe}`EU+YD+nUbPTjdj$F6F|evRakwy zit?ZVFPCQYYp>=F=pJ!LhFE~3qnw=3BlYTm_=mt$OHw1eY!8|?C`Aky!X`{t`8tew+&;>{BV@N8QQsrB{|R0C9t zCOh^yGJ>f45+Jszs9RU0Jv5;&+YUzy` z09hy1-2!&;xrOyX+ukKx2IKpan^eBK0qQ<6z^+$ffe2(_Qv9%>6xpfDXBZ+c`w7Ski)_uJ<|Mjz&gw%gMOhq=kA=P~t#Zwi!Rk(l_*XW9O}n1VndHhjSPrCwv+ zP7I?lp2TCj9hMrWp=9osMY>=p%hhUX zJK#zgvYl$zdW%mW8>`Oh>WT0Twg7r<`XSdiRKzX@R|`b2r*>IxM~+3>nk?CJi3dLeGj0##7A3X;tX`J zG+j~4v=zLU)wvg6)P;eMI9eX{eE^`D;?~p=G(c#J1Y9VhG3xtVl{Ry+>try~@OHoY z#eglO5APHI9wu4z(2<;DLsU z+tjbOI7Qc%ece>DJ%s2Wit=>G)7eQ6Orq)YADAS=x0$3MxZRhyxi-HqCJ}p!f7p1?Yy}vR!~YHg#~WbGZr$%$u;+v zF#@{sm3b-<0JIU&;-Q*hxvs9r3l1o4CKA6W&yWoMh0%vHCXr$mcA#>Nu1C2J<5CH@ z+)#N(=O7OnK&kBuC2O}VD04vZ>^q^t4^VHEizIVC=C&3t-z@C7FWiF7JP+gxj;B(? z@b05gG(}xZNz5Si zDKQ)e`g!T(5-d)Jg}nA37x1`#+#R@6b@n}_4fU$ZYtj^|n>+Nm;$?GUp;xsXmwDxW zp+(!gCfFp}c1`5@5X*%?E_AFoy~W-rJ3H~&__ogZ%|7Ol3FX=asa#jy7FPm;CMm{>94$>L-lA<0jbkfp!`A4hF^kbpwAR~JA=f>Ls(KV6xy1R? zFAy3I<>`lNa)(zXr^QE`#sXi+d?%}kvOM)$F<)FWF50#}UoT2%_Z(@4#0vl`thT_5 z9dIc+uG1BCuesC52&{)l01b%u%jVgmbzvhgJbg8?9#xKDp++27dQpNZSQL(O%c=atdtDm>UbE?aHKx8Hj_&q71ARvDr_ zW1tTrXEJ(dtdC%KgJ-7!tI?hqIf0)UK?i{B`$FVcW&2&e(b5c8BdRO zyxx4Q6-k2q|;g4sX!mS>u z(jd5MC#l})2KqTr%m?VcUUnKOCQUWy@p`;0TtV$z02gI5TExeqY}+bE->kNCky(bR z%kZaIFy{O8`y1Dtz^Q0rwu7$nh{9vG^It36z9Wm}Ia;%JlkO zaQx;}#~>64jMo8J&w4f)$j2$(2X**>oI8~!)O?uLwuQQ6mib#-=`}X2Rfu28VT-lr zmi$rE6$|OIna&Nv`Yf#_42BnYyI)f?@`jDS;Sm;&TD5i8gcu=0QLz9Tp0@+U0eT6j zF2D>UlC9wC>u#Y{;LbXVcJm$inzTxDBqAR%UE}K`H-{T`U|0fAHnFOMAvYQg-u5S% zf+mawg`HeP=W-=oukD5Hwll!MCtm@*3|nQf@i(s%>>*n#%|0Fa0>zCQxuPhISL8jU zl%Oc7WuD-R+$n&B?wa?lv;8t5dM@Dr;Qcm4ZFFe`9TM`Ry*x~ zoH%HksQMj-Q7UOcw)Ndo(x_!7RL#+ec;&p2%3ixtYb< zM*xsp-{9W^{ohLFKyv0?kn`IO%fW+@`(ZCd*gqldV8C7E}Z(ESBT$#h)&<|W(abRscM}m3chUCNX$^ux)DVN zUnq~E00ueWk?(zGqyp;y9ti^?zU>vToV#z-X!{TrKSm$3pI0Q$@KV{8Y zc+q$2@2fu4c6xJ6(7@ z#<}R4!4p@!jP14?NudpKcPqsZz-QBGyDBkW z7clE;6p+miIKQ;_U*ddbXkeRl2gOZzA)$2|?Nu6{RAu<{(6Fo74@|rwrS{8ww@SO+ zihBhKcL53at(RQBRM`5>{Dbbc$(?hrH~Nc>?qTKf0c8j9l|BQ1Rdi9pnTL)GHLmN+ zK@C1m&p^q9KiS$B%RPY*1FNU);wACkUK*+Oq{1njwCoAC_2Pu=KTiMWW$e7j3uCe#I@Z99hQ873nl80U<&AU!g zU1FW&t9M9hqv8tTTNCh`M0zxdfMe8%nL;k3GJP6{hLW&|iWV*%ZPq*_f-n_H1cXlo zOP|8()7LBR17Gc!NK8+ty92dRjIfpmA#e#p5GNn|T{GcY_J6^oH zy#dSF7_sc*Dymw@DFB$@qg8TDWlPb(^&OaNj&APlsAb}(Rw)rObs1$St zdTr3!Vm%nZXdelSxK2J!llJMmD0s=Kx`WwBANB1k8i;u;&Xny{QnP1UE`Kkeeqk+UV4~LSDbRMtxrT$gZ(2;s@j5HJ~7&9ReC2YuTqqmY^Yg$Do>jR6$DyyUfT%z zmzq@T!C|3OBQ-?WGSxh$QY9fmnrOUgE74B)50#ksAh(>|UO|$u=ZK6R+TG*oSJvXJ zA6B&&D3Q9SOVd&)3?mZrVDX~|>dq4_Ln;!P+YLB6MnfVn`A8%ke;uJB{Nr`m@!sYF z?0ewm%4rnHb!D(H8X5@}8l6E|p*DHi;x&IU;B%@)Zbx5uV^X?rA#0e@lHoBYZDqsE zPsNkC$<{WpLWQT?y#=*iKO%Da$)(1L+ZeWaDI8j%_yU#dcs{u{l;f3;9#7>bg{1^+ zG{68cm8)=1f4BTSpj@+-!+utdbDo7`meR~5idiP*fkFb%tZEsXxcoeC((Qwn)lS1DDe?qA#@jSQbe#aw-Va`QdR-iI)ykNc zU7JxqF}-~)W+S{1eYH8tOgHLP8J8bezf2wf;u;@(^BPt;8)6~^MR8_7ALVUG~n8t{Q6%}$Orr^tm! zR-yRH)uQipH5lxT^_E%5=c8jSVkNxo&`Y=Ty)|%i78tPFEjgPUed>6bXfV#{-9EBgbX_)hoF}?@`G!^bZH>6|9^&|_be~$*U z8g2LF2 zI~5Qo`V;5u?S7~NDz5_2vlOFhf1=UIQGFUx+x{c9J0Mh~g+*Ll6P3dDRNlP3qd?RV z$O2v{rfgJ!ONa?KRC_jJm_a>eUeuhw2#VV(bk$|gf|$Kb809I{DdAEo{3Ok~0#*K4 zwv}W3<`d{>HVtQlmoQ3rcLL1lL#d9}+c)kwV8eo?ob$=d&pZl9s>B`!H)#X-MQbYM z*az3(i;`GJ!kAtD^A|_|h09 zADzD4$7SVKHGbtZ3?Tdxtrj0v;fd~zGGH@H<|P|mZ0Rs~0f!kk&jE?A#?*!q4($l? z#3nu3jf!wxB74(5#^#M*dI&4_Mk~0`2CKeY+H0KvPc~@lHC## zC)0fu4it+OXKtUZ5G+hTmk6M&%`%8MaV3au`$+b&v_{5)c2OGLJs1K@4e@8$;2jhS zHdTVd?_3{RjUQ}Hz`2j8>rGHxFv~a*b3Fy&=C~$|*l2%273h-P=~{)e0VyNF7-@a93K6VKk!G0a-}NaBADJ&HPjoXr2OT|JRiI0` zo3lt}3Pu@#``w5n{7#7=^VGB%YW?cYk!$ZLgxjC-CFm+>0S$q^L2>t1IdM|fRw5$Z zxjcGd5fo-h7SQQl1emwiF-}6nKzqkkzNf9vJShB&h*3a@I7+&>@(PdZ zWQjzDVkbC~XGF)J8|jP?z7pyY$w()hufI$blkf@UI$ElA5~0{ekV?p7(nvN!7=Qa{ zg7;$lZJucarE;#H3tL7x`>ml>y-*&z>pZo!lxPwZSF8J_;}&mk$9Igsxc@O=M(v{Z zV#zAs!C}ui(=rDXkeOnBsoa<*Lvb}UMuYT{;S4}V3Wb;24kXkm9d;qqze4cSj72H% zoqW(pW+UN2(RH}po$`cl4NJD47wU$qhJ|vOTVm&j_P<0M;y+Ct#Y;t+kUA!x{D;~C{gC^MxIYS zz5dM=djB_KTyz!h7eH;`?Fn`9W1#En-=bbPF-w zd~@ZiSBYiBzG+Wy>`f@8b@f?q-vYARdPC{{@0b7$6T1OBe;$-y}H2)R~3HPVQT;)`Wn5Rg}OKI7p9m!SiD9{{irH_*mt5xDRJIUdO8ofhSwPWjk zWnpmibmQCrL`*EYA`8Cv`RoUajvs^7zd%?%HqzRqjC7MnrF%Q<8?m_TY3yM8dE581 zmQXL|U_;pnc?kWDfgRJV+8zjmgzKpV4~N9M!O3L15q}hn56*KX`+%e;$}D#yYJ8UF zsG2Q7`5=c`U@%M|Q}o^cWA7}(s`|QiuM$!MN;iVANeK}*wLwxzVUvP10t!+hAl(fj z-O}AicbAgVu<7n@&fNar=Xu}rT<3f}pUy|P*qgQHnrqH6$GCs@XjSYu3THC=CdTG- zZnZDS&Qt0k_RIrf!dP#+QU-f94R0>SGNF^5!YTBdvI|KQ+;~2nM|iL-ocB7~B~PtR zCeJ?_)CI_&S>r$5dXft7C@Ybl)gA&CAUhBW;~teTXL@O#=qkQ)x;Hj zNqz7dqP41m=n)dHxJrE(}okR)o ziBnBfDA60=uf2Fn+rYa`mKV?1rb;u^JYhhxk>>PXMgXhwYQ&smj`L3ARqODpmQr2O z9be<$%K~ROt-jmdU+%ebWr(hwdbM|3a?4$nUt5NedK*<0ZydG|PrZpU1KiK~Yf+b~ zJ(zM(aTnHmmA07n&a8Fks&Awnp`lE|PY)2IL%4l^yxnL>P9xw#|6b%`i>>VA*@UCJeu++4t%j@ zt7?NV0WMZ+?sJZtwvnFKC>!kCR#H!br@L8v!*T!kj}COZ{d#S@Ye@9RUy>D5pcFCG zT|okw@=S;!TQ+4XENxk9tILl5+|Cz9@QfL9d6BS%(!2PiaiMz5fA}dR?hEAYWgVN5 z$6`9cuinb&HumrS^t2uV7OkZhi-z0_;)|Q<2HjJv+p78L37=I7R&5xcablhi5^+q{ zGI1rGDKl?);Fu&ZIV9#UeF^@ug$R~$386O#&lPsodnH)PAw)yp)rRQCI)Lhy@w}y@ zjUsVq$~$>3Esh@)Z702ddtTlY zTqK4r=fb|d{_r$>9bvkupF#CN+L>sz`h42A0z&W}GAce;e4$iPy;Rrrgl|=o?ZHvj zB&+#5Cwu7r`C^+#`ylaqZbjlHe+Mq^NC*1mdrx6pxFp_^urbXKzz2ef=G{AuO9XDM zap7;lcNN^LhtPd&!o*7M{s?nR`3T19t(Uy}A%e7_hK>>81%BsRTz~59)U|V6cHcEC zMt-Y*@gFeZ3f4V+^GJo8H;;N*Od9TtfBxR`L`gNz#v20*gRx>kz_d`r_?!p%p&!ox z(6@$@=xp*Iv>^_i+jI2Mf`u#CZJ3Ik>fqG(n4bdsj&n<-a=vI8VgJyHB0}KP*`1v( z&;R2B-ac;ng0~<0&6QsM^C3HP0o}JIGetcLZcUGggI}tONUi_?knUdrZKxO;di~)) z{&~5m+x77o!fh|{aR`>?d183DZUW`?dfR^G6riFKpy6hb4QRZ`|EXI@r;8O*{q`Wr z;(voG-Jf909Vv$(*cLh-(}a*&{T2+e++*+DT?yGLnXB3=?M+BX<=lF9Ir9(kCxXw3 z=BtA8zkLN594XWhJ4sT85Yc77zAMyw6@``;cOd&#EI3)CmNodJ)cB2yj-KHxLH|W` z#ytkt@*b+e^q=4J@E#NED1hv)pzV@0sO}ZBUq9NlJ(Q~QCeenTwNpR%2MFB&7a>K( ze-i&6=;y%QyOf?g<-_tj`DMSYHKHB_&xeINrB68>{+hX*Jq1gE5z|}Ze?}Av9*Ezf zzQuoi<$qlmj(ga{Dxjd625b48%gteOEkN_0H^TOsP|kCh%)~UT+KFa>1Y~to$JM#A zi!LxIAxYvduGyp|35ZOa>Ld2u|1*)<#P$;WL0LL2JH`Ly5B~o*{68E?T7Qql$&W?0 zFAz>;AXjoZ{YZvw9!x#C(~&HgZIsBU0`E@Up}gHntZ~hhMdJ*RT)z8sbG~YaL{Kz= zB6$Wdc2_QsVi!yP&rm2|NY`iMTTo0Ws$EMBoUUv*X0HUNf~p6+JEQXu)`HC`CBWk z-~TT91*zC`0kd^%brc;>a8Kl>uTk#B3=g73sjfI)6+;)xwFMIr(Qpnx+oZAKAsNRQ z(tGO6C8=!)q(uD@&HH9W4}%WDt?JbzTx^eCjz&R5=9)k+4(wlE0M9-VQ^LsCcMy9% zFRI`QLbkMbD*|s;UNn-~TW}!vos-9I6E6%bRi*p+H`!K0Il2opEc+U`D=EqD4Tm)0 zx$L1J;cWqp>Ar#&$Q3tQJ&6Sym&>(RJV(*Qz_7?RV7) z6RafN+eNY2BmB9uQJY^h><2H{6}ObOW((X~=zZ)sl18nf8xYxtWG;6ePDXd*p8@Tl zVg!M0vT)hlEA&%!x~S&Qj8iSr%O8j-4cuXuM_Iz}THZ|&s_mciP&2X-A?F-9DmZ;wLN=XA{mKIY!x&d#jqNx))&R z9M?~)kBX5+U8p}nq{*lehf)PNNWU*t<0c3UHHoRd`hIbUKIaJXeq)}6L$J4Rx+_9#W2W~ zq@Q}_!JDzm#GHCz8Ye!Z{5~KewfC3=Uu;V=Av4D zfkgr|^Qwa{20j6(6Dw}J(a6omJ0m7*b$Jg7Mu#obnZ}#q7Rrl_$x`rXEH;F7N(w@(Hsk>O*kJqfQcui)jr9K?@N zLS4}pdV$s%p(<(caRWal@IddoH)kXk?*5Q=TzMma+vA@|!V^!BtIZ?T%sCTntEV8(Wi3G+3oQvXKu|&maVhJYa24RQdh%9q^A}i>HVyMa7hh@c?ThI|7m`cr zSQCzet;)igvI@4s6>3%b^~IjH&a~rheTabzlB*N2^2#lu+U*C`|5Km>8SS1mheQte z+bEwR(QS<36-hRignZhXQ_BK!stekFV-?&OwE}*TE+mNkQ)9C^&xzA+l!!J`J|X zlCBgavx9A&d!-*^t?G_+zy$MX-HTD*xZ}D2Z~6rs9X|d1qiWOd@Y`mZAZgEQAwKg3 zUEd56_!fi>jtWe6@o(lYwqdbbxXLZ2$oH;G?U*V!#yJ8>Xq@XwsOwd0qVvf_$X67L z1+NLAWoCt(pi&NP7J^r2D0P9}Zneu%ng`Yz_VeB|NV5O-@v~8FM{~P&A~izFt|&>n zr7$Vte%lwo0z)p3qb_XF`XclatjSTmua;JOSc|sW^i;Kdzjb#p@O8fq57CBqdm^t4 zw{G2c7DT5}7s=nk3e9lD2o8 z%~OgmlJcsKS}s;q6hOR;ot_89D7d{QLcef^Mz6zR<-g(&2(_ic(ws+{ztP-Q7oD_J zUB-PZWKNA@XW5za#Cw_~RTJhxD*Zj|3Y9P+Y9G>M1Z4~N3KV`Al))({e>bdI%|+kO zkkPTF#}HABK9Q;e^ZH6*c?vekVPH~)sE{28bt%pT*S$i1G;bc>-kvF*CStHRZ?b~hbtK-z_(+; ztQn1ja_+IuJct(+FQV>;&Jj&U=pb`Na6F7JhM(LuOm; zU!Pwx8L1jITLIS!qZA*t%{x<3;;{oznXae#IpX{H>}m_Z?O`^`pDvGAUbVw++Nx8Q zQN=;9#u#54_?w($AgfF^Nj|RT z(3&s8n^;>dE4qYjI)I%E|7*B7X@rR!6-wMJT;@?NTf3^3mCVN^=@ zRyzL0GEm^$}k|DZlo>_XG5L;_a)-m;hL=S94B zEMaf1RCDcY5P^l9&G)gVMwwR~gp~Tn5jobE<=o^)e~v; zpr`uv5YsVgJ2xyty-T(Iv%1c@O*=VlKi#$U8nv4hqcck20POfNjbt}PT@amAyR;3P zO)YFPFjU|)1&6%W!&7=ufvHuxJ$>vp@zSn-^PL{-fPN#UTyWoCfernkeoG?KEQkyX zlk1jaHjOW2kTKruyZ^ckF+3z2UvjRE{Eics2+a${bEm$TCofWvi&w_3AHA~W*}k8~ zfrvc_<@&ff4WXVy@OF1g{kPh>J?Y<7UNN3bvL-0cSrTc=)?zRF>eFlD zqO4Bp872!nY;$;IUWGerr1Gy1NzD`$RS;)KpN zR4lp|srsQHWqDgigI&+4&2<%FAe1?BpM!j?stD|1I;9U@Oc!@S0!$7T2@Z&ie3M=4 zi@9-@y&Z6xlm0RK45N&(rJq)Liv2@&e1E!HDp5L?XF30VDE| zGIVno5Z#XoqDT7QgoWIL@%jwZ)Pa1=g`zR@;t9b<8SK>iqfY5yzj5wm;jv&wkaVP) z@NA3+y%z0A4OMOGQZ~8Wu?ECB363~bxrO)Ib`%}R!)G0njHw=X_$JYIV%^)n>&UGqb3)NegF zY89k7^o-c03iW3p=yoHDQjsvn?T0e=K6wI+&i%mheE%3(aGjKW5L} zfupO;v0ZuwZn-hoN^^~U?2`=-RiAm2hg~7o&Y0m97`Y0pxb$3l{E4j4tLFpUGW#RV zt<7S^xYim;8lO2(I`1FcYLH)gvwOvHR51Aj&?P_4j{~q+9wBAUI!8vObA}pl+ZmSSV##a1Yw*US435Ya(`&<& z_W+mgZrhc-A)D7=YgUqKJsZR3s4Mn^fpFy&0=b=BehZH490AmXU}TVVqE4`I=G>2` z!@H$!%rO3g0yTBiEfBR1UdXHO!+$8Qj5TZ;G9R?zIsb7rdKRgbrGQ!KsqcLOZt*3E ztTdFDj@Wt}F1IT~eaOao36BlO-q}%QX9X!n#0YO_MOLR;JTBC0`ABj;pf-E)EiGq* z7J59RO?a83WU0&87Lbb=EGt!!0s--E;7c0BAhf+?xe0P(N|yfvhh9}967T9cC)t=v z0@8%1`aG&|`VsEo$m=(1*to@`SL;9Jn_sR1O*uK-(ybX}VO6nYVz&UorD#8nm$|=w zycDhw;&V)Kx8)dkl?C`LGBl|1!0JomcHkuLfHn#42n~SFl{RZEaiz+i8?_5ft?9Q(=lNWNTn`EM_eL>2^1|`dr4}~6 z^cZVS!3>WACG}5d(r$!xUUeB?(QOb;2%1-ILqW{O23R2x+l3Z&6T~^Tn70p9yn-0D zA|H9}X39~2HZ4;*-@O#llp(S!#PQSr+|3Xj(Zc?7M5#pgymp|GAa6p&nIT{&=DPvV zW(9X7v+Oi%+F)tb_H;0P!_@wgv&w9w?7=3P7Q_sFbEa0X(V35K;+T?L3!YrWxi|-W z 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 diff --git a/src/Gradio_UI_Files/images/header.png b/src/Gradio_UI_Files/images/header.png deleted file mode 100644 index 13be51b770e033f40564ee931b6c7c0c9f6048d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126147 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 r25YDprU|5NOx?yHk&Sy4yjFdw{-JO z&OOKD?|Q%I-tVvPpTqOOUhcKmnrn_Z#yj5ej=6oKC@+bNO@fVrf`TjcOk5cS<(ef5 z3I^NNE8rc@sfS}IDA$F}#KaV(#Kb5S?QKlVER9i6p1lcI$I?(~y&bRpF--U+Dn{z7 z35*+bsHv}dL^tJBMQ>7mzJo5(6v9l8a4z)0)g@9Y=w+mRZmP5fElfnl>(*5Nkmd9lyjt?a>ZtAsoc_uH4TLYS%Y#4Q|GkHvYp1(Db*g&ZX}L>LE5Q!f%f9dUK;8p`3(INWJpyw4zg?&qn*Y*RM2g&ETWOcaT5-{E_-vNaSeB zl`+rT9d~&G{7?1#Qb)oQOp% zi&^^@KN`yoB9BB(PQ&nogy<|^GV|AX`*?0>;OpO^$nH6!q~8ku5ZXkSJVqNJVBOY@ z`*Ay+fNzob8~wMLYnZkoZF@hiD~YJa^2=Az#@xC|9g3xo*MNd^h|U{U7mfGG-;#1^ z$zsXhWjkKD4)uB1wZl5S`s?qXecrn|&2gL1SBPrH|8&~Ut4L3f_SGrUP|d3p>u%A6 z=kmh!juBiNZ-VNxS#spL(OoE_n_WB_R77c}Z%p$h1>1UjOw>44`8=J7 zvw}r$|KZ$-*;XcV+3#dpPmzp%mKPyd&>WXU@n{2Gpi(#@?X`9^(XqmacT7FLf|#MC z^TU+68!z;W_PQTHtRT99kksZT}E+$PLPr#jUCWCGEw~LO@A_oA>l`0( zFIt@!*Woc2bTQ|y?W*FHDVs48Ab)ZuxUT4IzsJl{d*Al(5PR|yF-6v)0AvZd+U;7j<0!Lke z%N6ywo^R`}2*FKJiI=a*pTE8sof_H z%YDXCL}4Z>e}D0V{2b>t!Lo$jg9OFv5Rp3}JM%6kuMev1-M)HRR*!eSg$2(TG283D4q4_9GBm>qv~unWE@o>G z4+cTMzTw8rnBBL<#G3uVO`PD@{Vj5ebW7J&U?NbziDKsLkP9u`K)B$6E5XpKhoX-R z>62b5$`6Tf%W~sRrdc=e-T#m&R&u|h-sSO^D7jb>9nrC8IS=9~oo`ay!g}`bBYA7c zoW$FQcF!l4d|%GLxr5<-Tz#MB`l<-SO2N@k_SrjMmmDXFP(LY&n@)Na#u zL-aDL6pmuI#pXllqv_%FjNz(8Z`zc@U^2bQn?CoIo4TS%8QxZYWa#b%C%X7 zi6VV>Qf_2@$S4#yD*NX4o?Px@dYXyPBLxTF1

D=uopeo$tOS+nMc{jhbbcjcbWB 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≈MEGyz;AuW0RHL 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

=kBf8-TWp|Lds!KgIF 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

    EDztTIp?x<$23*=R+0 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 lTN0` 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

    azK?1Gm+BCy7sX|1T`xc0eBY~p#Vg~ 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�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�a@@Jxfha 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 |Gm$x!* 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� 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 diff --git a/src/Gradio_UI_Files/images/professor.png b/src/Gradio_UI_Files/images/professor.png deleted file mode 100644 index 19984b7f061b8108e8e33b0e559ac606f1487823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29489 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 diff --git a/src/UI.py b/src/UI.py deleted file mode 100644 index 9c3f543c..00000000 --- a/src/UI.py +++ /dev/null @@ -1,319 +0,0 @@ -import streamlit as st -import os -import zipfile -import run_auditor_user_defined -import run_critic_user_defined -import run_rank -import shutil -import time -import pre_process -from utils import dotdict, clean_folder -from streamlit_js_eval import streamlit_js_eval - -os.environ['DISPLAY'] = ':0' - -# Store the initial value of widgets in session state -if "visibility" not in st.session_state: - st.session_state.visibility = "visible" - st.session_state.disabled = False - -if "start_critic" not in st.session_state: - st.session_state.start_critic = False - -if "start_auditor" not in st.session_state: - st.session_state.start_auditor = False - -if "start_ranking" not in st.session_state: - st.session_state.start_ranking = False - -if "section_active_auditor" not in st.session_state: - st.session_state.section_active_auditor = True - -if "section_active_critic" not in st.session_state: - st.session_state.section_active_critic = False - -if "section_active_ranking" not in st.session_state: - st.session_state.section_active_ranking = False - -if "args" not in st.session_state: - st.session_state.args = None - -if "args_c" not in st.session_state: - st.session_state.args_c = None - -if "args_r" not in st.session_state: - st.session_state.args_r = None - -def start_auditor(): - st.session_state.start_auditor = True -def end_auditor(): - st.session_state.start_auditor = False - -def start_critic(): - st.session_state.start_critic = True -def end_critic(): - st.session_state.start_critic = False - -def start_ranking(): - st.session_state.start_ranking = True -def end_ranking(): - st.session_state.start_ranking = False - - - -with st.sidebar: - openai_api_key = st.text_input("OpenAI API Key", key="chatbot_api_key", type="password") - "[Get an OpenAI API key](https://platform.openai.com/account/api-keys)" - "[View the source code](https://github.com/sciencepal/GPTLens/blob/aditya-test/src/UI.py)" - "[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/sciencepal/GPTLens?quickstart=1)" - st.divider() - if st.button("Reset App"): - st.session_state.section_active_critic = False - st.session_state.section_active_ranking = False - end_critic() - end_ranking() - # streamlit_js_eval(js_expressions="parent.window.location.reload()") - - -st.title("💬 GPTLens") -st.caption("🚀 Smart Contract Vulnerability Detection powered by OpenAI LLM") - -if not openai_api_key: - st.warning("Please add your OpenAI API key to continue.") - st.stop() -else: - os.environ["OPENAI_API_KEY"] = openai_api_key - - -if st.session_state.section_active_auditor: - - st.header("Auditor Step", divider=True) - st.divider() - - col1, col2 = st.columns(2) - - with col1: - model = st.radio( - "Set the GPT model 👉", - key="model", - options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], - index=2 - ) - - uploaded_files = st.file_uploader('Upload smart contract files', accept_multiple_files=True, type=['sol']) - - with col2: - topk = st.number_input( - "Set the topk auditor responses 👉", - key="topk", - min_value=1, - max_value=10, - value=3, - format="%d" - ) - - temperature = st.number_input( - "Set the temperature 👉", - key="temperature", - min_value=0.0, - max_value=1.0, - value=0.7, - format="%f" - ) - - num_auditors = st.number_input( - "Set the num auditors 👉", - key="num_auditors", - min_value=1, - max_value=10, - value=1, - format="%d" - ) - - uploaded_prompt = st.file_uploader('Upload prompt file (optional)', accept_multiple_files=False, type=['py']) - - - audit_button = st.button("Start Auditor", key="auditor", on_click=start_auditor) - - if audit_button and st.session_state.start_auditor: - if uploaded_files: - os.environ["OPENAI_API_KEY"] = openai_api_key - args_dict = { - 'backend': model, - 'temperature': temperature, - 'data_dir': "data/CVE_clean", - 'topk': topk, - 'num_auditor': num_auditors, - 'openai_api_key': openai_api_key - } - args = dotdict(args_dict) - st.session_state.args = args - if os.path.exists("data/CVE"): - clean_folder("data/CVE") - if os.path.exists("data/CVE_clean"): - clean_folder("data/CVE_clean") - if os.path.exists(f"src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}"): - clean_folder(f"src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}") - for uploaded_file in uploaded_files: - name = uploaded_file.name - bytes_data = uploaded_file.read() - with open(f"data/CVE/{name}", "wb") as f: - f.write(bytes_data) - pre_process.mainfnc(args.data_dir) - if uploaded_prompt: - bytes_data = uploaded_prompt.read() - with open(f"src/prompt.py", "wb") as f: - f.write(bytes_data) - st.write("Starting auditor code!") - run_auditor_user_defined.mainfnc(args) - st.write(f"Audit files processed successfully to folder ./src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}!") - end_auditor() - time.sleep(2) - # st.session_state.section_active_auditor = False - st.session_state.section_active_critic= True - uploaded_file = False - else: - st.warning("Please upload data zip.") - st.stop() - # else: - # st.stop() - - - -if st.session_state.section_active_critic: - - st.header("Critic Step", divider=True) - st.divider() - - col1, col2 = st.columns(2) - - args = st.session_state.args - - with col1: - model_c = st.radio( - "Set the GPT model 👉", - key="model_c", - options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], - index=2 - ) - - auditor_dir_c = st.text_input( - "Auditor Directory location", - value=f"auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}" - ) - - with col2: - - temperature_c = st.number_input( - "Set the temperature 👉", - key="temperature_c", - min_value=0.0, - max_value=1.0, - value=0.0, - format="%f" - ) - - num_critic_c = st.number_input( - "Set the num critics 👉", - key="num_critic_c", - min_value=1, - max_value=10, - value=1, - format="%d" - ) - - shot_c = st.radio( - "Set the num shots (few/one) 👉", - key="shot_c", - options=["one", "few"], - index=1 - ) - - os.environ["OPENAI_API_KEY"] = openai_api_key - - - critic_button = st.button("Start Critics", key="critic", on_click=start_critic) - - if critic_button and st.session_state.start_critic: - args_c_dict = { - 'backend': model_c, - 'temperature': temperature_c, - 'dataset': "CVE", - 'auditor_dir': auditor_dir_c, - 'num_critic': num_critic_c, - 'shot': shot_c, - 'openai_api_key': openai_api_key - } - args_c = dotdict(args_c_dict) - st.session_state.args_c = args_c - st.write("Starting critic code!") - run_critic_user_defined.mainfnc(args_c) - st.write(f"Critic files processed successfully to folder ./src/logs/{args_c.auditor_dir}/critic_{args_c.backend}_{args_c.temperature}_{args_c.num_critic}_{args_c.shot}!") - end_critic() - time.sleep(2) - # st.session_state.section_active_critic = False - st.session_state.section_active_ranking = True - # else: - # st.stop() - - - -if st.session_state.section_active_ranking: - st.header("Ranking Step", divider=True) - st.divider() - - col1, col2 = st.columns(2) - - args = st.session_state.args - args_c = st.session_state.args_c - - with col1: - - auditor_dir_r = st.text_input( - "Auditor Dir location", - value=f"auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}" - ) - - critic_dir_r = st.text_input( - "Critic Directory location", - value=f"critic_{args_c.backend}_{args_c.temperature}_{args_c.num_critic}_{args_c.shot}" - ) - - with col2: - - strategy_r = st.radio( - "Set the strategy (default/custom) 👉", - key="strategy_r", - options=["default", "custom"], - index=0 - ) - - - rank_button = st.button("Start Ranking", key="ranking", on_click=start_ranking) - - if rank_button and st.session_state.start_ranking: - args_r_dict = { - 'auditor_dir': auditor_dir_r, - 'critic_dir': critic_dir_r, - 'strategy': strategy_r - } - args_r = dotdict(args_r_dict) - st.session_state.args_r = args_r - st.write(f"Starting ranking code!") - run_rank.mainfnc(args_r) - st.write(f"Ranking files processed successfully to folder ./src/logs/{args_c.auditor_dir}/critic_{args_c.backend}_{args_c.temperature}_{args_c.num_critic}_{args_c.shot}/ranker_{args_r.strategy}!") - end_critic() - else: - st.stop() - - shutil.make_archive('results', 'zip', "src/logs") - - st.divider() - - with open("results.zip", "rb") as fp: - download_btn = st.download_button( - label="Download Results zip", - data=fp, - file_name="results.zip", - mime="application/zip" - ) diff --git a/src/UI_demo.py b/src/UI_demo.py deleted file mode 100644 index 12be4bd5..00000000 --- a/src/UI_demo.py +++ /dev/null @@ -1,411 +0,0 @@ -import streamlit as st -import os -import zipfile -import run_auditor_user_defined -import run_critic_user_defined -import run_rank -import shutil -import time -import pre_process -from utils import dotdict, clean_folder -from streamlit_js_eval import streamlit_js_eval -import base64 -from pathlib import Path - -os.environ['DISPLAY'] = ':0' - -# Store the initial value of widgets in session state -if "visibility" not in st.session_state: - st.session_state.visibility = "visible" - st.session_state.disabled = False - -if "start_preprocess" not in st.session_state: - st.session_state.start_preprocess = False - -if "start_critic" not in st.session_state: - st.session_state.start_critic = False - -if "start_auditor" not in st.session_state: - st.session_state.start_auditor = False - -if "start_ranking" not in st.session_state: - st.session_state.start_ranking = False - -if "section_active_preprocess" not in st.session_state: - st.session_state.section_active_preprocess = True - -if "section_active_auditor" not in st.session_state: - st.session_state.section_active_auditor = False - -if "section_active_critic" not in st.session_state: - st.session_state.section_active_critic = False - -if "section_active_ranking" not in st.session_state: - st.session_state.section_active_ranking = False - -if "args" not in st.session_state: - st.session_state.args = None - -if "args_c" not in st.session_state: - st.session_state.args_c = None - -if "args_r" not in st.session_state: - st.session_state.args_r = None - -def start_preprocess(): - st.session_state.start_preprocess = True -def end_preprocess(): - st.session_state.end_preprocess = False - - -def start_auditor(): - st.session_state.start_auditor = True -def end_auditor(): - st.session_state.start_auditor = False - -def start_critic(): - st.session_state.start_critic = True -def end_critic(): - st.session_state.start_critic = False - -def start_ranking(): - st.session_state.start_ranking = True -def end_ranking(): - st.session_state.start_ranking = False - -openai_api_key = "xyz" - -with st.sidebar: - # openai_api_key = st.text_input("OpenAI API Key", key="chatbot_api_key", type="password") - # "[Get an OpenAI API key (not needed for demo)](https://platform.openai.com/account/api-keys)" - # "[View the source code](https://github.com/sciencepal/GPTLens/blob/aditya-test/src/UI.py)" - # "[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/sciencepal/GPTLens?quickstart=1)" - # st.divider() - # if st.button("Reset App"): - # st.session_state.section_active_critic = False - # st.session_state.section_active_ranking = False - # st.session_state.section_active_auditor = False - # end_critic() - # end_ranking() - # end_auditor() - bin_file = "src/CS8903_Aditya_PAL_GPTLens_Demo.pdf" - with open(bin_file, 'rb') as f: - data = f.read() - st.download_button(label="Download GPTLens Demo PPT", data=data, file_name=bin_file, mime='application/pdf',) - - - # st.link_button("Demo of GPTLens", "file:///CS8903_Aditya_PAL_GPTLens_Demo.pdf") - # return href - # streamlit_js_eval(js_expressions="parent.window.location.reload()") - - -st.title("💬 GPTLens Demo") -st.caption("🚀 Smart Contract Vulnerability Detection powered by OpenAI LLM") - - -if not openai_api_key: - st.warning("In GPTlens, you must enter OpenAI API key to continue. Not needed for this demo") - # st.stop() -else: - os.environ["OPENAI_API_KEY"] = openai_api_key - -st.info("Note that this demo uses only dummy data") - - -with open("data_sample/CVE/2018-13071.sol") as f: - raw1 = f.read() -with open("data_sample/CVE/2018-13072.sol") as f: - raw2 = f.read() -with open("data_sample/CVE/2018-13073.sol") as f: - raw3 = f.read() -with open("data_sample/CVE/2018-13074.sol") as f: - raw4 = f.read() - -with open("data_sample/CVE_clean/2018-13071.sol") as f: - clean1 = f.read() -with open("data_sample/CVE_clean/2018-13072.sol") as f: - clean2 = f.read() -with open("data_sample/CVE_clean/2018-13073.sol") as f: - clean3 = f.read() -with open("data_sample/CVE_clean/2018-13074.sol") as f: - clean4 = f.read() - -with open("data_sample/prompts.py") as f: - prompt = f.read() - - -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json") as f: - audit1 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json") as f: - audit2 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json") as f: - audit3 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json") as f: - audit4 = f.read() - - -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json") as f: - critic1 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json") as f: - critic2 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json") as f: - critic3 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json") as f: - critic4 = f.read() - - -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json") as f: - ranker1 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json") as f: - ranker2 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json") as f: - ranker3 = f.read() -with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json") as f: - ranker4 = f.read() - - -# if st.session_state.section_active_preprocess: - -st.header("1. Preprocessing Step", divider=True) - -tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) - -with tab1: - with st.container(height=400): - st.code(raw1, language='solidity') - -with tab2: - with st.container(height=400): - st.code(raw2, language='solidity') - -with tab3: - with st.container(height=400): - st.code(raw3, language='solidity') - -with tab4: - with st.container(height=400): - st.code(raw4, language='solidity') - -# preprocess_button = st.button("Start Preprocessing", key="preprocess", on_click=start_auditor) - - -# if st.session_state.start_auditor: - -st.subheader("Result 1.1 - Processed Files", divider=True) - -tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) - -with tab1: - with st.container(height=400): - st.code(clean1, language='solidity') - -with tab2: - with st.container(height=400): - st.code(clean2, language='solidity') - -with tab3: - with st.container(height=400): - st.code(clean3, language='solidity') - -with tab4: - with st.container(height=400): - st.code(clean4, language='solidity') - -st.divider() - -st.header("2. Auditor Step", divider=True) - -col1, col2 = st.columns(2) - -with col1: - model = st.radio( - "Set the GPT model 👉", - key="model", - options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], - index=2 - ) - - topk = st.number_input( - "Set the topk auditor responses 👉", - key="topk", - min_value=1, - max_value=10, - value=3, - format="%d" - ) - -with col2: - - temperature = st.number_input( - "Set the temperature 👉", - key="temperature", - min_value=0.0, - max_value=1.0, - value=0.7, - format="%f" - ) - - num_auditors = st.number_input( - "Set the num auditors 👉", - key="num_auditors", - min_value=1, - max_value=10, - value=1, - format="%d" - ) - -st.subheader("Prompt File") -with st.container(height=400): - st.code(prompt, language='python') - - -st.subheader("Result 2.1 - Auditor Results", divider=True) - -tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) - -with tab1: - with st.container(height=400): - st.code(audit1, language='json') - -with tab2: - with st.container(height=400): - st.code(audit2, language='json') - -with tab3: - with st.container(height=400): - st.code(audit3, language='json') - -with tab4: - with st.container(height=400): - st.code(audit4, language='json') - -st.divider() - - - -st.header("3. Critic Step", divider=True) - -col1, col2 = st.columns(2) - -args = st.session_state.args - -with col1: - model_c = st.radio( - "Set the GPT model 👉", - key="model_c", - options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], - index=2 - ) - - auditor_dir_c = st.text_input( - "Auditor Directory location", - value=f"temporary_dir/path/to/data" - ) - -with col2: - - temperature_c = st.number_input( - "Set the temperature 👉", - key="temperature_c", - min_value=0.0, - max_value=1.0, - value=0.0, - format="%f" - ) - - num_critic_c = st.number_input( - "Set the num critics 👉", - key="num_critic_c", - min_value=1, - max_value=10, - value=1, - format="%d" - ) - - shot_c = st.radio( - "Set the num shots (few/one) 👉", - key="shot_c", - options=["one", "few"], - index=1 - ) - - -st.subheader("Result 3.1 - Critic Results", divider=True) - -tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) - -with tab1: - with st.container(height=400): - st.code(critic1, language='json') - -with tab2: - with st.container(height=400): - st.code(critic2, language='json') - -with tab3: - with st.container(height=400): - st.code(critic3, language='json') - -with tab4: - with st.container(height=400): - st.code(critic4, language='json') - -st.divider() - - - - - - - - -st.header("4. Ranking Step", divider=True) - -col1, col2 = st.columns(2) - -args = st.session_state.args -args_c = st.session_state.args_c - -with col1: - - auditor_dir_r = st.text_input( - "Auditor Dir location", - value=f"temporary_dir/path/to/data" - ) - - critic_dir_r = st.text_input( - "Critic Directory location", - value=f"temporary_dir/path/to/data" - ) - -with col2: - - strategy_r = st.radio( - "Set the strategy (default/custom) 👉", - key="strategy_r", - options=["default", "custom"], - index=0 - ) - - -st.subheader("Result 4.1 - Ranking Results", divider=True) - -tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) - -with tab1: - with st.container(height=400): - st.code(ranker1, language='json') - -with tab2: - with st.container(height=400): - st.code(ranker2, language='json') - -with tab3: - with st.container(height=400): - st.code(ranker3, language='json') - -with tab4: - with st.container(height=400): - st.code(ranker4, language='json') - -st.divider() \ No newline at end of file diff --git a/src/environment_old.yml b/src/environment_old.yml deleted file mode 100644 index 676e6e64..00000000 --- a/src/environment_old.yml +++ /dev/null @@ -1,83 +0,0 @@ -# name: GPTLens -# channels: -# - defaults -# dependencies: -# - bzip2=1.0.8=he774522_0 -# - ca-certificates=2023.12.12=haa95532_0 -# - libffi=3.4.4=hd77b12b_0 -# - openssl=3.0.13=h2bbff1b_0 -# - pip=23.3.1=py311haa95532_0 -# - python=3.11.7=he1021f5_0 -# - setuptools=68.2.2=py311haa95532_0 -# - sqlite=3.41.2=h2bbff1b_0 -# - tk=8.6.12=h2bbff1b_0 -# - vc=14.2=h21ff451_1 -# - vs2015_runtime=14.27.29016=h5e58377_2 -# # - wheel=0.41.2=py311haa95532_0 -# - xz=5.4.5=h8cc25b3_0 -# - zlib=1.2.13=h8cc25b3_0 -# - pip: -# - aiohttp==3.9.3 -# - aiosignal==1.3.1 -# - altair==5.2.0 -# - annotated-types==0.6.0 -# - anyio==4.2.0 -# - attrs==23.2.0 -# - blinker==1.7.0 -# - cachetools==5.3.2 -# - certifi==2024.2.2 -# - charset-normalizer==3.3.2 -# - click==8.1.7 -# - colorama==0.4.6 -# - distro==1.9.0 -# - frozenlist==1.4.1 -# - gitdb==4.0.11 -# - gitpython==3.1.41 -# - h11==0.14.0 -# - httpcore==1.0.2 -# - httpx==0.26.0 -# - idna==3.6 -# - importlib-metadata==7.0.1 -# - inflection==0.5.1 -# - jinja2==3.1.3 -# - jsonschema==4.21.1 -# - jsonschema-specifications==2023.12.1 -# - markdown-it-py==3.0.0 -# - markupsafe==2.1.5 -# - mdurl==0.1.2 -# - multidict==6.0.5 -# - numpy==1.26.3 -# - openai==1.11.1 -# - openapi==1.1.0 -# - packaging==23.2 -# - pandas==2.2.0 -# - pillow==10.2.0 -# - protobuf==4.25.2 -# - pyarrow==15.0.0 -# - pydantic==2.6.0 -# - pydantic-core==2.16.1 -# - pydeck==0.8.1b0 -# - pygments==2.17.2 -# - python-dateutil==2.8.2 -# - pytz==2024.1 -# - referencing==0.33.0 -# - requests==2.31.0 -# - rich==13.7.0 -# - rpds-py==0.17.1 -# - six==1.16.0 -# - smmap==5.0.1 -# - sniffio==1.3.0 -# - streamlit==1.31.0 -# - tenacity==8.2.3 -# - toml==0.10.2 -# - toolz==0.12.1 -# - tornado==6.4 -# - tqdm==4.66.1 -# - typing-extensions==4.9.0 -# - tzdata==2023.4 -# - tzlocal==5.2 -# - urllib3==2.2.0 -# - validators==0.22.0 -# - watchdog==3.0.0 -# - yarl==1.9.4 -# - zipp==3.17.0 diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10706.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10706.json deleted file mode 100644 index a4da62b2..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10706.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "function_name": "approveAndCall", - "code": "function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallReceiver(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; }", - "vulnerability": "Reentrancy", - "reason": "This function approves tokens for a spender and then calls an external contract (ApproveAndCallReceiver). If the external contract is malicious, it can call back into this contract and exploit its state before the initial operation is complete, potentially leading to unexpected behavior or loss of funds.", - "file_name": "2018-10706.sol" - }, - { - "function_name": "transferFrom", - "code": "function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] = balanceOf[_from] - _value; balanceOf[_to] = balanceOf[_to] + _value; allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; emit Transfer(_from, _to, _value); return true; }", - "vulnerability": "Integer Overflow", - "reason": "The line 'allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value;' can potentially overflow if '_value' is chosen such that the sum exceeds the maximum representable uint256 value. This could allow an attacker to wrap the allowance around and exploit the contract by transferring more tokens than intended.", - "file_name": "2018-10706.sol" - }, - { - "function_name": "generateTokens", - "code": "function generateTokens(address _user, uint _amount) onlyController public returns (bool) { _amount=_amount*10**uint256(decimals); return _generateTokens(_user,_amount); }", - "vulnerability": "Unchecked Math", - "reason": "The function multiplies '_amount' by '10**uint256(decimals)' without checking for overflow. In Solidity versions before 0.8.0, arithmetic operations do not automatically check for overflows. If '_amount' is large enough, this multiplication could overflow, allowing an attacker to mint an arbitrary number of tokens.", - "file_name": "2018-10706.sol" - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10944.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10944.json deleted file mode 100644 index dd92d378..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10944.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "function_name": "transferFrom", - "code": "function transferFrom( address _from, address _to, uint256 _amount ) returns (bool success) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else { return false; } }", - "vulnerability": "Reentrancy", - "reason": "The 'transferFrom' function transfers tokens on behalf of another address after allowance is given, but does not implement reentrancy guards. This could allow an attacker to perform a reentrancy attack if the recipient contract is malicious and has a fallback function designed to call back into this contract.", - "file_name": "2018-10944.sol" - }, - { - "function_name": "request_dividend", - "code": "function request_dividend(address token_holder) payable { holder_token_balance = balanceOf(token_holder)/10000000000; Message(holder_token_balance); holder_profit = holder_token_balance * profit_per_token; Message(holder_profit); Transfer(owner, token_holder , (holder_profit/10**18)); token_holder.send(holder_profit); }", - "vulnerability": "Reentrancy", - "reason": "In the 'request_dividend' function, ether is sent using 'send' without a reentrancy guard. This could allow an attacker to re-enter the contract if the caller is a contract with a fallback function.", - "file_name": "2018-10944.sol" - }, - { - "function_name": "drain", - "code": "function drain() onlyOwner { if (!owner.send(this.balance)) throw; }", - "vulnerability": "Unchecked CALL return value", - "reason": "The 'drain' function uses '.send()' to transfer ether and checks the return value with a 'throw', which is deprecated and should be replaced with 'require()' for better error handling. It's also susceptible to gas limitations of '.send()', potentially leading to failed transactions without proper notification or handling.", - "file_name": "2018-10944.sol" - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-11239.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-11239.json deleted file mode 100644 index 0b586e20..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-11239.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "function_name": "approve", - "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(_value == 0 || allowance[msg.sender][_spender] == 0); allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", - "vulnerability": "ERC20 Approve/Allowance Race Condition", - "reason": "This vulnerability occurs because the function does not handle the case where changing an allowance from a non-zero value to another non-zero value could be exploited by an attacker who is able to call transferFrom multiple times. The require condition only checks for changes from zero to non-zero or vice versa, which means an attacker can exploit the race condition by requesting a change in allowance while executing transferFrom, potentially draining the owner's funds.", - "file_name": "2018-11239.sol" - }, - { - "function_name": "_transfer", - "code": "function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balanceOf[_from] >= _value + burnPerTransaction); require (balanceOf[_to] + _value > balanceOf[_to]); balanceOf[_from] -= _value + burnPerTransaction; balanceOf[_to] += _value; balanceOf[0x0] += burnPerTransaction; currentSupply -= burnPerTransaction; Burn(_from, burnPerTransaction); Transfer(_from, _to, _value); }", - "vulnerability": "Integer Overflow and Underflow", - "reason": "The function does not adequately check for integer overflows or underflows when calculating balances after a transfer and burn operation. Solidity versions prior to 0.8.0 do not automatically check for arithmetic overflows/underflows. An attacker might exploit this by sending a value that, when added to the recipient's balance, overflows the balance, potentially allowing for theft of tokens.", - "file_name": "2018-11239.sol" - }, - { - "function_name": "burn", - "code": "function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; balanceOf[0x0] += _value; currentSupply -= _value; Burn(msg.sender, _value); return true; }", - "vulnerability": "Burning Tokens to 0x0 Address", - "reason": "Directly burning tokens by sending them to the 0x0 address can lead to a permanent loss of those tokens, decreasing the total supply potentially in an undesirable manner. While this is somewhat intentional as described by the function, it can be problematic if there's a mistake in the amount to be burned. It also does not follow the best practice of burning tokens, which is to reduce the total supply without transferring to the 0x0 address.", - "file_name": "2018-11239.sol" - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10706.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10706.json deleted file mode 100644 index a78b9026..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10706.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "function_name": "approveAndCall", - "vulnerability": "Reentrancy", - "criticism": "The reasoning identifies a legitimate concern with calling external contracts, which could potentially exploit reentrancy vulnerabilities. However, the severity and profitability of this vulnerability depend on the implementation of the external contract and the state of this contract. If proper reentrancy guards are in place or if the state changes are managed correctly, the risk could be mitigated. The criticism lacks a detailed analysis of how the external contract's behavior could specifically exploit the state of this contract, making the assessment somewhat superficial.", - "correctness": 6, - "severity": 5, - "profitability": 4, - "reason": "This function approves tokens for a spender and then calls an external contract (ApproveAndCallReceiver). If the external contract is malicious, it can call back into this contract and exploit its state before the initial operation is complete, potentially leading to unexpected behavior or loss of funds.", - "code": "function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallReceiver(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; }", - "file_name": "2018-10706.sol" - }, - { - "function_name": "transferFrom", - "vulnerability": "Integer Overflow", - "criticism": "The criticism correctly identifies a potential integer overflow vulnerability in the allowance update line. However, it fails to consider the context of the Solidity version and the presence of SafeMath library or similar overflow protections. Modern Solidity versions (0.8.0 and above) and the use of SafeMath in older versions inherently protect against such overflows. Therefore, without specifying the Solidity version or the absence of overflow protection, the assessment might overstate the risk. Additionally, the practical exploitation of this vulnerability requires specific conditions that are not detailed, affecting the accuracy of the severity and profitability ratings.", - "correctness": 5, - "severity": 3, - "profitability": 2, - "reason": "The line 'allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value;' can potentially overflow if '_value' is chosen such that the sum exceeds the maximum representable uint256 value. This could allow an attacker to wrap the allowance around and exploit the contract by transferring more tokens than intended.", - "code": "function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] = balanceOf[_from] - _value; balanceOf[_to] = balanceOf[_to] + _value; allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; emit Transfer(_from, _to, _value); return true; }", - "file_name": "2018-10706.sol" - }, - { - "function_name": "generateTokens", - "vulnerability": "Unchecked Math", - "criticism": "The reasoning correctly points out the risk of unchecked arithmetic operations leading to overflow vulnerabilities, particularly in Solidity versions before 0.8.0. However, the criticism lacks depth in evaluating the context, such as the contract's Solidity version or the use of libraries like SafeMath to mitigate such risks. Moreover, the practical implications of exploiting this vulnerability, such as the ability to mint an arbitrary number of tokens, depend on additional factors like the contract's overall logic and security measures. The assessment could benefit from a more nuanced analysis of these aspects to accurately determine the severity and profitability.", - "correctness": 6, - "severity": 6, - "profitability": 5, - "reason": "The function multiplies '_amount' by '10**uint256(decimals)' without checking for overflow. In Solidity versions before 0.8.0, arithmetic operations do not automatically check for overflows. If '_amount' is large enough, this multiplication could overflow, allowing an attacker to mint an arbitrary number of tokens.", - "code": "function generateTokens(address _user, uint _amount) onlyController public returns (bool) { _amount=_amount*10**uint256(decimals); return _generateTokens(_user,_amount); }", - "file_name": "2018-10706.sol" - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10944.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10944.json deleted file mode 100644 index c7606ae3..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10944.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "function_name": "transferFrom", - "vulnerability": "Reentrancy", - "criticism": "The criticism of the 'transferFrom' function for reentrancy vulnerability is misplaced. Reentrancy is a concern when a contract makes an external call to an untrusted contract before it resolves its internal state. However, 'transferFrom' primarily deals with token transfers and updates balances and allowances before making any external calls. There are no external calls within 'transferFrom' that would allow for reentrancy in the provided code snippet. Therefore, the identification of reentrancy as a vulnerability in this context is incorrect, leading to a low correctness score. The severity and profitability are also rated low because the described vulnerability does not exist in this scenario.", - "correctness": 1, - "severity": 0, - "profitability": 0, - "reason": "The 'transferFrom' function transfers tokens on behalf of another address after allowance is given, but does not implement reentrancy guards. This could allow an attacker to perform a reentrancy attack if the recipient contract is malicious and has a fallback function designed to call back into this contract.", - "code": "function transferFrom( address _from, address _to, uint256 _amount ) returns (bool success) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else { return false; } }", - "file_name": "2018-10944.sol" - }, - { - "function_name": "request_dividend", - "vulnerability": "Reentrancy", - "criticism": "The identification of reentrancy vulnerability in the 'request_dividend' function is accurate due to the use of 'send' without a reentrancy guard. However, the severity and profitability might not be as high as implied. While 'send' is indeed susceptible to reentrancy attacks, it only forwards 2300 gas, limiting the actions an attacker can perform in a fallback function. Nonetheless, the risk of reentrancy should not be underestimated, especially in functions involving financial transactions. The criticism could have been more nuanced by acknowledging the gas limit but still emphasizing the importance of reentrancy guards. The correctness is rated moderately high due to accurate identification, but severity and profitability are adjusted to reflect the nuanced risk.", - "correctness": 7, - "severity": 5, - "profitability": 4, - "reason": "In the 'request_dividend' function, ether is sent using 'send' without a reentrancy guard. This could allow an attacker to re-enter the contract if the caller is a contract with a fallback function.", - "code": "function request_dividend(address token_holder) payable { holder_token_balance = balanceOf(token_holder)/10000000000; Message(holder_token_balance); holder_profit = holder_token_balance * profit_per_token; Message(holder_profit); Transfer(owner, token_holder , (holder_profit/10**18)); token_holder.send(holder_profit); }", - "file_name": "2018-10944.sol" - }, - { - "function_name": "drain", - "vulnerability": "Unchecked CALL return value", - "criticism": "The criticism correctly identifies the use of '.send()' and the deprecated 'throw' for error handling in the 'drain' function as problematic. However, it conflates two separate issues: the deprecated error handling and the potential for gas-related failures with '.send()'. The severity of using 'throw' is relatively high due to the potential for unexpected contract behavior and the inefficiency of gas usage. The profitability of exploiting this vulnerability is low, as it primarily affects the contract owner's ability to withdraw funds. A more accurate critique would separate these concerns, emphasizing the need for updated error handling practices and the limitations of '.send()' for transferring ether. Correctness is rated moderately for identifying relevant issues, but the explanation lacks clarity in distinguishing between them.", - "correctness": 6, - "severity": 4, - "profitability": 1, - "reason": "The 'drain' function uses '.send()' to transfer ether and checks the return value with a 'throw', which is deprecated and should be replaced with 'require()' for better error handling. It's also susceptible to gas limitations of '.send()', potentially leading to failed transactions without proper notification or handling.", - "code": "function drain() onlyOwner { if (!owner.send(this.balance)) throw; }", - "file_name": "2018-10944.sol" - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-11239.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-11239.json deleted file mode 100644 index 9c6f9c41..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-11239.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "function_name": "approve", - "vulnerability": "ERC20 Approve/Allowance Race Condition", - "criticism": "The criticism of the approve function's vulnerability to a race condition is somewhat overstated. The function's requirement that either the current allowance is zero or the new value is zero mitigates the risk of an attacker exploiting the race condition to a significant extent. However, the scenario described does indeed represent a potential vulnerability in cases where allowances are being changed from one non-zero value to another without first setting them to zero. This could lead to unexpected behavior if not properly managed by the user or the interface interacting with the contract. The correctness of identifying a vulnerability is there, but the severity is overestimated due to the mitigating conditions in the code. Profitability for an attacker is also limited, as it requires specific conditions and timing to exploit successfully.", - "correctness": 6, - "severity": 3, - "profitability": 2, - "reason": "This vulnerability occurs because the function does not handle the case where changing an allowance from a non-zero value to another non-zero value could be exploited by an attacker who is able to call transferFrom multiple times. The require condition only checks for changes from zero to non-zero or vice versa, which means an attacker can exploit the race condition by requesting a change in allowance while executing transferFrom, potentially draining the owner's funds.", - "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(_value == 0 || allowance[msg.sender][_spender] == 0); allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", - "file_name": "2018-11239.sol" - }, - { - "function_name": "_transfer", - "vulnerability": "Integer Overflow and Underflow", - "criticism": "The criticism regarding the potential for integer overflow and underflow in the _transfer function is valid, especially for Solidity versions prior to 0.8.0 which do not automatically handle these issues. The function's arithmetic operations without explicit checks for overflows or underflows could indeed lead to vulnerabilities where token balances are manipulated in unintended ways. This could potentially allow an attacker to exploit the contract by creating conditions under which these arithmetic errors occur, leading to the theft of tokens or other unintended outcomes. The severity of this vulnerability is high due to the potential impact on token balances and the integrity of the contract. Profitability for an attacker is also high, as exploiting these vulnerabilities could lead to significant gains at the expense of other users.", - "correctness": 8, - "severity": 7, - "profitability": 7, - "reason": "The function does not adequately check for integer overflows or underflows when calculating balances after a transfer and burn operation. Solidity versions prior to 0.8.0 do not automatically check for arithmetic overflows/underflows. An attacker might exploit this by sending a value that, when added to the recipient's balance, overflows the balance, potentially allowing for theft of tokens.", - "code": "function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balanceOf[_from] >= _value + burnPerTransaction); require (balanceOf[_to] + _value > balanceOf[_to]); balanceOf[_from] -= _value + burnPerTransaction; balanceOf[_to] += _value; balanceOf[0x0] += burnPerTransaction; currentSupply -= burnPerTransaction; Burn(_from, burnPerTransaction); Transfer(_from, _to, _value); }", - "file_name": "2018-11239.sol" - }, - { - "function_name": "burn", - "vulnerability": "Burning Tokens to 0x0 Address", - "criticism": "The criticism of burning tokens by sending them to the 0x0 address overlooks the intentional design choice behind such a mechanism. While it is true that burning tokens in this manner permanently removes them from circulation, thereby reducing the total supply, this is often a desired outcome in token economics to create scarcity or to fulfill specific tokenomics models. The criticism fails to acknowledge the potential benefits of such a design decision. However, caution should indeed be exercised to avoid burning tokens unintentionally. The practice of burning tokens is not inherently problematic but requires clear documentation and user understanding to prevent mistakes. The severity of this issue is low, as it aligns with the intended functionality, and profitability for an attacker is non-existent, as this action does not inherently provide a means for profit.", - "correctness": 5, - "severity": 1, - "profitability": 0, - "reason": "Directly burning tokens by sending them to the 0x0 address can lead to a permanent loss of those tokens, decreasing the total supply potentially in an undesirable manner. While this is somewhat intentional as described by the function, it can be problematic if there's a mistake in the amount to be burned. It also does not follow the best practice of burning tokens, which is to reduce the total supply without transferring to the 0x0 address.", - "code": "function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; balanceOf[0x0] += _value; currentSupply -= _value; Burn(msg.sender, _value); return true; }", - "file_name": "2018-11239.sol" - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10706.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10706.json deleted file mode 100644 index 3cd9e77f..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10706.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "function_name": "generateTokens", - "vulnerability": "Unchecked Math", - "criticism": "The reasoning correctly points out the risk of unchecked arithmetic operations leading to overflow vulnerabilities, particularly in Solidity versions before 0.8.0. However, the criticism lacks depth in evaluating the context, such as the contract's Solidity version or the use of libraries like SafeMath to mitigate such risks. Moreover, the practical implications of exploiting this vulnerability, such as the ability to mint an arbitrary number of tokens, depend on additional factors like the contract's overall logic and security measures. The assessment could benefit from a more nuanced analysis of these aspects to accurately determine the severity and profitability.", - "correctness": 6, - "severity": 6, - "profitability": 5, - "reason": "The function multiplies '_amount' by '10**uint256(decimals)' without checking for overflow. In Solidity versions before 0.8.0, arithmetic operations do not automatically check for overflows. If '_amount' is large enough, this multiplication could overflow, allowing an attacker to mint an arbitrary number of tokens.", - "code": "function generateTokens(address _user, uint _amount) onlyController public returns (bool) { _amount=_amount*10**uint256(decimals); return _generateTokens(_user,_amount); }", - "file_name": "2018-10706.sol", - "final_score": 5.75 - }, - { - "function_name": "approveAndCall", - "vulnerability": "Reentrancy", - "criticism": "The reasoning identifies a legitimate concern with calling external contracts, which could potentially exploit reentrancy vulnerabilities. However, the severity and profitability of this vulnerability depend on the implementation of the external contract and the state of this contract. If proper reentrancy guards are in place or if the state changes are managed correctly, the risk could be mitigated. The criticism lacks a detailed analysis of how the external contract's behavior could specifically exploit the state of this contract, making the assessment somewhat superficial.", - "correctness": 6, - "severity": 5, - "profitability": 4, - "reason": "This function approves tokens for a spender and then calls an external contract (ApproveAndCallReceiver). If the external contract is malicious, it can call back into this contract and exploit its state before the initial operation is complete, potentially leading to unexpected behavior or loss of funds.", - "code": "function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallReceiver(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; }", - "file_name": "2018-10706.sol", - "final_score": 5.25 - }, - { - "function_name": "transferFrom", - "vulnerability": "Integer Overflow", - "criticism": "The criticism correctly identifies a potential integer overflow vulnerability in the allowance update line. However, it fails to consider the context of the Solidity version and the presence of SafeMath library or similar overflow protections. Modern Solidity versions (0.8.0 and above) and the use of SafeMath in older versions inherently protect against such overflows. Therefore, without specifying the Solidity version or the absence of overflow protection, the assessment might overstate the risk. Additionally, the practical exploitation of this vulnerability requires specific conditions that are not detailed, affecting the accuracy of the severity and profitability ratings.", - "correctness": 5, - "severity": 3, - "profitability": 2, - "reason": "The line 'allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value;' can potentially overflow if '_value' is chosen such that the sum exceeds the maximum representable uint256 value. This could allow an attacker to wrap the allowance around and exploit the contract by transferring more tokens than intended.", - "code": "function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] = balanceOf[_from] - _value; balanceOf[_to] = balanceOf[_to] + _value; allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; emit Transfer(_from, _to, _value); return true; }", - "file_name": "2018-10706.sol", - "final_score": 3.75 - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10944.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10944.json deleted file mode 100644 index 81837ec3..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10944.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "function_name": "request_dividend", - "vulnerability": "Reentrancy", - "criticism": "The identification of reentrancy vulnerability in the 'request_dividend' function is accurate due to the use of 'send' without a reentrancy guard. However, the severity and profitability might not be as high as implied. While 'send' is indeed susceptible to reentrancy attacks, it only forwards 2300 gas, limiting the actions an attacker can perform in a fallback function. Nonetheless, the risk of reentrancy should not be underestimated, especially in functions involving financial transactions. The criticism could have been more nuanced by acknowledging the gas limit but still emphasizing the importance of reentrancy guards. The correctness is rated moderately high due to accurate identification, but severity and profitability are adjusted to reflect the nuanced risk.", - "correctness": 7, - "severity": 5, - "profitability": 4, - "reason": "In the 'request_dividend' function, ether is sent using 'send' without a reentrancy guard. This could allow an attacker to re-enter the contract if the caller is a contract with a fallback function.", - "code": "function request_dividend(address token_holder) payable { holder_token_balance = balanceOf(token_holder)/10000000000; Message(holder_token_balance); holder_profit = holder_token_balance * profit_per_token; Message(holder_profit); Transfer(owner, token_holder , (holder_profit/10**18)); token_holder.send(holder_profit); }", - "file_name": "2018-10944.sol", - "final_score": 5.75 - }, - { - "function_name": "drain", - "vulnerability": "Unchecked CALL return value", - "criticism": "The criticism correctly identifies the use of '.send()' and the deprecated 'throw' for error handling in the 'drain' function as problematic. However, it conflates two separate issues: the deprecated error handling and the potential for gas-related failures with '.send()'. The severity of using 'throw' is relatively high due to the potential for unexpected contract behavior and the inefficiency of gas usage. The profitability of exploiting this vulnerability is low, as it primarily affects the contract owner's ability to withdraw funds. A more accurate critique would separate these concerns, emphasizing the need for updated error handling practices and the limitations of '.send()' for transferring ether. Correctness is rated moderately for identifying relevant issues, but the explanation lacks clarity in distinguishing between them.", - "correctness": 6, - "severity": 4, - "profitability": 1, - "reason": "The 'drain' function uses '.send()' to transfer ether and checks the return value with a 'throw', which is deprecated and should be replaced with 'require()' for better error handling. It's also susceptible to gas limitations of '.send()', potentially leading to failed transactions without proper notification or handling.", - "code": "function drain() onlyOwner { if (!owner.send(this.balance)) throw; }", - "file_name": "2018-10944.sol", - "final_score": 4.25 - }, - { - "function_name": "transferFrom", - "vulnerability": "Reentrancy", - "criticism": "The criticism of the 'transferFrom' function for reentrancy vulnerability is misplaced. Reentrancy is a concern when a contract makes an external call to an untrusted contract before it resolves its internal state. However, 'transferFrom' primarily deals with token transfers and updates balances and allowances before making any external calls. There are no external calls within 'transferFrom' that would allow for reentrancy in the provided code snippet. Therefore, the identification of reentrancy as a vulnerability in this context is incorrect, leading to a low correctness score. The severity and profitability are also rated low because the described vulnerability does not exist in this scenario.", - "correctness": 1, - "severity": 0, - "profitability": 0, - "reason": "The 'transferFrom' function transfers tokens on behalf of another address after allowance is given, but does not implement reentrancy guards. This could allow an attacker to perform a reentrancy attack if the recipient contract is malicious and has a fallback function designed to call back into this contract.", - "code": "function transferFrom( address _from, address _to, uint256 _amount ) returns (bool success) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else { return false; } }", - "file_name": "2018-10944.sol", - "final_score": 0.5 - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-11239.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-11239.json deleted file mode 100644 index 695830e3..00000000 --- a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-11239.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "function_name": "_transfer", - "vulnerability": "Integer Overflow and Underflow", - "criticism": "The criticism regarding the potential for integer overflow and underflow in the _transfer function is valid, especially for Solidity versions prior to 0.8.0 which do not automatically handle these issues. The function's arithmetic operations without explicit checks for overflows or underflows could indeed lead to vulnerabilities where token balances are manipulated in unintended ways. This could potentially allow an attacker to exploit the contract by creating conditions under which these arithmetic errors occur, leading to the theft of tokens or other unintended outcomes. The severity of this vulnerability is high due to the potential impact on token balances and the integrity of the contract. Profitability for an attacker is also high, as exploiting these vulnerabilities could lead to significant gains at the expense of other users.", - "correctness": 8, - "severity": 7, - "profitability": 7, - "reason": "The function does not adequately check for integer overflows or underflows when calculating balances after a transfer and burn operation. Solidity versions prior to 0.8.0 do not automatically check for arithmetic overflows/underflows. An attacker might exploit this by sending a value that, when added to the recipient's balance, overflows the balance, potentially allowing for theft of tokens.", - "code": "function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balanceOf[_from] >= _value + burnPerTransaction); require (balanceOf[_to] + _value > balanceOf[_to]); balanceOf[_from] -= _value + burnPerTransaction; balanceOf[_to] += _value; balanceOf[0x0] += burnPerTransaction; currentSupply -= burnPerTransaction; Burn(_from, burnPerTransaction); Transfer(_from, _to, _value); }", - "file_name": "2018-11239.sol", - "final_score": 7.5 - }, - { - "function_name": "approve", - "vulnerability": "ERC20 Approve/Allowance Race Condition", - "criticism": "The criticism of the approve function's vulnerability to a race condition is somewhat overstated. The function's requirement that either the current allowance is zero or the new value is zero mitigates the risk of an attacker exploiting the race condition to a significant extent. However, the scenario described does indeed represent a potential vulnerability in cases where allowances are being changed from one non-zero value to another without first setting them to zero. This could lead to unexpected behavior if not properly managed by the user or the interface interacting with the contract. The correctness of identifying a vulnerability is there, but the severity is overestimated due to the mitigating conditions in the code. Profitability for an attacker is also limited, as it requires specific conditions and timing to exploit successfully.", - "correctness": 6, - "severity": 3, - "profitability": 2, - "reason": "This vulnerability occurs because the function does not handle the case where changing an allowance from a non-zero value to another non-zero value could be exploited by an attacker who is able to call transferFrom multiple times. The require condition only checks for changes from zero to non-zero or vice versa, which means an attacker can exploit the race condition by requesting a change in allowance while executing transferFrom, potentially draining the owner's funds.", - "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(_value == 0 || allowance[msg.sender][_spender] == 0); allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", - "file_name": "2018-11239.sol", - "final_score": 4.25 - }, - { - "function_name": "burn", - "vulnerability": "Burning Tokens to 0x0 Address", - "criticism": "The criticism of burning tokens by sending them to the 0x0 address overlooks the intentional design choice behind such a mechanism. While it is true that burning tokens in this manner permanently removes them from circulation, thereby reducing the total supply, this is often a desired outcome in token economics to create scarcity or to fulfill specific tokenomics models. The criticism fails to acknowledge the potential benefits of such a design decision. However, caution should indeed be exercised to avoid burning tokens unintentionally. The practice of burning tokens is not inherently problematic but requires clear documentation and user understanding to prevent mistakes. The severity of this issue is low, as it aligns with the intended functionality, and profitability for an attacker is non-existent, as this action does not inherently provide a means for profit.", - "correctness": 5, - "severity": 1, - "profitability": 0, - "reason": "Directly burning tokens by sending them to the 0x0 address can lead to a permanent loss of those tokens, decreasing the total supply potentially in an undesirable manner. While this is somewhat intentional as described by the function, it can be problematic if there's a mistake in the amount to be burned. It also does not follow the best practice of burning tokens, which is to reduce the total supply without transferring to the 0x0 address.", - "code": "function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; balanceOf[0x0] += _value; currentSupply -= _value; Burn(msg.sender, _value); return true; }", - "file_name": "2018-11239.sol", - "final_score": 2.75 - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10299.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10299.json deleted file mode 100644 index 70c7a8d2..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10299.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "batchTransfer", - "code": "function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; }", - "vulnerability": "Integer Overflow and Underflow", - "reason": "In the 'batchTransfer' function, the calculation of the 'amount' variable can lead to an integer overflow if the product of 'cnt' and '_value' exceeds the maximum value of uint256. This could lead to unexpected behavior, such as a much smaller 'amount' than expected, which could then allow the transfer of tokens even when the sender's balance is insufficient.", - "file_name": "2018-10299.sol", - "label": "Integer Overflow", - "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." - }, - { - "function_name": "transfer", - "code": "function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value > 0 && _value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; }", - "vulnerability": "Insufficient validation of '_to' address", - "reason": "The 'transfer' function lacks a check for the case where '_to' address is the smart contract itself. If tokens are transferred to the contract's address, they could be permanently locked in the contract, as the contract does not have a function to transfer tokens it received.", - "file_name": "2018-10299.sol", - "label": "Integer Overflow", - "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." - }, - { - "function_name": "approve", - "code": "function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", - "vulnerability": "Race Condition (also known as front-running)", - "reason": "The 'approve' function is vulnerable to the race condition where, if you were to approve someone to spend a particular amount of tokens, and they were to spend them before you had a chance to change the approved amount, they could spend the tokens, and then spend the newly approved tokens again. This could be mitigated by requiring users to first reduce the spender's allowance to 0 before setting it to another value for the same spender.", - "file_name": "2018-10299.sol", - "label": "Integer Overflow", - "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10376.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10376.json deleted file mode 100644 index c645b18e..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10376.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "transferFrom", - "code": "function transferFrom(address _from, address _to, uint256 _value) public transferAllowed(_from) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } }", - "vulnerability": "Missing Input Validation", - "reason": "The function 'transferFrom' is missing a validation check to verify if the '_to' address is a non-zero address. This means that it's possible to send tokens to the 0x0 address, effectively destroying them and reducing the total supply of tokens.", - "file_name": "2018-10376.sol", - "label": "Integer Overflow", - "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." - }, - { - "function_name": "allocateTokens", - "code": "function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { if(allocateEndTime < now) revert(); if(_owners.length != _values.length) revert(); for(uint256 i = 0; i < _owners.length ; i++){ address to = _owners[i]; uint256 value = _values[i]; if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); totalSupply += value; balances[to] += value; } }", - "vulnerability": "Arbitrary Minting", - "reason": "The function 'allocateTokens' allows the contract owner to mint an arbitrary number of tokens at any time, which is a centralization risk. The owner can manipulate the token supply at will, potentially diluting the value of other holders' tokens.", - "file_name": "2018-10376.sol", - "label": "Integer Overflow", - "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." - }, - { - "function_name": "changeOwner", - "code": "function changeOwner(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; }", - "vulnerability": "Ownership Takeover", - "reason": "The 'changeOwner' function does not require the new owner to accept the ownership. This means that the contract owner can set any address as the new owner, even if that address is not controlled by anyone or is controlled by an attacker. This could result in an irreversible loss of control over the contract.", - "file_name": "2018-10376.sol", - "label": "Integer Overflow", - "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10468.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10468.json deleted file mode 100644 index a672212e..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10468.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "transfer", - "code": "function transfer(address _to, uint256 _value) returns (bool success) { if(msg.data.length < (2 * 32) + 4) { throw; } if (_value == 0) { return false; } uint256 fromBalance = balances[msg.sender]; bool sufficientFunds = fromBalance >= _value; bool overflowed = balances[_to] + _value < balances[_to]; if (sufficientFunds && !overflowed) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } }", - "vulnerability": "Integer Overflow and Underflow", - "reason": "The function does not prevent integer overflow and underflow. An attacker can use this vulnerability to manipulate the balance of accounts, such as adding tokens to their account or removing tokens from other accounts.", - "file_name": "2018-10468.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue." - }, - { - "function_name": "transferFrom", - "code": "function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if(msg.data.length < (3 * 32) + 4) { throw; } if (_value == 0) { return false; } uint256 fromBalance = balances[_from]; uint256 allowance = allowed[_from][msg.sender]; bool sufficientFunds = fromBalance <= _value; bool sufficientAllowance = allowance <= _value; bool overflowed = balances[_to] + _value > balances[_to]; if (sufficientFunds && sufficientAllowance && !overflowed) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } }", - "vulnerability": "Integer Overflow and Underflow", - "reason": "The function does not prevent integer overflow and underflow. An attacker can use this vulnerability to manipulate the balance of accounts and the allowance of tokens, such as adding tokens to their account or removing tokens from other accounts.", - "file_name": "2018-10468.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue." - }, - { - "function_name": "approve", - "code": "function approve(address _spender, uint256 _value) returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", - "vulnerability": "Race Condition", - "reason": "The function does not prevent double spending due to race conditions. An attacker can use this vulnerability to spend tokens more than their allowance by calling the function multiple times before the transaction is mined.", - "file_name": "2018-10468.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue." - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-11411.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-11411.json deleted file mode 100644 index 61fc959c..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-11411.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "distributeFUD", - "code": "function distributeFUD(address[] addresses, uint256 _value, uint256 _ethbal) onlyOwner { for (uint i = 0; i < addresses.length; i++) { if (getEthBalance(addresses[i]) < _ethbal) { continue; } balances[owner] -= _value; balances[addresses[i]] += _value; Transfer(owner, addresses[i], _value); } }", - "vulnerability": "Underflow vulnerability", - "reason": "In the distributeFUD function, the balance of the owner is reduced by _value without checking whether the balance of the owner is greater than or equal to _value. This could allow an underflow if _value is greater than the owner's balance which would result in an extremely large balance being assigned to the owner.", - "file_name": "2018-11411.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect." - }, - { - "function_name": "transferFrom", - "code": "function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { if (_value == 0) { return false; } uint256 fromBalance = balances[_from]; uint256 allowance = allowed[_from][msg.sender]; bool sufficientFunds = fromBalance <= _value; bool sufficientAllowance = allowance <= _value; bool overflowed = balances[_to] + _value > balances[_to]; if (sufficientFunds && sufficientAllowance && !overflowed) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } }", - "vulnerability": "Insufficient balance check", - "reason": "The condition for checking sufficient funds in the transferFrom function is incorrect. The condition 'fromBalance <= _value' should be 'fromBalance >= _value'. This could potentially allow a user to transfer more tokens than they have in their balance.", - "file_name": "2018-11411.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect." - }, - { - "function_name": "approve", - "code": "function approve(address _spender, uint256 _value) returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", - "vulnerability": "Approval race condition", - "reason": "The approve function is vulnerable to the race condition. If a user calls this function twice in quick succession, the second call could overwrite the first, potentially leading to unexpected behavior. This is commonly known as the approve/transferFrom race condition in ERC20 tokens.", - "file_name": "2018-11411.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect." - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-12025.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-12025.json deleted file mode 100644 index 0b0d0311..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-12025.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "transfer", - "code": "function transfer(address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[msg.sender] < value) return false; if(balances[to] + value < balances[to]) return false; balances[msg.sender] -= value; balances[to] += value; Transfer(msg.sender, to, value); return true; }", - "vulnerability": "Integer Underflow", - "reason": "The transfer function does not handle the case where the sender's balance is less than the value to be transferred. Essentially, if the sender's balance is less than the value to be transferred, the balance of the sender would underflow, and the sender would end up with an extraordinarily high balance.", - "file_name": "2018-12025.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." - }, - { - "function_name": "transferFrom", - "code": "function transferFrom(address from, address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[from] < value) return false; if( allowed[from][msg.sender] >= value ) return false; if(balances[to] + value < balances[to]) return false; balances[from] -= value; allowed[from][msg.sender] -= value; balances[to] += value; Transfer(from, to, value); return true; }", - "vulnerability": "Integer Underflow", - "reason": "Similar to the transfer function, the transferFrom function does not handle the case where the sender's balance or allowed value is less than the value to be transferred. This could result in the sender's balance or allowance underflowing and becoming extremely high.", - "file_name": "2018-12025.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." - }, - { - "function_name": "mintToken", - "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner{ balances[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0,owner,mintedAmount); Transfer(owner,target,mintedAmount); }", - "vulnerability": "Arbitrary Minting", - "reason": "The mintToken function allows the contract owner to create an arbitrary amount of tokens and send them to any address. This could lead to an oversupply of tokens, devaluing existing tokens, and it could be used maliciously to grant an enormous number of tokens to an attacker's address.", - "file_name": "2018-12025.sol", - "label": "Wrong Logic", - "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-13836.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-13836.json deleted file mode 100644 index 6263f0d5..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-13836.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "transfer", - "code": "function transfer(address _to, uint256 _amount) public returns (bool success) { require(balances[msg.sender] >= _amount && _amount > 0); balances[msg.sender] -= _amount; balances[_to] += _amount; Transfer(msg.sender, _to, _amount); return true; }", - "vulnerability": "Missing input validation", - "reason": "The function doesn't check if the '_to' address is a zero address. Transferring to a zero address is like burning tokens, it can lead to permanent loss of tokens.", - "file_name": "2018-13836.sol", - "label": "Integer Overflow", - "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." - }, - { - "function_name": "multiTransfer", - "code": "function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { require(_addresses.length <= 100 && _addresses.length == _amounts.length); uint totalAmount; for (uint a = 0; a < _amounts.length; a++) { totalAmount += _amounts[a]; } require(totalAmount > 0 && balances[msg.sender] >= totalAmount); balances[msg.sender] -= totalAmount; for (uint b = 0; b < _addresses.length; b++) { if (_amounts[b] > 0) { balances[_addresses[b]] += _amounts[b]; Transfer(msg.sender, _addresses[b], _amounts[b]); } } return true; }", - "vulnerability": "Arithmetic Overflow", - "reason": "The code doesn't check for arithmetic overflow when adding up the '_amounts'. This could potentially lead to incorrect balance calculations.", - "file_name": "2018-13836.sol", - "label": "Integer Overflow", - "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." - }, - { - "function_name": "withdrawFunds", - "code": "function withdrawFunds(address _token) public returns (bool success) { require(msg.sender == owner); if (_token == address(0)) { owner.transfer(this.balance); } else { Token ERC20 = Token(_token); ERC20.transfer(owner, ERC20.balanceOf(this)); } return true; }", - "vulnerability": "Potential for unexpected behavior", - "reason": "The function transfers all the contract's ether to the owner without any restrictions or checks. This might not be an exploitable vulnerability, but it's a bad practice and can lead to unexpected behavior. For example, if the contract receives ether from a fallback function, it will be immediately transferred to the owner, which might not be the intended behavior.", - "file_name": "2018-13836.sol", - "label": "Integer Overflow", - "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-15552.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-15552.json deleted file mode 100644 index 1acfa11c..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-15552.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "AddTicket", - "code": "function AddTicket() public payable { require(msg.value == ticketPrice); require(numtickets < maxTickets); lastTicketTime = now; numtickets += 1; totalBounty += ticketPrice; bool success = numtickets == maxTickets; NewTicket(msg.sender, success); if(success) { PayWinner(msg.sender); } }", - "vulnerability": "Re-entrancy attack", - "reason": "The AddTicket function calls the PayWinner function, which in turn makes an external call to the winner's address. This operation can allow the contract to be re-entered before the state variables have been updated, allowing an attacker to potentially withdraw funds multiple times.", - "file_name": "2018-15552.sol", - "label": "Bad Randomness", - "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." - }, - { - "function_name": "PayWinner", - "code": "function PayWinner( address winner ) private { require(numtickets == maxTickets); uint ownerTax = 6 * totalBounty / 100; uint winnerPrice = totalBounty - ownerTax; LottoComplete(msg.sender, lottoIndex, winnerPrice); lottoIndex += 1; numtickets = 0; totalBounty = 0; if(_direction == 0 && maxTickets < 20) maxTickets += 1; if(_direction == 1 && maxTickets > 10) maxTickets -= 1; if(_direction == 0 && maxTickets == 20) _direction = 1; if(_direction == 1 && maxTickets == 10) _direction = 0; worldOwner.transfer(ownerTax); winner.transfer(winnerPrice); }", - "vulnerability": "Integer division rounding down", - "reason": "The calculation of the ownerTax can result in rounding down due to integer division. This can lead to precision loss and the winner receiving less than the intended amount.", - "file_name": "2018-15552.sol", - "label": "Bad Randomness", - "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." - }, - { - "function_name": "withdraw", - "code": "function withdraw() public { require(worldOwner == msg.sender); lottoIndex += 1; numtickets = 0; totalBounty = 0; worldOwner.transfer(this.balance); }", - "vulnerability": "Potential for loss of funds", - "reason": "The worldOwner can withdraw all funds from the contract at any time. This can result in a loss of funds for users who have purchased tickets but the lottery has not yet been drawn.", - "file_name": "2018-15552.sol", - "label": "Bad Randomness", - "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17877.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17877.json deleted file mode 100644 index aec2dd6d..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17877.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "buyHeart", - "code": "function buyHeart(address referred) public payable {...}", - "vulnerability": "Reentrancy Attack", - "reason": "The function 'buyHeart' executes a transfer of ether (msg.sender.transfer(Luckybuy)) before resolving all the internal state changes, which leaves the contract vulnerable to a Reentrancy Attack. In this attack, the attacker could repeatedly call the 'buyHeart' function before the first function call is finished, draining the contract of Ether.", - "file_name": "2018-17877.sol", - "label": "Bad Randomness", - "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." - }, - { - "function_name": "withdraw", - "code": "function withdraw(uint _round) public {...}", - "vulnerability": "Unchecked Return Values", - "reason": "The function 'withdraw' executes the 'transfer' method without validating its return value. If the transfer fails for whatever reason (e.g., the receiver contract throws an exception), the contract will not be aware of this, leading to inconsistent state and potential loss of funds.", - "file_name": "2018-17877.sol", - "label": "Bad Randomness", - "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." - }, - { - "function_name": "win", - "code": "function win() public {...}", - "vulnerability": "Arbitrary Address Execution", - "reason": "In the 'win' function, there is a transfer of ether to an address without checking whether the address is a contract or externally owned account. If the address is a contract, the fallback function could be executed, allowing for potential malicious attacks. Moreover, it does not check whether the transfer was successful, potentially leading to loss of funds.", - "file_name": "2018-17877.sol", - "label": "Bad Randomness", - "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." - } -] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17882.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17882.json deleted file mode 100644 index 6f7bf82c..00000000 --- a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17882.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "function_name": "transfer", - "code": "function transfer(address _to, uint256 _value) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; }", - "vulnerability": "Missing input validation", - "reason": "This function allows an attacker to send tokens to the 0x0 address (burn address) or any other unintended addresses. This is because there is no validation on the '_to' address. The function can lead to permanent loss of tokens.", - "file_name": "2018-17882.sol", - "label": "Integer Overflow", - "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." - }, - { - "function_name": "batchTransfer", - "code": "function batchTransfer(address[] _to, uint _value) public { balances[msg.sender] = safeSub( balances[msg.sender], _to.length * _value ); for (uint i = 0; i < _to.length; i++) { balances[_to[i]] = safeAdd(balances[_to[i]], _value); Transfer(msg.sender, _to[i], _value); } }", - "vulnerability": "Integer Overflow and Underflow", - "reason": "In the '_to.length * _value' operation, if the multiplication of the length of '_to' array and '_value' is greater than the max limit of uint, it can cause overflow. If overflow occurs, the result will be less than the operands which can cause the 'safeSub' function to underflow, leading to incorrect balance updates.", - "file_name": "2018-17882.sol", - "label": "Integer Overflow", - "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." - }, - { - "function_name": "transferFrom", - "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); if (_to != fights) { allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value); } Transfer(_from, _to, _value); return true; }", - "vulnerability": "Missing authorization check", - "reason": "The function allows to transfer tokens from any account to any other account without checking if 'msg.sender' is allowed to do so. This can result in unauthorized transfer of tokens.", - "file_name": "2018-17882.sol", - "label": "Integer Overflow", - "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." - } -] \ No newline at end of file diff --git a/src/model.py b/src/model.py deleted file mode 100644 index 4c8905f5..00000000 --- a/src/model.py +++ /dev/null @@ -1,107 +0,0 @@ -import time -import os -from openai import OpenAI -from utils import dotdict - -OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY') -DEEPSEEK_API_KEY = os.environ.get('DEEPSEEK_API_KEY') -completion_tokens = 0 -prompt_tokens = 0 - -# Initialize clients -openai_client = OpenAI(api_key=OPENAI_API_KEY) -deepseek_client = OpenAI(api_key=DEEPSEEK_API_KEY, base_url="https://api.deepseek.com") - -def gpt(prompt, model, temperature=0.7, max_tokens=4000, n=1, stop=None) -> list: - messages = [{"role": "user", "content": prompt}] - if model == "gpt-4": - pass - time.sleep(30) # to prevent speed limitation exception - return chatgpt(messages, model=model, temperature=temperature, max_tokens=max_tokens, n=n, stop=stop) - - -def chatgpt(messages, model, temperature=0.0, max_tokens=4000, n=1, stop=None) -> list: - global completion_tokens, prompt_tokens - outputs = [] - - # Use Deepseek API for deepseek models - if model.startswith("deepseek"): - return deepseek_chat(messages, model, temperature, max_tokens, n, stop) - - # Original OpenAI implementation - while n > 0: - cnt = min(n, 20) - n -= cnt - res = openai_client.chat.completions.create(model=model, messages=messages, temperature=temperature, max_tokens=max_tokens, - n=cnt, stop=stop) - outputs.extend([choice.message.content for choice in res.choices]) - # log completion tokens - completion_tokens += res.usage.completion_tokens - prompt_tokens += res.usage.prompt_tokens - return outputs - - -def deepseek_chat(messages, model, temperature, max_tokens, n, stop) -> list: - """Handle chat completions using Deepseek API""" - global completion_tokens, prompt_tokens - outputs = [] - - # Map deepseek model names to actual API model names - model_map = { - "deepseek-r1": "deepseek-reasoner", # currently points to deepseek r1 - } - - api_model = model_map.get(model, model) - - while n > 0: - batch_size = min(n, 20) # Process in batches like the original - n -= batch_size - - # Create multiple requests if n > 1 - for _ in range(batch_size): - # Note: temperature is passed but has no effect for deepseek-reasoner - res = deepseek_client.chat.completions.create( - model=api_model, - messages=messages, - max_tokens=max_tokens, - stop=stop - ) - - # For deepseek-reasoner, we might want to capture the reasoning content - if model.startswith("deepseek-r") and hasattr(res.choices[0].message, 'reasoning_content'): - # Store reasoning content somewhere if needed - reasoning = res.choices[0].message.reasoning_content - # Could log or store this for debugging/analysis - - outputs.append(res.choices[0].message.content) - - # Track token usage - completion_tokens += res.usage.completion_tokens - prompt_tokens += res.usage.prompt_tokens - - return outputs - - -def gpt_usage(backend="gpt-4"): - global completion_tokens, prompt_tokens - if backend == "gpt-4": - cost = completion_tokens / 1000 * 0.06 + prompt_tokens / 1000 * 0.03 - elif backend == "gpt-4-turbo-preview": - cost = completion_tokens / 1000 * 0.03 + prompt_tokens / 1000 * 0.01 - elif backend == "gpt-3.5-turbo": - cost = completion_tokens / 1000 * 0.002 + prompt_tokens / 1000 * 0.0015 - elif backend == "deepseek-r1": - # Deepseek Reasoner pricing (standard rate), not off peak discount rates. - # Input: $0.55 per 1M tokens - # Output: $2.19 per 1M tokens - input_cost = prompt_tokens / 1000000 * 0.55 - output_cost = completion_tokens / 1000000 * 2.19 - cost = input_cost + output_cost - elif backend.startswith("deepseek"): - # Generic pricing for other Deepseek models (standard rate) - # Input: $0.27 per 1M tokens - # Output: $1.10 per 1M tokens - input_cost = prompt_tokens / 1000000 * 0.27 - output_cost = completion_tokens / 1000000 * 1.10 - cost = input_cost + output_cost - return {"completion_tokens": completion_tokens, "prompt_tokens": prompt_tokens, "cost": cost} \ No newline at end of file diff --git a/src/pre_process.py b/src/pre_process.py deleted file mode 100644 index b932997a..00000000 --- a/src/pre_process.py +++ /dev/null @@ -1,41 +0,0 @@ -import os -import re -from utils import dotdict - - -def remove_annotations(file_path): - # read the file - with open(file_path, 'r', encoding="utf8") as f: - data = f.read() - - data = re.sub(r"//.*?$", "", data, flags=re.MULTILINE) # remove single-line comments - data = re.sub(r"/\*.*?\*/", "", data, flags=re.DOTALL) # remove multi-line comments - data = re.sub(r"\n\s*\n", "\n", data) # remove empty lines - data = data.strip() # remove leading/trailing whitespace - - return data - -if __name__ == '__main__': - - for filename in os.listdir("data/CVE"): - if not filename.endswith(".sol"): - continue - filepath = f"data/CVE/{filename}" - content = remove_annotations(filepath) - new_filepath = f"data/CVE_clean/{filename}" - - with open(new_filepath, 'w') as f: - f.write(content) - - -def mainfnc(data_dir): - - for filename in os.listdir("data/CVE"): - if not filename.endswith(".sol"): - continue - filepath = f"data/CVE/{filename}" - content = remove_annotations(filepath) - new_filepath = f"{data_dir}/{filename}" - - with open(new_filepath, 'w') as f: - f.write(content) \ No newline at end of file diff --git a/src/prompts.py b/src/prompts.py deleted file mode 100644 index 530209fe..00000000 --- a/src/prompts.py +++ /dev/null @@ -1,91 +0,0 @@ - -####### Basic Prompt ######## -topk_prompt1 = '''Output {topk} most severe vulnerabilities.\n''' -topk_prompt2 = '''If no vulnerability is detected, you should only output in this json format {"output_list": []}.\n''' - -####### Auditor Prompt ####### -auditor_prompt = '''You are a smart contract auditor, identify and explain severe vulnerabilities in the provided smart contract. Make sure that they are exploitable in real world and beneficial to attackers. Provide each identified vulnerability with intermediate reasoning and its associated function. Remember, you must provide the entire function code and do not use "...". Make your reasoning comprehensive and detailed. Smart contract code:\n\n''' -auditor_format_constrain = '''\nYou should only output in below json format: -{ - "output_list": [ - { - "function_name": "", - "code": "", - "vulnerability": "", - "reason": "" - }, - { - "function_name": "", - "code": "", - "vulnerability": "", - "reason": "" - } - ] -} -''' - -####### Critic Prompt ####### -critic_zero_shot_prompt = '''Below vulnerabilities and reasoning are likely contain mistakes. As a harsh vulnerability critic, your duty is to scrutinize the function and evaluate the correctness, severity and profitability of given vulnerabilities and associated reasoning with corresponding scores ranging from 0 (lowest) to 9 (highest). Your also need to provide criticism, which must include explanations for your scoring. Make your criticism comprehensive and detailed\n''' -critic_few_shot_prompt = '''Below vulnerabilities and reasoning are likely contain mistakes. As a harsh vulnerability critic, your duty is to scrutinize the function and evaluate the correctness, severity and profitability of given vulnerabilities and associated reasoning with corresponding scores ranging from 0 (lowest) to 9 (highest). Your also need to provide criticism, which must include explanations for your scoring. Make your criticism comprehensive and detailed. Below are three examples:\n -Input: -"function_name": "mintToken", -"code": "function mintToken(address target, uint256 mintedAmount) onlyOwner{ balances[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0,owner,mintedAmount); Transfer(owner,target,mintedAmount); }", -"vulnerability": "Arbitrary Minting". -"reason" -Output: -"function_name": "mintToken", -"criticism": "The reasoning is correct. The owner of the contract can mint arbitrary tokens. This could lead to an arbitrary increase in the token supply, devaluing existing tokens. However, isn't inherently a vulnerability, but rather a design decision that might be questionable. The severity is moderate because it is based on the owner's intention. The profitability is low because an external attacker cannot profit from it.", -"correctness": 7, -"severity": 4, -"profitability": 0 - -Input: -"function_name": "transferFrom", -"code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; transfer(_from, _to, _value); return true;}", -"vulnerability": "Unchecked Transfer", -"reason": "The transferFrom function does not check if the _to address is a valid address before transferring tokens. This allows an attacker to send tokens to an invalid address, resulting in a loss of tokens."" -Output: -"function_name": "transferFrom", -"vulnerability": "Unchecked Transfer", -"criticism": "The reasoning is correct that there is no address check in the transferFrom function. However, the severity and profitability of this vulnerability are very low, because it does not cause severe exploitation and an external attacker cannot profit from this vulnerability." -"correctness": 7, -"severity": 2, -"profitability": 0 - -Input: -"function_name": "approve", -"code": "function approve(address _spender, uint256 _value) returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", -"vulnerability": "Race condition (front-running)", -"reason": "The approve function is vulnerable to front-running because it does not require the spender to have a zero allowance before setting a new one. An attacker can call the approve function and then the transferFrom function before the original transaction is mined." -Output: -"function_name": "approve", -"criticism": "The statement is correct in pointing out that this function does not inherently reset the allowance. However, the function does include a check to ensure that if the allowance is non-zero, the new value must be zero (and vice versa). Therefore, the risk is not as serve as stated, and also not profitable.", -"correctness": 3, -"severity": 0, -"profitability": 0 -''' - -critic_format_constrain = '''\nYou should only output in below json format: -{ - "output_list": [ - { - "function_name": "", - "vulnerability": "", - "criticism": "", - "correctness": <0~9>, - "severity": <0~9>, - "profitability": <0~9>, - }, - { - "function_name": "", - "vulnerability": "", - "criticism": "", - "correctness": <0~9>, - "severity": <0~9>, - "profitability": <0~9>, - } - ] -} -''' - - diff --git a/src/run_auditor.py b/src/run_auditor.py deleted file mode 100644 index daf8fc04..00000000 --- a/src/run_auditor.py +++ /dev/null @@ -1,117 +0,0 @@ -import json -import random -import argparse -import os -from tqdm import tqdm -from utils import dotdict -from stqdm import stqdm - -import openai -from model import gpt, gpt_usage, OPENAI_API_KEY -from prompts import auditor_prompt, auditor_format_constrain -from prompts import topk_prompt1, topk_prompt2 - -completion_tokens = 0 -prompt_tokens = 0 - -def remove_spaces(s): - return ' '.join(s.split()) - -def prompt_wrap(prompt, format_constraint, code, topk): - return prompt + code + format_constraint + topk_prompt1.format(topk=topk) + topk_prompt2 - -def auditor_response_parse(auditor_outputs): - output_list = [] - for auditor_output in auditor_outputs: - try: - start_idx = auditor_output.find("{") - end_idx = auditor_output.rfind("}") - data = json.loads(auditor_output[start_idx: end_idx+1]) - except: - print("parsing json fail.") - continue - try: - output_list += data["output_list"] - except: - print("No vulnerability detected") - continue - - return output_list - -def solve(args, code): - - bug_info_list = [] - auditor_input = prompt_wrap(auditor_prompt, auditor_format_constrain, code, args.topk) - - try: - auditor_outputs = gpt(auditor_input, model=args.backend, temperature=args.temperature, n=args.num_auditor) - bug_info_list = auditor_response_parse(auditor_outputs) - except Exception as e: - print(e) - - return bug_info_list - -def run(args): - - if args.get('openai_api_key') is None: - openai.api_key = OPENAI_API_KEY - else: - openai.api_key = args.openai_api_key - - with open("data/CVE_label/CVE2description.json", "r") as f: - CVE2description = json.load(f) - with open("data/CVE_label/CVE2label.json", "r") as f: - CVE2label = json.load(f) - - # log output file - log_dir = f"./src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}" - - for CVE_index, label in stqdm(CVE2label.items()): - - all_bug_info_list = [] - description = CVE2description[CVE_index] - file_name = "-".join(CVE_index.split("-")[1:]) + ".sol" - - with open("data/CVE_clean/" + file_name, "r") as f: - code = f.read() - # remove space - code = remove_spaces(code) - - # auditing - bug_info_list = solve(args, code) - - if len(bug_info_list) == 0: #Sometimes the query fails because the model does not strictly follow the format - print("{index} failed".format(index=CVE_index)) - continue - - for info in bug_info_list: - info.update({"file_name": file_name, "label": label, "description": description}) - all_bug_info_list.append(info) - - file = f"{log_dir}/{CVE_index}.json" - os.makedirs(os.path.dirname(file), exist_ok=True) - - with open(file, 'w') as f: - json.dump(all_bug_info_list, f, indent=4) - -def parse_args(): - args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') - args.add_argument('--temperature', type=float, default=0.7) - args.add_argument('--dataset', type=str, default="CVE") - args.add_argument('--topk', type=int, default=5) # the topk per each auditor - args.add_argument('--num_auditor', type=int, default=1) - - args = args.parse_args() - return args - -if __name__ == '__main__': - - args = parse_args() - print(args) - run(args) - -def mainfnc(args=dotdict): - # args = parse_args() - # print(args) - run(args) \ No newline at end of file diff --git a/src/run_auditor_user_defined.py b/src/run_auditor_user_defined.py deleted file mode 100644 index f39b6872..00000000 --- a/src/run_auditor_user_defined.py +++ /dev/null @@ -1,113 +0,0 @@ -import json -import random -import argparse -import os -from tqdm import tqdm -from utils import dotdict -from stqdm import stqdm - -import openai -from model import gpt, gpt_usage, OPENAI_API_KEY -from prompts import auditor_prompt, auditor_format_constrain -from prompts import topk_prompt1, topk_prompt2 - -completion_tokens = 0 -prompt_tokens = 0 - -def remove_spaces(s): - return ' '.join(s.split()) - -def prompt_wrap(prompt, format_constraint, code, topk): - return prompt + code + format_constraint + topk_prompt1.format(topk=topk) + topk_prompt2 - -def auditor_response_parse(auditor_outputs): - output_list = [] - for auditor_output in auditor_outputs: - try: - start_idx = auditor_output.find("{") - end_idx = auditor_output.rfind("}") - data = json.loads(auditor_output[start_idx: end_idx+1]) - except: - print("parsing json fail.") - continue - try: - output_list += data["output_list"] - except: - print("No vulnerability detected") - continue - - return output_list - -def solve(args, code): - - bug_info_list = [] - auditor_input = prompt_wrap(auditor_prompt, auditor_format_constrain, code, args.topk) - - try: - auditor_outputs = gpt(auditor_input, model=args.backend, temperature=args.temperature, n=args.num_auditor) - bug_info_list = auditor_response_parse(auditor_outputs) - except Exception as e: - print(e) - - return bug_info_list - -def run(args): - - if args.get('openai_api_key') is None: - openai.api_key = OPENAI_API_KEY - else: - openai.api_key = args.openai_api_key - - # log output file - log_dir = f"./src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}" - - for file_name in stqdm(os.listdir(args.data_dir)): - - all_bug_info_list = [] - - if not file_name.endswith(".sol"): - continue - - with open(f"{args.data_dir}/{file_name}", "r") as f: - code = f.read() - # remove space - code = remove_spaces(code) - - # auditing - bug_info_list = solve(args, code) - - if len(bug_info_list) == 0: #Sometimes the query fails because the model does not strictly follow the format - print("{index} failed".format(index=file_name)) - continue - - for info in bug_info_list: - info.update({"file_name": file_name}) - all_bug_info_list.append(info) - - file = f"{log_dir}/{file_name.replace('.sol', '.json')}" - os.makedirs(os.path.dirname(file), exist_ok=True) - - with open(file, 'w') as f: - json.dump(all_bug_info_list, f, indent=4) - -def parse_args(): - args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') - args.add_argument('--temperature', type=float, default=0.7) - args.add_argument('--data_dir', type=str, default="data/CVE_clean") - args.add_argument('--topk', type=int, default=5) # the topk per each auditor - args.add_argument('--num_auditor', type=int, default=1) - - args = args.parse_args() - return args - -if __name__ == '__main__': - - args = parse_args() - print(args) - run(args) - -def mainfnc(args=dotdict): - # args = parse_args() - # print(args) - run(args) \ No newline at end of file diff --git a/src/run_critic.py b/src/run_critic.py deleted file mode 100644 index 4cec09ad..00000000 --- a/src/run_critic.py +++ /dev/null @@ -1,108 +0,0 @@ -import json -import argparse -import os -import openai -from stqdm import stqdm -from utils import dotdict - - -from prompts import critic_zero_shot_prompt, critic_few_shot_prompt, critic_format_constrain -from model import gpt, OPENAI_API_KEY - -completion_tokens = 0 -prompt_tokens = 0 - -def critic_response_parse(critic_outputs): - output_list = [] - for critic_output in critic_outputs: - try: - data = json.loads(critic_output) - output_list += data["output_list"] - except: - continue - return output_list - -def run(args): - - if args.get('openai_api_key') is None: - openai.api_key = OPENAI_API_KEY - else: - openai.api_key = args.openai_api_key - critic_dir = f"src/logs/{args.auditor_dir}/critic_{args.backend}_{args.temperature}_{args.num_critic}_{args.shot}" - - for filename in stqdm(os.listdir(f"src/logs/{args.auditor_dir}")): - if not filename.endswith("json"): - continue - filepath = f"src/logs/{args.auditor_dir}/{filename}" - with open(filepath, "r") as f: - auditor_output_list = json.load(f) - - critic_bug_info_final_list = [] - vul_info_str = '' - for i in range(len(auditor_output_list)): - bug_info = auditor_output_list[i] - function_name = bug_info["function_name"] - function_code = bug_info["code"] - vulnerability = bug_info["vulnerability"] - reason = bug_info["reason"] - vul_info_str = vul_info_str + "function_name: " + function_name + "\n" + "code: " + function_code + "\n" + "vulnerability" + ": " + vulnerability + "\n" + "reason: " + reason + "\n------------------\n" - - # do wrap - if args.shot == "zero": - critic_prompt = critic_zero_shot_prompt - elif args.shot == "few": - critic_prompt = critic_few_shot_prompt # provide three examples to make scoring consistent - else: - raise Exception("Please specify zero or few shots..") - - critic_input = critic_prompt + vul_info_str + critic_format_constrain - - critic_outputs = gpt(critic_input, model=args.backend, temperature=args.temperature, n=args.num_critic) - critic_bug_info_list = critic_response_parse(critic_outputs) - - for i in range(len(critic_bug_info_list)): - function_name = auditor_output_list[i]["function_name"] - label = auditor_output_list[i]["label"] - code = auditor_output_list[i]["code"] - file_name = auditor_output_list[i]["file_name"] - description = auditor_output_list[i]["description"] - reason = auditor_output_list[i]["reason"] - - critic_bug_info = critic_bug_info_list[i] - critic_bug_info.update( - {"reason": reason, "code": code, "label": label, "file_name": file_name, "description": description}) - - critic_bug_info_final_list.append(critic_bug_info) - - filepath = f"{critic_dir}/{filename}" - # dump the file - os.makedirs(os.path.dirname(filepath), exist_ok=True) - - with open(filepath, 'w') as f: - json.dump(critic_bug_info_final_list, f, indent=4) - - -def parse_args(): - args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') - args.add_argument('--temperature', type=float, default=0) - args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") - args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory - args.add_argument('--num_critic', type=int, default=1) - args.add_argument('--shot', type=str, choices=["zero", "few"], default="few") - - args = args.parse_args() - - return args - - -if __name__ == '__main__': - - args = parse_args() - print(args) - run(args) - -def mainfnc(args=dotdict): - # args = parse_args() - # print(args) - run(args) diff --git a/src/run_critic_user_defined.py b/src/run_critic_user_defined.py deleted file mode 100644 index 40f463ce..00000000 --- a/src/run_critic_user_defined.py +++ /dev/null @@ -1,106 +0,0 @@ -import json -import argparse -import os -import openai -from stqdm import stqdm -from utils import dotdict - - -from prompts import critic_zero_shot_prompt, critic_few_shot_prompt, critic_format_constrain -from model import gpt, OPENAI_API_KEY - -completion_tokens = 0 -prompt_tokens = 0 - -def critic_response_parse(critic_outputs): - output_list = [] - for critic_output in critic_outputs: - try: - data = json.loads(critic_output) - output_list += data["output_list"] - except: - continue - return output_list - -def run(args): - - if args.get('openai_api_key') is None: - openai.api_key = OPENAI_API_KEY - else: - openai.api_key = args.openai_api_key - critic_dir = f"src/logs/{args.auditor_dir}/critic_{args.backend}_{args.temperature}_{args.num_critic}_{args.shot}" - - for filename in stqdm(os.listdir(f"src/logs/{args.auditor_dir}")): - if not filename.endswith("json"): - continue - filepath = f"src/logs/{args.auditor_dir}/{filename}" - with open(filepath, "r") as f: - auditor_output_list = json.load(f) - - critic_bug_info_final_list = [] - vul_info_str = '' - for i in range(len(auditor_output_list)): - bug_info = auditor_output_list[i] - function_name = bug_info["function_name"] - function_code = bug_info["code"] - vulnerability = bug_info["vulnerability"] - reason = bug_info["reason"] - vul_info_str = vul_info_str + "function_name: " + function_name + "\n" + "code: " + function_code + "\n" + "vulnerability" + ": " + vulnerability + "\n" + "reason: " + reason + "\n------------------\n" - - # do wrap - if args.shot == "zero": - critic_prompt = critic_zero_shot_prompt - elif args.shot == "few": - critic_prompt = critic_few_shot_prompt # provide three examples to make scoring consistent - else: - raise Exception("Please specify zero or few shots..") - - critic_input = critic_prompt + vul_info_str + critic_format_constrain - - critic_outputs = gpt(critic_input, model=args.backend, temperature=args.temperature, n=args.num_critic) - critic_bug_info_list = critic_response_parse(critic_outputs) - - for i in range(len(critic_bug_info_list)): - function_name = auditor_output_list[i]["function_name"] - code = auditor_output_list[i]["code"] - file_name = auditor_output_list[i]["file_name"] - reason = auditor_output_list[i]["reason"] - - critic_bug_info = critic_bug_info_list[i] - critic_bug_info.update( - {"reason": reason, "code": code, "file_name": file_name}) - - critic_bug_info_final_list.append(critic_bug_info) - - filepath = f"{critic_dir}/{filename}" - # dump the file - os.makedirs(os.path.dirname(filepath), exist_ok=True) - - with open(filepath, 'w') as f: - json.dump(critic_bug_info_final_list, f, indent=4) - - -def parse_args(): - args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') - args.add_argument('--temperature', type=float, default=0) - args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") - args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory - args.add_argument('--num_critic', type=int, default=1) - args.add_argument('--shot', type=str, choices=["zero", "few"], default="few") - - args = args.parse_args() - - return args - - -if __name__ == '__main__': - - args = parse_args() - print(args) - run(args) - -def mainfnc(args=dotdict): - # args = parse_args() - # print(args) - run(args) diff --git a/src/run_rank.py b/src/run_rank.py deleted file mode 100644 index 10fa39c0..00000000 --- a/src/run_rank.py +++ /dev/null @@ -1,71 +0,0 @@ -import json -import argparse -import os -from stqdm import stqdm -from utils import dotdict - - -def rank_by_score(json_list): - return sorted(json_list, key=lambda x: x["final_score"], reverse=True) - -def run(args): - # output file - ranker_dir = f"ranker_{args.strategy}" - - for filename in stqdm(os.listdir(f"src/logs/{args.auditor_dir}/{args.critic_dir}")): - if not filename.endswith("json"): - continue - filepath = f"src/logs/{args.auditor_dir}/{args.critic_dir}/{filename}" - with open(filepath, "r") as f: - critic_output_list = json.load(f) - - for i in range(len(critic_output_list)): - bug_info = critic_output_list[i] - correctness = float(bug_info["correctness"]) - severity = float(bug_info["severity"]) - profitability = float(bug_info["profitability"]) - - # overall score - if args.strategy == "default": - # naive weighted function - final_score = 0.5 * correctness + 0.25 * severity + 0.25 * profitability - - elif args.strategy == "customize": - # TODO: add your scoring function - pass - else: - raise Exception("Please choose correct strategy for scoring...") - - bug_info.update({"final_score": final_score}) - - # Rank based on scores - ranker_output_list = rank_by_score(critic_output_list) - filepath = f"src/logs/{args.auditor_dir}/{args.critic_dir}/{ranker_dir}/{filename}" - # dump the file - os.makedirs(os.path.dirname(filepath), exist_ok=True) - - with open(filepath, 'w') as f: - json.dump(ranker_output_list, f, indent=4) - - print("Ranking finished...") - -def parse_args(): - args = argparse.ArgumentParser() - args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") - args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory - args.add_argument('--critic_dir', type=str, default="critic_gpt-4_0_1_few_1026") #The critic output directory - args.add_argument('--strategy', type=str, default="default", choices=["default", "customize"]) - - args = args.parse_args() - return args - -if __name__ == '__main__': - args = parse_args() - print(args) - run(args) - - -def mainfnc(args=dotdict): - # args = parse_args() - # print(args) - run(args) \ No newline at end of file diff --git a/src/utils.py b/src/utils.py deleted file mode 100644 index 58aebc0d..00000000 --- a/src/utils.py +++ /dev/null @@ -1,19 +0,0 @@ -import os -import shutil - -class dotdict(dict): - """dot.notation access to dictionary attributes""" - __getattr__ = dict.get - __setattr__ = dict.__setitem__ - __delattr__ = dict.__delitem__ - -def clean_folder(folder): - for filename in os.listdir(folder): - file_path = f"{folder}/{filename}" - try: - if os.path.isfile(file_path) or os.path.islink(file_path): - os.unlink(file_path) - elif os.path.isdir(file_path): - shutil.rmtree(file_path) - except Exception as e: - print('Failed to delete %s. Reason: %s' % (file_path, e)) \ No newline at end of file From 9c362612f72461d086d82a6abb577ed227e1a749 Mon Sep 17 00:00:00 2001 From: melvn <104540526@student.swin.edu.au> Date: Sat, 8 Mar 2025 23:17:59 +1100 Subject: [PATCH 4/6] full implementation of deepseek r1 to the gptlens architecture --- .devcontainer/devcontainer.json | 33 + .gitmodules | 3 + .streamlit/config.toml | 3 + GPTLens.pdf | Bin 0 -> 1066178 bytes README.md | 124 ++ data/CVE/2018-10706.sol | 404 +++++ data/CVE/2018-10944.sol | 1344 +++++++++++++++++ data/CVE/2018-11239.sol | 102 ++ data/CVE_clean/2018-10706.sol | 252 ++++ data/CVE_clean/2018-10944.sol | 1041 +++++++++++++ data/CVE_clean/2018-11239.sol | 55 + data/CVE_label/CVE2description.json | 564 +++++++ data/CVE_label/CVE2label.json | 21 + data_full/CVE/2018-10299.sol | 299 ++++ data_full/CVE/2018-10376.sol | 294 ++++ data_full/CVE/2018-10468.sol | 146 ++ data_full/CVE/2018-10666.sol | 253 ++++ data_full/CVE/2018-10705.sol | 157 ++ data_full/CVE/2018-10706.sol | 404 +++++ data_full/CVE/2018-10944.sol | 1344 +++++++++++++++++ data_full/CVE/2018-11239.sol | 102 ++ data_full/CVE/2018-11335.sol | 280 ++++ data_full/CVE/2018-11411.sol | 126 ++ data_full/CVE/2018-11429.sol | 165 ++ data_full/CVE/2018-11446.sol | 432 ++++++ data_full/CVE/2018-11561.sol | 146 ++ data_full/CVE/2018-11687.sol | 99 ++ data_full/CVE/2018-12025-1.sol | 165 ++ data_full/CVE/2018-12025-2.sol | 165 ++ data_full/CVE/2018-12025-3.sol | 150 ++ data_full/CVE/2018-12062.sol | 175 +++ data_full/CVE/2018-12063.sol | 184 +++ data_full/CVE/2018-12067.sol | 175 +++ data_full/CVE/2018-12068.sol | 175 +++ data_full/CVE/2018-12070.sol | 269 ++++ data_full/CVE/2018-12078.sol | 145 ++ data_full/CVE/2018-12079.sol | 175 +++ data_full/CVE/2018-12080.sol | 184 +++ data_full/CVE/2018-12081.sol | 175 +++ data_full/CVE/2018-12082.sol | 168 +++ data_full/CVE/2018-12083.sol | 117 ++ data_full/CVE/2018-12084.sol | 153 ++ data_full/CVE/2018-12230.sol | 161 ++ data_full/CVE/2018-12454.sol | 148 ++ data_full/CVE/2018-12511.sol | 175 +++ data_full/CVE/2018-12702.sol | 142 ++ data_full/CVE/2018-12703.sol | 142 ++ data_full/CVE/2018-12885.sol | 1149 ++++++++++++++ data_full/CVE/2018-12959.sol | 127 ++ data_full/CVE/2018-12975.sol | 1234 +++++++++++++++ data_full/CVE/2018-13041.sol | 194 +++ data_full/CVE/2018-13068.sol | 166 ++ data_full/CVE/2018-13069.sol | 248 +++ data_full/CVE/2018-13070.sol | 169 +++ data_full/CVE/2018-13071.sol | 231 +++ data_full/CVE/2018-13072.sol | 168 +++ data_full/CVE/2018-13073.sol | 175 +++ data_full/CVE/2018-13074.sol | 227 +++ data_full/CVE/2018-13075.sol | 275 ++++ data_full/CVE/2018-13076.sol | 168 +++ data_full/CVE/2018-13077.sol | 199 +++ data_full/CVE/2018-13078.sol | 145 ++ data_full/CVE/2018-13079.sol | 161 ++ data_full/CVE/2018-13080.sol | 145 ++ data_full/CVE/2018-13081.sol | 171 +++ data_full/CVE/2018-13082.sol | 255 ++++ data_full/CVE/2018-13083.sol | 219 +++ data_full/CVE/2018-13084.sol | 155 ++ data_full/CVE/2018-13085.sol | 295 ++++ data_full/CVE/2018-13086.sol | 175 +++ data_full/CVE/2018-13087.sol | 233 +++ data_full/CVE/2018-13088.sol | 248 +++ data_full/CVE/2018-13089.sol | 254 ++++ data_full/CVE/2018-13090.sol | 248 +++ data_full/CVE/2018-13091.sol | 206 +++ data_full/CVE/2018-13092.sol | 178 +++ data_full/CVE/2018-13113.sol | 142 ++ data_full/CVE/2018-13126.sol | 301 ++++ data_full/CVE/2018-13127.sol | 238 +++ data_full/CVE/2018-13128.sol | 193 +++ data_full/CVE/2018-13129.sol | 276 ++++ data_full/CVE/2018-13131.sol | 312 ++++ data_full/CVE/2018-13132.sol | 403 +++++ data_full/CVE/2018-13144.sol | 103 ++ data_full/CVE/2018-13189.sol | 335 ++++ data_full/CVE/2018-13202.sol | 183 +++ data_full/CVE/2018-13208.sol | 171 +++ data_full/CVE/2018-13220.sol | 171 +++ data_full/CVE/2018-13221.sol | 186 +++ data_full/CVE/2018-13225.sol | 181 +++ data_full/CVE/2018-13227.sol | 172 +++ data_full/CVE/2018-13228.sol | 171 +++ data_full/CVE/2018-13230.sol | 171 +++ data_full/CVE/2018-13325.sol | 176 +++ data_full/CVE/2018-13326.sol | 135 ++ data_full/CVE/2018-13327.sol | 92 ++ data_full/CVE/2018-13493.sol | 344 +++++ data_full/CVE/2018-13533.sol | 191 +++ data_full/CVE/2018-13625.sol | 271 ++++ data_full/CVE/2018-13670.sol | 103 ++ data_full/CVE/2018-13695.sol | 301 ++++ data_full/CVE/2018-13698.sol | 131 ++ data_full/CVE/2018-13703.sol | 262 ++++ data_full/CVE/2018-13722.sol | 410 +++++ data_full/CVE/2018-13777.sol | 166 ++ data_full/CVE/2018-13778.sol | 224 +++ data_full/CVE/2018-13779.sol | 180 +++ data_full/CVE/2018-13782.sol | 171 +++ data_full/CVE/2018-13783.sol | 271 ++++ data_full/CVE/2018-13836.sol | 119 ++ data_full/CVE/2018-14001.sol | 152 ++ data_full/CVE/2018-14002.sol | 83 + data_full/CVE/2018-14003.sol | 200 +++ data_full/CVE/2018-14004.sol | 299 ++++ data_full/CVE/2018-14005.sol | 255 ++++ data_full/CVE/2018-14006.sol | 249 +++ data_full/CVE/2018-14063.sol | 178 +++ data_full/CVE/2018-14084.sol | 273 ++++ data_full/CVE/2018-14085.sol | 174 +++ data_full/CVE/2018-14086.sol | 107 ++ data_full/CVE/2018-14087.sol | 174 +++ data_full/CVE/2018-14089.sol | 208 +++ data_full/CVE/2018-14576.sol | 194 +++ data_full/CVE/2018-14715.sol | 740 +++++++++ data_full/CVE/2018-15552.sol | 120 ++ data_full/CVE/2018-17050.sol | 141 ++ data_full/CVE/2018-17071.sol | 55 + data_full/CVE/2018-17111.sol | 128 ++ data_full/CVE/2018-17877.sol | 403 +++++ data_full/CVE/2018-17882.sol | 117 ++ data_full/CVE/2018-17968.sol | 253 ++++ data_full/CVE/2018-17987.sol | 179 +++ data_full/CVE/2018-18425.sol | 264 ++++ data_full/CVE/2018-18665.sol | 79 + data_full/CVE/2018-19830.sol | 203 +++ data_full/CVE/2018-19831.sol | 305 ++++ data_full/CVE/2018-19832.sol | 232 +++ data_full/CVE/2018-19833.sol | 73 + data_full/CVE/2018-19834.sol | 265 ++++ data_full/CVE/2019-15078.sol | 243 +++ data_full/CVE/2019-15079.sol | 127 ++ data_full/CVE/2019-15080.sol | 227 +++ data_full/CVE/2020-17752.sol | 421 ++++++ data_full/CVE/2020-17753.sol | 499 ++++++ data_full/CVE/2020-35962.sol | 929 ++++++++++++ data_full/CVE/2021-3004.sol | 644 ++++++++ data_full/CVE/2021-3006.sol | 929 ++++++++++++ data_full/CVE/2021-33403.sol | 365 +++++ data_full/CVE/2021-34270.sol | 197 +++ data_full/CVE/2021-34272.sol | 255 ++++ data_full/CVE/2021-34273.sol | 129 ++ data_full/CVE_clean/2018-10299.sol | 142 ++ data_full/CVE_clean/2018-10376.sol | 169 +++ data_full/CVE_clean/2018-10468.sol | 99 ++ data_full/CVE_clean/2018-10666.sol | 163 ++ data_full/CVE_clean/2018-10705.sol | 98 ++ data_full/CVE_clean/2018-10706.sol | 252 ++++ data_full/CVE_clean/2018-10944.sol | 1041 +++++++++++++ data_full/CVE_clean/2018-11239.sol | 55 + data_full/CVE_clean/2018-11335.sol | 152 ++ data_full/CVE_clean/2018-11411.sol | 89 ++ data_full/CVE_clean/2018-11429.sol | 122 ++ data_full/CVE_clean/2018-11446.sol | 242 +++ data_full/CVE_clean/2018-11561.sol | 74 + data_full/CVE_clean/2018-11687.sol | 79 + data_full/CVE_clean/2018-12025.sol | 90 ++ data_full/CVE_clean/2018-12062.sol | 132 ++ data_full/CVE_clean/2018-12063.sol | 123 ++ data_full/CVE_clean/2018-12067.sol | 132 ++ data_full/CVE_clean/2018-12068.sol | 132 ++ data_full/CVE_clean/2018-12070.sol | 144 ++ data_full/CVE_clean/2018-12078.sol | 107 ++ data_full/CVE_clean/2018-12079.sol | 132 ++ data_full/CVE_clean/2018-12080.sol | 123 ++ data_full/CVE_clean/2018-12081.sol | 132 ++ data_full/CVE_clean/2018-12082.sol | 125 ++ data_full/CVE_clean/2018-12083.sol | 76 + data_full/CVE_clean/2018-12084.sol | 108 ++ data_full/CVE_clean/2018-12230.sol | 90 ++ data_full/CVE_clean/2018-12454.sol | 123 ++ data_full/CVE_clean/2018-12511.sol | 132 ++ data_full/CVE_clean/2018-12702.sol | 73 + data_full/CVE_clean/2018-12703.sol | 73 + data_full/CVE_clean/2018-12885.sol | 617 ++++++++ data_full/CVE_clean/2018-12959.sol | 67 + data_full/CVE_clean/2018-12975.sol | 645 ++++++++ data_full/CVE_clean/2018-13041.sol | 115 ++ data_full/CVE_clean/2018-13068.sol | 91 ++ data_full/CVE_clean/2018-13069.sol | 128 ++ data_full/CVE_clean/2018-13070.sol | 122 ++ data_full/CVE_clean/2018-13071.sol | 171 +++ data_full/CVE_clean/2018-13072.sol | 125 ++ data_full/CVE_clean/2018-13073.sol | 131 ++ data_full/CVE_clean/2018-13074.sol | 112 ++ data_full/CVE_clean/2018-13075.sol | 142 ++ data_full/CVE_clean/2018-13076.sol | 125 ++ data_full/CVE_clean/2018-13077.sol | 128 ++ data_full/CVE_clean/2018-13078.sol | 107 ++ data_full/CVE_clean/2018-13079.sol | 128 ++ data_full/CVE_clean/2018-13080.sol | 107 ++ data_full/CVE_clean/2018-13081.sol | 127 ++ data_full/CVE_clean/2018-13082.sol | 133 ++ data_full/CVE_clean/2018-13083.sol | 113 ++ data_full/CVE_clean/2018-13084.sol | 123 ++ data_full/CVE_clean/2018-13085.sol | 140 ++ data_full/CVE_clean/2018-13086.sol | 130 ++ data_full/CVE_clean/2018-13087.sol | 124 ++ data_full/CVE_clean/2018-13088.sol | 128 ++ data_full/CVE_clean/2018-13089.sol | 126 ++ data_full/CVE_clean/2018-13090.sol | 128 ++ data_full/CVE_clean/2018-13091.sol | 111 ++ data_full/CVE_clean/2018-13092.sol | 89 ++ data_full/CVE_clean/2018-13113.sol | 77 + data_full/CVE_clean/2018-13126.sol | 151 ++ data_full/CVE_clean/2018-13127.sol | 126 ++ data_full/CVE_clean/2018-13128.sol | 138 ++ data_full/CVE_clean/2018-13129.sol | 152 ++ data_full/CVE_clean/2018-13131.sol | 178 +++ data_full/CVE_clean/2018-13132.sol | 249 +++ data_full/CVE_clean/2018-13144.sol | 65 + data_full/CVE_clean/2018-13189.sol | 171 +++ data_full/CVE_clean/2018-13202.sol | 140 ++ data_full/CVE_clean/2018-13208.sol | 131 ++ data_full/CVE_clean/2018-13220.sol | 132 ++ data_full/CVE_clean/2018-13221.sol | 155 ++ data_full/CVE_clean/2018-13225.sol | 137 ++ data_full/CVE_clean/2018-13227.sol | 131 ++ data_full/CVE_clean/2018-13228.sol | 131 ++ data_full/CVE_clean/2018-13230.sol | 131 ++ data_full/CVE_clean/2018-13325.sol | 129 ++ data_full/CVE_clean/2018-13326.sol | 77 + data_full/CVE_clean/2018-13327.sol | 71 + data_full/CVE_clean/2018-13493.sol | 191 +++ data_full/CVE_clean/2018-13533.sol | 160 ++ data_full/CVE_clean/2018-13625.sol | 218 +++ data_full/CVE_clean/2018-13670.sol | 82 + data_full/CVE_clean/2018-13695.sol | 173 +++ data_full/CVE_clean/2018-13698.sol | 53 + data_full/CVE_clean/2018-13703.sol | 217 +++ data_full/CVE_clean/2018-13722.sol | 209 +++ data_full/CVE_clean/2018-13777.sol | 89 ++ data_full/CVE_clean/2018-13778.sol | 115 ++ data_full/CVE_clean/2018-13779.sol | 137 ++ data_full/CVE_clean/2018-13782.sol | 131 ++ data_full/CVE_clean/2018-13783.sol | 149 ++ data_full/CVE_clean/2018-13836.sol | 92 ++ data_full/CVE_clean/2018-14001.sol | 130 ++ data_full/CVE_clean/2018-14002.sol | 60 + data_full/CVE_clean/2018-14003.sol | 109 ++ data_full/CVE_clean/2018-14004.sol | 204 +++ data_full/CVE_clean/2018-14005.sol | 164 ++ data_full/CVE_clean/2018-14006.sol | 202 +++ data_full/CVE_clean/2018-14063.sol | 106 ++ data_full/CVE_clean/2018-14084.sol | 141 ++ data_full/CVE_clean/2018-14085.sol | 132 ++ data_full/CVE_clean/2018-14086.sol | 85 ++ data_full/CVE_clean/2018-14087.sol | 128 ++ data_full/CVE_clean/2018-14089.sol | 145 ++ data_full/CVE_clean/2018-14576.sol | 114 ++ data_full/CVE_clean/2018-14715.sol | 502 ++++++ data_full/CVE_clean/2018-15552.sol | 73 + data_full/CVE_clean/2018-17050.sol | 107 ++ data_full/CVE_clean/2018-17071.sol | 42 + data_full/CVE_clean/2018-17111.sol | 72 + data_full/CVE_clean/2018-17877.sol | 267 ++++ data_full/CVE_clean/2018-17882.sol | 79 + data_full/CVE_clean/2018-17968.sol | 156 ++ data_full/CVE_clean/2018-17987.sol | 149 ++ data_full/CVE_clean/2018-18425.sol | 179 +++ data_full/CVE_clean/2018-18665.sol | 73 + data_full/CVE_clean/2018-19830.sol | 140 ++ data_full/CVE_clean/2018-19831.sol | 233 +++ data_full/CVE_clean/2018-19832.sol | 174 +++ data_full/CVE_clean/2018-19833.sol | 60 + data_full/CVE_clean/2018-19834.sol | 139 ++ data_full/CVE_clean/2019-15078.sol | 174 +++ data_full/CVE_clean/2019-15079.sol | 58 + data_full/CVE_clean/2019-15080.sol | 121 ++ data_full/CVE_clean/2020-17752.sol | 290 ++++ data_full/CVE_clean/2020-17753.sol | 350 +++++ data_full/CVE_clean/2020-35962.sol | 540 +++++++ data_full/CVE_clean/2021-3004.sol | 400 +++++ data_full/CVE_clean/2021-3006.sol | 540 +++++++ data_full/CVE_clean/2021-33403.sol | 196 +++ data_full/CVE_clean/2021-34270.sol | 128 ++ data_full/CVE_clean/2021-34272.sol | 133 ++ data_full/CVE_clean/2021-34273.sol | 80 + data_full/CVE_label/CVE2description.json | 564 +++++++ data_full/CVE_label/CVE2label.json | 21 + data_sample/CVE/2018-13071.sol | 231 +++ data_sample/CVE/2018-13072.sol | 168 +++ data_sample/CVE/2018-13073.sol | 175 +++ data_sample/CVE/2018-13074.sol | 227 +++ data_sample/CVE_clean/2018-13071.sol | 171 +++ data_sample/CVE_clean/2018-13072.sol | 125 ++ data_sample/CVE_clean/2018-13073.sol | 131 ++ data_sample/CVE_clean/2018-13074.sol | 112 ++ data_sample/CVE_label/CVE2description.json | 564 +++++++ data_sample/CVE_label/CVE2label.json | 21 + data_sample/prompts.py | 91 ++ requirements.txt | 10 + .../2018-13071.json | 23 + .../2018-13072.json | 23 + .../2018-13073.json | 23 + .../2018-13074.json | 23 + .../2018-13071.json | 1 + .../2018-13072.json | 1 + .../2018-13073.json | 35 + .../2018-13074.json | 35 + .../ranker_default/2018-13071.json | 1 + .../ranker_default/2018-13072.json | 1 + .../ranker_default/2018-13073.json | 38 + .../ranker_default/2018-13074.json | 38 + src/CS8903_Aditya_PAL_GPTLens_Demo.pdf | Bin 0 -> 797910 bytes src/Gradio_UI_Files/README.md | 9 + src/Gradio_UI_Files/UI Files/UI_gradio.py | 199 +++ .../UI Files/UI_static_gradio.py | 61 + src/Gradio_UI_Files/images/auditor_prompt.png | Bin 0 -> 131536 bytes .../images/auditor_reasoning.png | Bin 0 -> 73285 bytes src/Gradio_UI_Files/images/author.png | Bin 0 -> 28397 bytes src/Gradio_UI_Files/images/critic_prompt.png | Bin 0 -> 113250 bytes src/Gradio_UI_Files/images/criticism.png | Bin 0 -> 120923 bytes src/Gradio_UI_Files/images/developer.png | Bin 0 -> 47791 bytes src/Gradio_UI_Files/images/header.png | Bin 0 -> 126147 bytes src/Gradio_UI_Files/images/model.png | Bin 0 -> 668792 bytes src/Gradio_UI_Files/images/professor.png | Bin 0 -> 29489 bytes src/UI.py | 319 ++++ src/UI_demo.py | 411 +++++ src/environment_old.yml | 83 + .../CVE-2018-10299.json | 29 + .../CVE-2018-10376.json | 29 + .../CVE-2018-10666.json | 29 + .../CVE-2018-10705.json | 29 + .../CVE-2018-11335.json | 29 + .../CVE-2018-12025.json | 29 + .../CVE-2018-13836.json | 29 + .../CVE-2018-15552.json | 29 + .../CVE-2018-17877.json | 29 + .../CVE-2018-17882.json | 29 + .../CVE-2018-18425.json | 29 + .../CVE-2018-19830.json | 29 + .../CVE-2019-15078.json | 29 + .../CVE-2019-15079.json | 29 + .../CVE-2019-15080.json | 29 + .../CVE-2021-3004.json | 29 + .../CVE-2018-10299.json | 41 + .../CVE-2018-10376.json | 41 + .../CVE-2018-10666.json | 41 + .../CVE-2018-10705.json | 41 + .../CVE-2018-11335.json | 41 + .../CVE-2018-12025.json | 41 + .../CVE-2018-13836.json | 41 + .../CVE-2018-15552.json | 41 + .../CVE-2018-17877.json | 41 + .../CVE-2018-17882.json | 41 + .../CVE-2018-18425.json | 41 + .../CVE-2018-19830.json | 41 + .../CVE-2019-15078.json | 41 + .../CVE-2019-15079.json | 41 + .../CVE-2019-15080.json | 41 + .../CVE-2021-3004.json | 41 + .../2018-10706.json | 23 + .../2018-10944.json | 23 + .../2018-11239.json | 23 + .../2018-10706.json | 35 + .../2018-10944.json | 35 + .../2018-11239.json | 35 + .../ranker_default/2018-10706.json | 38 + .../ranker_default/2018-10944.json | 38 + .../ranker_default/2018-11239.json | 38 + .../CVE-2018-10299.json | 29 + .../CVE-2018-10376.json | 29 + .../CVE-2018-10468.json | 29 + .../CVE-2018-11411.json | 29 + .../CVE-2018-12025.json | 29 + .../CVE-2018-13836.json | 29 + .../CVE-2018-15552.json | 29 + .../CVE-2018-17877.json | 29 + .../CVE-2018-17882.json | 29 + src/model.py | 50 + src/pre_process.py | 41 + src/prompts.py | 91 ++ src/run_auditor.py | 115 ++ src/run_auditor_user_defined.py | 113 ++ src/run_critic.py | 105 ++ src/run_critic_user_defined.py | 106 ++ src/run_rank.py | 71 + src/utils.py | 19 + 388 files changed, 65213 insertions(+) create mode 100644 .devcontainer/devcontainer.json create mode 100644 .gitmodules create mode 100644 .streamlit/config.toml create mode 100644 GPTLens.pdf create mode 100644 README.md create mode 100644 data/CVE/2018-10706.sol create mode 100644 data/CVE/2018-10944.sol create mode 100644 data/CVE/2018-11239.sol create mode 100644 data/CVE_clean/2018-10706.sol create mode 100644 data/CVE_clean/2018-10944.sol create mode 100644 data/CVE_clean/2018-11239.sol create mode 100644 data/CVE_label/CVE2description.json create mode 100644 data/CVE_label/CVE2label.json create mode 100644 data_full/CVE/2018-10299.sol create mode 100644 data_full/CVE/2018-10376.sol create mode 100644 data_full/CVE/2018-10468.sol create mode 100644 data_full/CVE/2018-10666.sol create mode 100644 data_full/CVE/2018-10705.sol create mode 100644 data_full/CVE/2018-10706.sol create mode 100644 data_full/CVE/2018-10944.sol create mode 100644 data_full/CVE/2018-11239.sol create mode 100644 data_full/CVE/2018-11335.sol create mode 100644 data_full/CVE/2018-11411.sol create mode 100644 data_full/CVE/2018-11429.sol create mode 100644 data_full/CVE/2018-11446.sol create mode 100644 data_full/CVE/2018-11561.sol create mode 100644 data_full/CVE/2018-11687.sol create mode 100644 data_full/CVE/2018-12025-1.sol create mode 100644 data_full/CVE/2018-12025-2.sol create mode 100644 data_full/CVE/2018-12025-3.sol create mode 100644 data_full/CVE/2018-12062.sol create mode 100644 data_full/CVE/2018-12063.sol create mode 100644 data_full/CVE/2018-12067.sol create mode 100644 data_full/CVE/2018-12068.sol create mode 100644 data_full/CVE/2018-12070.sol create mode 100644 data_full/CVE/2018-12078.sol create mode 100644 data_full/CVE/2018-12079.sol create mode 100644 data_full/CVE/2018-12080.sol create mode 100644 data_full/CVE/2018-12081.sol create mode 100644 data_full/CVE/2018-12082.sol create mode 100644 data_full/CVE/2018-12083.sol create mode 100644 data_full/CVE/2018-12084.sol create mode 100644 data_full/CVE/2018-12230.sol create mode 100644 data_full/CVE/2018-12454.sol create mode 100644 data_full/CVE/2018-12511.sol create mode 100644 data_full/CVE/2018-12702.sol create mode 100644 data_full/CVE/2018-12703.sol create mode 100644 data_full/CVE/2018-12885.sol create mode 100644 data_full/CVE/2018-12959.sol create mode 100644 data_full/CVE/2018-12975.sol create mode 100644 data_full/CVE/2018-13041.sol create mode 100644 data_full/CVE/2018-13068.sol create mode 100644 data_full/CVE/2018-13069.sol create mode 100644 data_full/CVE/2018-13070.sol create mode 100644 data_full/CVE/2018-13071.sol create mode 100644 data_full/CVE/2018-13072.sol create mode 100644 data_full/CVE/2018-13073.sol create mode 100644 data_full/CVE/2018-13074.sol create mode 100644 data_full/CVE/2018-13075.sol create mode 100644 data_full/CVE/2018-13076.sol create mode 100644 data_full/CVE/2018-13077.sol create mode 100644 data_full/CVE/2018-13078.sol create mode 100644 data_full/CVE/2018-13079.sol create mode 100644 data_full/CVE/2018-13080.sol create mode 100644 data_full/CVE/2018-13081.sol create mode 100644 data_full/CVE/2018-13082.sol create mode 100644 data_full/CVE/2018-13083.sol create mode 100644 data_full/CVE/2018-13084.sol create mode 100644 data_full/CVE/2018-13085.sol create mode 100644 data_full/CVE/2018-13086.sol create mode 100644 data_full/CVE/2018-13087.sol create mode 100644 data_full/CVE/2018-13088.sol create mode 100644 data_full/CVE/2018-13089.sol create mode 100644 data_full/CVE/2018-13090.sol create mode 100644 data_full/CVE/2018-13091.sol create mode 100644 data_full/CVE/2018-13092.sol create mode 100644 data_full/CVE/2018-13113.sol create mode 100644 data_full/CVE/2018-13126.sol create mode 100644 data_full/CVE/2018-13127.sol create mode 100644 data_full/CVE/2018-13128.sol create mode 100644 data_full/CVE/2018-13129.sol create mode 100644 data_full/CVE/2018-13131.sol create mode 100644 data_full/CVE/2018-13132.sol create mode 100644 data_full/CVE/2018-13144.sol create mode 100644 data_full/CVE/2018-13189.sol create mode 100644 data_full/CVE/2018-13202.sol create mode 100644 data_full/CVE/2018-13208.sol create mode 100644 data_full/CVE/2018-13220.sol create mode 100644 data_full/CVE/2018-13221.sol create mode 100644 data_full/CVE/2018-13225.sol create mode 100644 data_full/CVE/2018-13227.sol create mode 100644 data_full/CVE/2018-13228.sol create mode 100644 data_full/CVE/2018-13230.sol create mode 100644 data_full/CVE/2018-13325.sol create mode 100644 data_full/CVE/2018-13326.sol create mode 100644 data_full/CVE/2018-13327.sol create mode 100644 data_full/CVE/2018-13493.sol create mode 100644 data_full/CVE/2018-13533.sol create mode 100644 data_full/CVE/2018-13625.sol create mode 100644 data_full/CVE/2018-13670.sol create mode 100644 data_full/CVE/2018-13695.sol create mode 100644 data_full/CVE/2018-13698.sol create mode 100644 data_full/CVE/2018-13703.sol create mode 100644 data_full/CVE/2018-13722.sol create mode 100644 data_full/CVE/2018-13777.sol create mode 100644 data_full/CVE/2018-13778.sol create mode 100644 data_full/CVE/2018-13779.sol create mode 100644 data_full/CVE/2018-13782.sol create mode 100644 data_full/CVE/2018-13783.sol create mode 100644 data_full/CVE/2018-13836.sol create mode 100644 data_full/CVE/2018-14001.sol create mode 100644 data_full/CVE/2018-14002.sol create mode 100644 data_full/CVE/2018-14003.sol create mode 100644 data_full/CVE/2018-14004.sol create mode 100644 data_full/CVE/2018-14005.sol create mode 100644 data_full/CVE/2018-14006.sol create mode 100644 data_full/CVE/2018-14063.sol create mode 100644 data_full/CVE/2018-14084.sol create mode 100644 data_full/CVE/2018-14085.sol create mode 100644 data_full/CVE/2018-14086.sol create mode 100644 data_full/CVE/2018-14087.sol create mode 100644 data_full/CVE/2018-14089.sol create mode 100644 data_full/CVE/2018-14576.sol create mode 100644 data_full/CVE/2018-14715.sol create mode 100644 data_full/CVE/2018-15552.sol create mode 100644 data_full/CVE/2018-17050.sol create mode 100644 data_full/CVE/2018-17071.sol create mode 100644 data_full/CVE/2018-17111.sol create mode 100644 data_full/CVE/2018-17877.sol create mode 100644 data_full/CVE/2018-17882.sol create mode 100644 data_full/CVE/2018-17968.sol create mode 100644 data_full/CVE/2018-17987.sol create mode 100644 data_full/CVE/2018-18425.sol create mode 100644 data_full/CVE/2018-18665.sol create mode 100644 data_full/CVE/2018-19830.sol create mode 100644 data_full/CVE/2018-19831.sol create mode 100644 data_full/CVE/2018-19832.sol create mode 100644 data_full/CVE/2018-19833.sol create mode 100644 data_full/CVE/2018-19834.sol create mode 100644 data_full/CVE/2019-15078.sol create mode 100644 data_full/CVE/2019-15079.sol create mode 100644 data_full/CVE/2019-15080.sol create mode 100644 data_full/CVE/2020-17752.sol create mode 100644 data_full/CVE/2020-17753.sol create mode 100644 data_full/CVE/2020-35962.sol create mode 100644 data_full/CVE/2021-3004.sol create mode 100644 data_full/CVE/2021-3006.sol create mode 100644 data_full/CVE/2021-33403.sol create mode 100644 data_full/CVE/2021-34270.sol create mode 100644 data_full/CVE/2021-34272.sol create mode 100644 data_full/CVE/2021-34273.sol create mode 100644 data_full/CVE_clean/2018-10299.sol create mode 100644 data_full/CVE_clean/2018-10376.sol create mode 100644 data_full/CVE_clean/2018-10468.sol create mode 100644 data_full/CVE_clean/2018-10666.sol create mode 100644 data_full/CVE_clean/2018-10705.sol create mode 100644 data_full/CVE_clean/2018-10706.sol create mode 100644 data_full/CVE_clean/2018-10944.sol create mode 100644 data_full/CVE_clean/2018-11239.sol create mode 100644 data_full/CVE_clean/2018-11335.sol create mode 100644 data_full/CVE_clean/2018-11411.sol create mode 100644 data_full/CVE_clean/2018-11429.sol create mode 100644 data_full/CVE_clean/2018-11446.sol create mode 100644 data_full/CVE_clean/2018-11561.sol create mode 100644 data_full/CVE_clean/2018-11687.sol create mode 100644 data_full/CVE_clean/2018-12025.sol create mode 100644 data_full/CVE_clean/2018-12062.sol create mode 100644 data_full/CVE_clean/2018-12063.sol create mode 100644 data_full/CVE_clean/2018-12067.sol create mode 100644 data_full/CVE_clean/2018-12068.sol create mode 100644 data_full/CVE_clean/2018-12070.sol create mode 100644 data_full/CVE_clean/2018-12078.sol create mode 100644 data_full/CVE_clean/2018-12079.sol create mode 100644 data_full/CVE_clean/2018-12080.sol create mode 100644 data_full/CVE_clean/2018-12081.sol create mode 100644 data_full/CVE_clean/2018-12082.sol create mode 100644 data_full/CVE_clean/2018-12083.sol create mode 100644 data_full/CVE_clean/2018-12084.sol create mode 100644 data_full/CVE_clean/2018-12230.sol create mode 100644 data_full/CVE_clean/2018-12454.sol create mode 100644 data_full/CVE_clean/2018-12511.sol create mode 100644 data_full/CVE_clean/2018-12702.sol create mode 100644 data_full/CVE_clean/2018-12703.sol create mode 100644 data_full/CVE_clean/2018-12885.sol create mode 100644 data_full/CVE_clean/2018-12959.sol create mode 100644 data_full/CVE_clean/2018-12975.sol create mode 100644 data_full/CVE_clean/2018-13041.sol create mode 100644 data_full/CVE_clean/2018-13068.sol create mode 100644 data_full/CVE_clean/2018-13069.sol create mode 100644 data_full/CVE_clean/2018-13070.sol create mode 100644 data_full/CVE_clean/2018-13071.sol create mode 100644 data_full/CVE_clean/2018-13072.sol create mode 100644 data_full/CVE_clean/2018-13073.sol create mode 100644 data_full/CVE_clean/2018-13074.sol create mode 100644 data_full/CVE_clean/2018-13075.sol create mode 100644 data_full/CVE_clean/2018-13076.sol create mode 100644 data_full/CVE_clean/2018-13077.sol create mode 100644 data_full/CVE_clean/2018-13078.sol create mode 100644 data_full/CVE_clean/2018-13079.sol create mode 100644 data_full/CVE_clean/2018-13080.sol create mode 100644 data_full/CVE_clean/2018-13081.sol create mode 100644 data_full/CVE_clean/2018-13082.sol create mode 100644 data_full/CVE_clean/2018-13083.sol create mode 100644 data_full/CVE_clean/2018-13084.sol create mode 100644 data_full/CVE_clean/2018-13085.sol create mode 100644 data_full/CVE_clean/2018-13086.sol create mode 100644 data_full/CVE_clean/2018-13087.sol create mode 100644 data_full/CVE_clean/2018-13088.sol create mode 100644 data_full/CVE_clean/2018-13089.sol create mode 100644 data_full/CVE_clean/2018-13090.sol create mode 100644 data_full/CVE_clean/2018-13091.sol create mode 100644 data_full/CVE_clean/2018-13092.sol create mode 100644 data_full/CVE_clean/2018-13113.sol create mode 100644 data_full/CVE_clean/2018-13126.sol create mode 100644 data_full/CVE_clean/2018-13127.sol create mode 100644 data_full/CVE_clean/2018-13128.sol create mode 100644 data_full/CVE_clean/2018-13129.sol create mode 100644 data_full/CVE_clean/2018-13131.sol create mode 100644 data_full/CVE_clean/2018-13132.sol create mode 100644 data_full/CVE_clean/2018-13144.sol create mode 100644 data_full/CVE_clean/2018-13189.sol create mode 100644 data_full/CVE_clean/2018-13202.sol create mode 100644 data_full/CVE_clean/2018-13208.sol create mode 100644 data_full/CVE_clean/2018-13220.sol create mode 100644 data_full/CVE_clean/2018-13221.sol create mode 100644 data_full/CVE_clean/2018-13225.sol create mode 100644 data_full/CVE_clean/2018-13227.sol create mode 100644 data_full/CVE_clean/2018-13228.sol create mode 100644 data_full/CVE_clean/2018-13230.sol create mode 100644 data_full/CVE_clean/2018-13325.sol create mode 100644 data_full/CVE_clean/2018-13326.sol create mode 100644 data_full/CVE_clean/2018-13327.sol create mode 100644 data_full/CVE_clean/2018-13493.sol create mode 100644 data_full/CVE_clean/2018-13533.sol create mode 100644 data_full/CVE_clean/2018-13625.sol create mode 100644 data_full/CVE_clean/2018-13670.sol create mode 100644 data_full/CVE_clean/2018-13695.sol create mode 100644 data_full/CVE_clean/2018-13698.sol create mode 100644 data_full/CVE_clean/2018-13703.sol create mode 100644 data_full/CVE_clean/2018-13722.sol create mode 100644 data_full/CVE_clean/2018-13777.sol create mode 100644 data_full/CVE_clean/2018-13778.sol create mode 100644 data_full/CVE_clean/2018-13779.sol create mode 100644 data_full/CVE_clean/2018-13782.sol create mode 100644 data_full/CVE_clean/2018-13783.sol create mode 100644 data_full/CVE_clean/2018-13836.sol create mode 100644 data_full/CVE_clean/2018-14001.sol create mode 100644 data_full/CVE_clean/2018-14002.sol create mode 100644 data_full/CVE_clean/2018-14003.sol create mode 100644 data_full/CVE_clean/2018-14004.sol create mode 100644 data_full/CVE_clean/2018-14005.sol create mode 100644 data_full/CVE_clean/2018-14006.sol create mode 100644 data_full/CVE_clean/2018-14063.sol create mode 100644 data_full/CVE_clean/2018-14084.sol create mode 100644 data_full/CVE_clean/2018-14085.sol create mode 100644 data_full/CVE_clean/2018-14086.sol create mode 100644 data_full/CVE_clean/2018-14087.sol create mode 100644 data_full/CVE_clean/2018-14089.sol create mode 100644 data_full/CVE_clean/2018-14576.sol create mode 100644 data_full/CVE_clean/2018-14715.sol create mode 100644 data_full/CVE_clean/2018-15552.sol create mode 100644 data_full/CVE_clean/2018-17050.sol create mode 100644 data_full/CVE_clean/2018-17071.sol create mode 100644 data_full/CVE_clean/2018-17111.sol create mode 100644 data_full/CVE_clean/2018-17877.sol create mode 100644 data_full/CVE_clean/2018-17882.sol create mode 100644 data_full/CVE_clean/2018-17968.sol create mode 100644 data_full/CVE_clean/2018-17987.sol create mode 100644 data_full/CVE_clean/2018-18425.sol create mode 100644 data_full/CVE_clean/2018-18665.sol create mode 100644 data_full/CVE_clean/2018-19830.sol create mode 100644 data_full/CVE_clean/2018-19831.sol create mode 100644 data_full/CVE_clean/2018-19832.sol create mode 100644 data_full/CVE_clean/2018-19833.sol create mode 100644 data_full/CVE_clean/2018-19834.sol create mode 100644 data_full/CVE_clean/2019-15078.sol create mode 100644 data_full/CVE_clean/2019-15079.sol create mode 100644 data_full/CVE_clean/2019-15080.sol create mode 100644 data_full/CVE_clean/2020-17752.sol create mode 100644 data_full/CVE_clean/2020-17753.sol create mode 100644 data_full/CVE_clean/2020-35962.sol create mode 100644 data_full/CVE_clean/2021-3004.sol create mode 100644 data_full/CVE_clean/2021-3006.sol create mode 100644 data_full/CVE_clean/2021-33403.sol create mode 100644 data_full/CVE_clean/2021-34270.sol create mode 100644 data_full/CVE_clean/2021-34272.sol create mode 100644 data_full/CVE_clean/2021-34273.sol create mode 100644 data_full/CVE_label/CVE2description.json create mode 100644 data_full/CVE_label/CVE2label.json create mode 100644 data_sample/CVE/2018-13071.sol create mode 100644 data_sample/CVE/2018-13072.sol create mode 100644 data_sample/CVE/2018-13073.sol create mode 100644 data_sample/CVE/2018-13074.sol create mode 100644 data_sample/CVE_clean/2018-13071.sol create mode 100644 data_sample/CVE_clean/2018-13072.sol create mode 100644 data_sample/CVE_clean/2018-13073.sol create mode 100644 data_sample/CVE_clean/2018-13074.sol create mode 100644 data_sample/CVE_label/CVE2description.json create mode 100644 data_sample/CVE_label/CVE2label.json create mode 100644 data_sample/prompts.py create mode 100644 requirements.txt create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json create mode 100644 results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json create mode 100644 src/CS8903_Aditya_PAL_GPTLens_Demo.pdf create mode 100644 src/Gradio_UI_Files/README.md create mode 100644 src/Gradio_UI_Files/UI Files/UI_gradio.py create mode 100644 src/Gradio_UI_Files/UI Files/UI_static_gradio.py create mode 100644 src/Gradio_UI_Files/images/auditor_prompt.png create mode 100644 src/Gradio_UI_Files/images/auditor_reasoning.png create mode 100644 src/Gradio_UI_Files/images/author.png create mode 100644 src/Gradio_UI_Files/images/critic_prompt.png create mode 100644 src/Gradio_UI_Files/images/criticism.png create mode 100644 src/Gradio_UI_Files/images/developer.png create mode 100644 src/Gradio_UI_Files/images/header.png create mode 100644 src/Gradio_UI_Files/images/model.png create mode 100644 src/Gradio_UI_Files/images/professor.png create mode 100644 src/UI.py create mode 100644 src/UI_demo.py create mode 100644 src/environment_old.yml create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10299.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10376.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10666.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10705.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-11335.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-12025.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-13836.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-15552.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-17877.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-17882.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-18425.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-19830.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15078.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15079.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15080.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2021-3004.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10299.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10376.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10666.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10705.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-11335.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-12025.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-13836.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-15552.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-17877.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-17882.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-18425.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-19830.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15078.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15079.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15080.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2021-3004.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10706.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10944.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-11239.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10706.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10944.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-11239.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10706.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10944.json create mode 100644 src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-11239.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10299.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10376.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10468.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-11411.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-12025.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-13836.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-15552.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17877.json create mode 100644 src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17882.json create mode 100644 src/model.py create mode 100644 src/pre_process.py create mode 100644 src/prompts.py create mode 100644 src/run_auditor.py create mode 100644 src/run_auditor_user_defined.py create mode 100644 src/run_critic.py create mode 100644 src/run_critic_user_defined.py create mode 100644 src/run_rank.py create mode 100644 src/utils.py diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..794dc2cd --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +{ + "name": "Python 3", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye", + "customizations": { + "codespaces": { + "openFiles": [ + "README.md", + "src\UI.py" + ] + }, + "vscode": { + "settings": {}, + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance" + ] + } + }, + "updateContentCommand": "[ -f packages.txt ] && sudo apt update && sudo apt upgrade -y && sudo xargs apt install -y 2tV3;|X0So|pBP$pl9ss?JrJbpvlckrb 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%0DVR=Jza@FQfX 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

    fkc(N+vvW@~6+=9HtGI(@GO6 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 00000000..8cee2a26 --- /dev/null +++ b/README.md @@ -0,0 +1,124 @@ + + +# GPTLens with Deepseek Reasoner + +This is a fork of the original [GPTLens repository](https://arxiv.org/pdf/2310.01152.pdf), which was presented in the paper "Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives" at the IEEE Trust, Privacy and Security (TPS) conference 2023. + +This fork modifies the original authors' work to include the use of Deepseek Reasoner for both the auditor and critic stages, improving the accuracy and precision of vulnerability detection in smart contracts. + +## Getting Started + +### Prerequisites + +1. Python 3.8+ environment +2. Deepseek API key + +### Installation + +```bash +# Clone the repository +git clone https://github.com/yourusername/GPTLens.git +cd GPTLens + +# Create and activate a virtual environment +python -m venv gptlens_env +source gptlens_env/bin/activate # On Windows: gptlens_env\Scripts\activate + +# Install dependencies +pip install -r requirements.txt +``` + +### Setting Up Your API Key + +Set your Deepseek API key in the environment: + +```bash +# On Linux/macOS +export DEEPSEEK_API_KEY="your-api-key-here" + +# On Windows +set DEEPSEEK_API_KEY=your-api-key-here +``` + +## Running the Vulnerability Detection Pipeline + +The vulnerability detection process consists of three stages: + +1. **Auditor**: Identifies potential vulnerabilities in smart contracts +2. **Critic**: Evaluates the vulnerabilities identified by the auditor +3. **Ranker**: Combines auditor and critic outputs to produce final vulnerability scores + +### Step 1: Run the Auditor + +```bash +python src/run_auditor.py --backend=deepseek-r1 --temperature=0.7 --topk=3 --num_auditor=1 --data_dir=data_full/CVE_clean +``` + +| Parameter | Description | +|-----------------|-----------------------------------------------------------------| +| `backend` | The model to use (deepseek-r1 maps to deepseek-reasoner) | +| `temperature` | Controls randomness (passed for compatibility) | +| `topk` | Number of vulnerabilities to identify per contract | +| `num_auditor` | Number of independent auditors to run | +| `data_dir` | Directory containing the smart contracts to analyze | + +### Step 2: Run the Critic + +```bash +python src/run_critic.py --backend=deepseek-r1 --temperature=0 --auditor_dir="auditor_deepseek-r1_0.7_top3_1" --num_critic=1 --shot=few +``` + +| Parameter | Description | +|---------------|-----------------------------------------------------------------| +| `backend` | The model to use (deepseek-r1 maps to deepseek-reasoner) | +| `temperature` | Controls randomness (0 for deterministic outputs) | +| `auditor_dir` | Directory containing auditor results | +| `num_critic` | Number of independent critics | +| `shot` | Whether to use few-shot or zero-shot prompting | + +### Step 3: Run the Ranker + +```bash +python src/run_rank.py --auditor_dir="auditor_deepseek-r1_0.7_top3_1" --critic_dir="critic_deepseek-r1_0_1_few" --strategy="default" +``` + +| Parameter | Description | +|---------------|-------------------------------------------------| +| `auditor_dir` | Directory containing auditor results | +| `critic_dir` | Directory containing critic results | +| `strategy` | Strategy for generating the final score | + +## Technical Notes + +1. **Model Mapping**: The command-line argument `deepseek-r1` is internally mapped to the Deepseek API model name `deepseek-reasoner`. + +2. **File Locations**: The smart contracts should be placed in the `data_full/CVE_clean/` directory. If your files are in a different location, use the `--data_dir` parameter to specify the correct path. + +3. **JSON Parsing Errors**: You may see "Expecting value" errors during the auditor stage. These are normal and occur when the model's output doesn't conform exactly to the expected JSON format. + +4. **Results Location**: The final results will be stored in the `src/logs/` directory, organized by auditor, critic, and ranker directories. + +## Troubleshooting + +- **API Key Issues**: Ensure your Deepseek API key is correctly set in the environment. +- **Missing Files**: If you encounter "File not found" errors, check that your smart contracts are in the correct directory. +- **Model Errors**: If you see "Model Not Exist" errors, ensure you're using the correct model name (`deepseek-r1`). + +## Benchmarking Results + +The original paper benchmarked GPT-4 on 13 CVE smart contracts. This fork extends that work by benchmarking Deepseek Reasoner on the same dataset. Our preliminary results show that Deepseek Reasoner performs competitively with GPT-4 while offering better cost efficiency. + +## Citation + +If you use this work in your research, please cite the original paper: + +``` +@misc{hu2023large, + title={Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives}, + author={Sihao Hu and Tiansheng Huang and Fatih İlhan and Selim Furkan Tekin and Ling Liu}, + year={2023}, + eprint={2310.01152}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} +``` \ No newline at end of file diff --git a/data/CVE/2018-10706.sol b/data/CVE/2018-10706.sol new file mode 100644 index 00000000..a3e3950c --- /dev/null +++ b/data/CVE/2018-10706.sol @@ -0,0 +1,404 @@ +pragma solidity ^0.4.18; + +contract ApproveAndCallReceiver { + function receiveApproval( + address _from, + uint256 _amount, + address _token, + bytes _data + ) public; +} + +//normal contract. already compiled as bin +contract Controlled { + modifier onlyController { + require(msg.sender == controller); + _; + } + address public controller; + + function Controlled() public { + controller = msg.sender; + } + + function changeController(address _newController) onlyController public { + controller = _newController; + } +} + + +contract ERC20Token { + + /// total amount of tokens + uint256 public totalSupply; + //function totalSupply() public constant returns (uint256 balance); + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + mapping (address => uint256) public balanceOf; + + // function balanceOf(address _owner) public constant returns (uint256 balance); + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) public returns (bool success); + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); + + /// @notice `msg.sender` approves `_spender` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of tokens to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) public returns (bool success); + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + mapping (address => mapping (address => uint256)) public allowance; + //function allowance(address _owner, address _spender) public constant returns (uint256 remaining); + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + +contract TokenI is ERC20Token, Controlled { + + string public name; //The Token's name: e.g. DigixDAO Tokens + uint8 public decimals; //Number of decimals of the smallest unit + string public symbol; //An identifier: e.g. REP + + + // ERC20 Methods + + /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on + /// its behalf, and then a function is triggered in the contract that is + /// being approved, `_spender`. This allows users to use their tokens to + /// interact with contracts in one function call instead of two + /// @param _spender The address of the contract able to transfer the tokens + /// @param _amount The amount of tokens to be approved for transfer + /// @return True if the function call was successful + function approveAndCall( + address _spender, + uint256 _amount, + bytes _extraData + ) public returns (bool success); + + + // Generate and destroy tokens + + /// @notice Generates `_amount` tokens that are assigned to `_owner` + /// @param _owner The address that will be assigned the new tokens + /// @param _amount The quantity of tokens generated + /// @return True if the tokens are generated correctly + function generateTokens(address _owner, uint _amount) public returns (bool); + + + /// @notice Burns `_amount` tokens from `_owner` + /// @param _owner The address that will lose the tokens + /// @param _amount The quantity of tokens to burn + /// @return True if the tokens are burned correctly + function destroyTokens(address _owner, uint _amount) public returns (bool); + +} + +contract Token is TokenI { + + struct FreezeInfo { + address user; + uint256 amount; + } + //Key1: step(募资阶段); Key2: user sequence(用户序列) + mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; //所有锁仓,key 使用序号向上增加,方便程序查询。 + mapping (uint8 => uint8) public lastFreezeSeq; //最后的 freezeOf 键值。key: step; value: sequence + mapping (address => uint256) public airdropOf;//空投用户 + + address public owner; + bool public paused=false;//是否暂停私募 + uint256 public minFunding = 1 ether; //最低起投额度 + uint256 public airdropQty=0;//每个账户空投获得的量 + uint256 public airdropTotalQty=0;//总共发放的空投代币数量 + uint256 public tokensPerEther = 10000;//1eth兑换多少代币 + address private vaultAddress;//存储众筹ETH的地址 + uint256 public totalCollected = 0;//已经募到ETH的总数量 + + /* This generates a public event on the blockchain that will notify clients */ + //event Transfer(address indexed from, address indexed to, uint256 value); + + /* This notifies clients about the amount burnt */ + event Burn(address indexed from, uint256 value); + + /* This notifies clients about the amount frozen */ + event Freeze(address indexed from, uint256 value); + + /* This notifies clients about the amount unfrozen */ + event Unfreeze(address indexed from, uint256 value); + + event Payment(address sender, uint256 _ethAmount, uint256 _tokenAmount); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function Token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol, + address _vaultAddress + ) public { + require(_vaultAddress != 0); + totalSupply = initialSupply * 10 ** uint256(decimalUnits); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + owner = msg.sender; + vaultAddress=_vaultAddress; + } + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + modifier realUser(address user){ + if(user == 0x0){ + revert(); + } + _; + } + + modifier moreThanZero(uint256 _value){ + if (_value <= 0){ + revert(); + } + _; + } + + /// @dev Internal function to determine if an address is a contract + /// @param _addr The address being queried + /// @return True if `_addr` is a contract + function isContract(address _addr) constant internal returns(bool) { + uint size; + if (_addr == 0) { + return false; + } + assembly { + size := extcodesize(_addr) + } + return size>0; + } + + /* Send coins */ + function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[msg.sender] = balanceOf[msg.sender] - _value; // Subtract from the sender + balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient + emit Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + return true; + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) moreThanZero(_value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * @notice `msg.sender` approves `_spender` to send `_amount` tokens on + * its behalf, and then a function is triggered in the contract that is + * being approved, `_spender`. This allows users to use their tokens to + * interact with contracts in one function call instead of two + * @param _spender The address of the contract able to transfer the tokens + * @param _amount The amount of tokens to be approved for transfer + * @return True if the function call was successful + */ + function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { + require(approve(_spender, _amount)); + ApproveAndCallReceiver(_spender).receiveApproval( + msg.sender, + _amount, + this, + _extraData + ); + + return true; + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the sender has enough + require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] = balanceOf[_from] - _value; // Subtract from the sender + balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient + allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; + emit Transfer(_from, _to, _value); + return true; + } + + function transferMulti(address[] _to, uint256[] _value) public returns (uint256 amount){ + require(_to.length == _value.length); + uint8 len = uint8(_to.length); + for(uint8 j; j= amount); + for(uint8 i; i= _value); + balanceOf[_user] = balanceOf[_user] - _value; + freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); + lastFreezeSeq[_step]++; + emit Freeze(_user, _value); + return true; + } + + + //为用户解锁账户资金 + function unFreeze(uint8 _step) onlyOwner public returns (bool unlockOver) { + //_end = length of freezeOf[_step] + uint8 _end = lastFreezeSeq[_step]; + require(_end > 0); + unlockOver=false; + uint8 _start=0; + for(; _end>_start; _end--){ + FreezeInfo storage fInfo = freezeOf[_step][_end-1]; + uint256 _amount = fInfo.amount; + balanceOf[fInfo.user] += _amount; + delete freezeOf[_step][_end-1]; + lastFreezeSeq[_step]--; + emit Unfreeze(fInfo.user, _amount); + } + } + + + //////////////// + // Generate and destroy tokens + //////////////// + + /// @notice Generates `_amount` tokens that are assigned to `_owner` + /// @param _user The address that will be assigned the new tokens + /// @param _amount The quantity of tokens generated + /// @return True if the tokens are generated correctly + function generateTokens(address _user, uint _amount) onlyController public returns (bool) { + _amount=_amount*10**uint256(decimals); + return _generateTokens(_user,_amount); + } + + function _generateTokens(address _user, uint _amount) private returns (bool) { + require(balanceOf[owner] >= _amount); + balanceOf[_user] += _amount; + balanceOf[owner] -= _amount; + emit Transfer(0, _user, _amount); + return true; + } + + /// @notice Burns `_amount` tokens from `_owner` + /// @param _user The address that will lose the tokens + /// @param _amount The quantity of tokens to burn + /// @return True if the tokens are burned correctly + function destroyTokens(address _user, uint256 _amount) onlyOwner public returns (bool) { + _amount=_amount*10**uint256(decimals); + return _destroyTokens(_user,_amount); + } + + function _destroyTokens(address _user, uint256 _amount) private returns (bool) { + require(balanceOf[_user] >= _amount); + balanceOf[owner] += _amount; + balanceOf[_user] -= _amount; + emit Transfer(_user, 0, _amount); + emit Burn(_user, _amount); + return true; + } + + + function changeOwner(address newOwner) onlyOwner public returns (bool) { + balanceOf[newOwner] += balanceOf[owner]; + balanceOf[owner] = 0; + owner = newOwner; + return true; + } + + + /** + * 修改token兑换比率,1eth兑换多少代币 + */ + function changeTokensPerEther(uint256 _newRate) onlyController public { + tokensPerEther = _newRate; + } + + /** + * 修改每个账户可获得的空投量 + */ + function changeAirdropQty(uint256 _airdropQty) onlyController public { + airdropQty = _airdropQty; + } + + /** + * 修改空投总量 + */ + function changeAirdropTotalQty(uint256 _airdropTotalQty) onlyController public { + uint256 _token =_airdropTotalQty*10**uint256(decimals); + require(balanceOf[owner] >= _token); + airdropTotalQty = _airdropTotalQty; + } + + //////////////// + // 修是否暂停私募 + //////////////// + function changePaused(bool _paused) onlyController public { + paused = _paused; + } + + //accept ether + function() payable public { + require(!paused); + address _user=msg.sender; + uint256 tokenValue; + if(msg.value==0){//空投 + require(airdropQty>0); + require(airdropTotalQty>=airdropQty); + require(airdropOf[_user]==0); + tokenValue=airdropQty*10**uint256(decimals); + airdropOf[_user]=tokenValue; + airdropTotalQty-=airdropQty; + require(_generateTokens(_user, tokenValue)); + emit Payment(_user, msg.value, tokenValue); + }else{ + require(msg.value >= minFunding);//最低起投 + require(msg.value % 1 ether==0);//只能投整数倍eth + totalCollected +=msg.value; + require(vaultAddress.send(msg.value));//Send the ether to the vault + tokenValue = (msg.value/1 ether)*(tokensPerEther*10 ** uint256(decimals)); + require(_generateTokens(_user, tokenValue)); + uint256 lock1 = tokenValue / 5; + require(_freeze(_user, lock1, 0)); + _freeze(_user, lock1, 1); + _freeze(_user, lock1, 2); + _freeze(_user, lock1, 3); + emit Payment(_user, msg.value, tokenValue); + } + } +} diff --git a/data/CVE/2018-10944.sol b/data/CVE/2018-10944.sol new file mode 100644 index 00000000..4abed958 --- /dev/null +++ b/data/CVE/2018-10944.sol @@ -0,0 +1,1344 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-01 +*/ + +pragma solidity ^0.4.8; + + + +// +/* +Copyright (c) 2015-2016 Oraclize SRL +Copyright (c) 2016 Oraclize LTD + + + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + + + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + + + +contract OraclizeI { + address public cbAddress; + function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); + function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); + function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); + function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); + function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); + function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); + function getPrice(string _datasource) returns (uint _dsprice); + function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); + function useCoupon(string _coupon); + function setProofType(byte _proofType); + function setConfig(bytes32 _config); + function setCustomGasPrice(uint _gasPrice); + function randomDS_getSessionPubKeyHash() returns(bytes32); +} +contract OraclizeAddrResolverI { + function getAddress() returns (address _addr); +} +contract usingOraclize { + uint constant day = 60*60*24; + uint constant week = 60*60*24*7; + uint constant month = 60*60*24*30; + byte constant proofType_NONE = 0x00; + byte constant proofType_TLSNotary = 0x10; + byte constant proofType_Android = 0x20; + byte constant proofType_Ledger = 0x30; + byte constant proofType_Native = 0xF0; + byte constant proofStorage_IPFS = 0x01; + uint8 constant networkID_auto = 0; + uint8 constant networkID_mainnet = 1; + uint8 constant networkID_testnet = 2; + uint8 constant networkID_morden = 2; + uint8 constant networkID_consensys = 161; + + OraclizeAddrResolverI OAR; + + OraclizeI oraclize; + modifier oraclizeAPI { + if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); + oraclize = OraclizeI(OAR.getAddress()); + _; + } + modifier coupon(string code){ + oraclize = OraclizeI(OAR.getAddress()); + oraclize.useCoupon(code); + _; + } + + function oraclize_setNetwork(uint8 networkID) internal returns(bool){ + if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet + OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); + oraclize_setNetworkName("eth_mainnet"); + return true; + } + if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet + OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); + oraclize_setNetworkName("eth_ropsten3"); + return true; + } + if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet + OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); + oraclize_setNetworkName("eth_kovan"); + return true; + } + if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet + OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); + oraclize_setNetworkName("eth_rinkeby"); + return true; + } + if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge + OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); + return true; + } + if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide + OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); + return true; + } + if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity + OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); + return true; + } + return false; + } + + function __callback(bytes32 myid, string result) { + __callback(myid, result, new bytes(0)); + } + function __callback(bytes32 myid, string result, bytes proof) { + } + + function oraclize_useCoupon(string code) oraclizeAPI internal { + oraclize.useCoupon(code); + } + + function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ + return oraclize.getPrice(datasource); + } + + function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ + return oraclize.getPrice(datasource, gaslimit); + } + + function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + return oraclize.query.value(price)(0, datasource, arg); + } + function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + return oraclize.query.value(price)(timestamp, datasource, arg); + } + function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); + } + function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); + } + function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + return oraclize.query2.value(price)(0, datasource, arg1, arg2); + } + function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); + } + function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); + } + function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); + } + function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + bytes memory args = stra2cbor(argN); + return oraclize.queryN.value(price)(0, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + bytes memory args = stra2cbor(argN); + return oraclize.queryN.value(price)(timestamp, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + bytes memory args = stra2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); + } + function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + bytes memory args = stra2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); + } + function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + bytes memory args = ba2cbor(argN); + return oraclize.queryN.value(price)(0, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + bytes memory args = ba2cbor(argN); + return oraclize.queryN.value(price)(timestamp, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + bytes memory args = ba2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); + } + function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + bytes memory args = ba2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); + } + function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_cbAddress() oraclizeAPI internal returns (address){ + return oraclize.cbAddress(); + } + function oraclize_setProof(byte proofP) oraclizeAPI internal { + return oraclize.setProofType(proofP); + } + function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { + return oraclize.setCustomGasPrice(gasPrice); + } + function oraclize_setConfig(bytes32 config) oraclizeAPI internal { + return oraclize.setConfig(config); + } + + function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ + return oraclize.randomDS_getSessionPubKeyHash(); + } + + function getCodeSize(address _addr) constant internal returns(uint _size) { + assembly { + _size := extcodesize(_addr) + } + } + + function parseAddr(string _a) internal returns (address){ + bytes memory tmp = bytes(_a); + uint160 iaddr = 0; + uint160 b1; + uint160 b2; + for (uint i=2; i<2+2*20; i+=2){ + iaddr *= 256; + b1 = uint160(tmp[i]); + b2 = uint160(tmp[i+1]); + if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; + else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; + else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; + if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; + else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; + else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; + iaddr += (b1*16+b2); + } + return address(iaddr); + } + + function strCompare(string _a, string _b) internal returns (int) { + bytes memory a = bytes(_a); + bytes memory b = bytes(_b); + uint minLength = a.length; + if (b.length < minLength) minLength = b.length; + for (uint i = 0; i < minLength; i ++) + if (a[i] < b[i]) + return -1; + else if (a[i] > b[i]) + return 1; + if (a.length < b.length) + return -1; + else if (a.length > b.length) + return 1; + else + return 0; + } + + function indexOf(string _haystack, string _needle) internal returns (int) { + bytes memory h = bytes(_haystack); + bytes memory n = bytes(_needle); + if(h.length < 1 || n.length < 1 || (n.length > h.length)) + return -1; + else if(h.length > (2**128 -1)) + return -1; + else + { + uint subindex = 0; + for (uint i = 0; i < h.length; i ++) + { + if (h[i] == n[0]) + { + subindex = 1; + while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) + { + subindex++; + } + if(subindex == n.length) + return int(i); + } + } + return -1; + } + } + + function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { + bytes memory _ba = bytes(_a); + bytes memory _bb = bytes(_b); + bytes memory _bc = bytes(_c); + bytes memory _bd = bytes(_d); + bytes memory _be = bytes(_e); + string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); + bytes memory babcde = bytes(abcde); + uint k = 0; + for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; + for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; + for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; + for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; + for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; + return string(babcde); + } + + function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { + return strConcat(_a, _b, _c, _d, ""); + } + + function strConcat(string _a, string _b, string _c) internal returns (string) { + return strConcat(_a, _b, _c, "", ""); + } + + function strConcat(string _a, string _b) internal returns (string) { + return strConcat(_a, _b, "", "", ""); + } + + // parseInt + function parseInt(string _a) internal returns (uint) { + return parseInt(_a, 0); + } + + // parseInt(parseFloat*10^_b) + function parseInt(string _a, uint _b) internal returns (uint) { + bytes memory bresult = bytes(_a); + uint mint = 0; + bool decimals = false; + for (uint i=0; i= 48)&&(bresult[i] <= 57)){ + if (decimals){ + if (_b == 0) break; + else _b--; + } + mint *= 10; + mint += uint(bresult[i]) - 48; + } else if (bresult[i] == 46) decimals = true; + } + if (_b > 0) mint *= 10**_b; + return mint; + } + + function uint2str(uint i) internal returns (string){ + if (i == 0) return "0"; + uint j = i; + uint len; + while (j != 0){ + len++; + j /= 10; + } + bytes memory bstr = new bytes(len); + uint k = len - 1; + while (i != 0){ + bstr[k--] = byte(48 + i % 10); + i /= 10; + } + return string(bstr); + } + + function stra2cbor(string[] arr) internal returns (bytes) { + uint arrlen = arr.length; + + // get correct cbor output length + uint outputlen = 0; + bytes[] memory elemArray = new bytes[](arrlen); + for (uint i = 0; i < arrlen; i++) { + elemArray[i] = (bytes(arr[i])); + outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types + } + uint ctr = 0; + uint cborlen = arrlen + 0x80; + outputlen += byte(cborlen).length; + bytes memory res = new bytes(outputlen); + + while (byte(cborlen).length > ctr) { + res[ctr] = byte(cborlen)[ctr]; + ctr++; + } + for (i = 0; i < arrlen; i++) { + res[ctr] = 0x5F; + ctr++; + for (uint x = 0; x < elemArray[i].length; x++) { + // if there's a bug with larger strings, this may be the culprit + if (x % 23 == 0) { + uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; + elemcborlen += 0x40; + uint lctr = ctr; + while (byte(elemcborlen).length > ctr - lctr) { + res[ctr] = byte(elemcborlen)[ctr - lctr]; + ctr++; + } + } + res[ctr] = elemArray[i][x]; + ctr++; + } + res[ctr] = 0xFF; + ctr++; + } + return res; + } + + function ba2cbor(bytes[] arr) internal returns (bytes) { + uint arrlen = arr.length; + + // get correct cbor output length + uint outputlen = 0; + bytes[] memory elemArray = new bytes[](arrlen); + for (uint i = 0; i < arrlen; i++) { + elemArray[i] = (bytes(arr[i])); + outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types + } + uint ctr = 0; + uint cborlen = arrlen + 0x80; + outputlen += byte(cborlen).length; + bytes memory res = new bytes(outputlen); + + while (byte(cborlen).length > ctr) { + res[ctr] = byte(cborlen)[ctr]; + ctr++; + } + for (i = 0; i < arrlen; i++) { + res[ctr] = 0x5F; + ctr++; + for (uint x = 0; x < elemArray[i].length; x++) { + // if there's a bug with larger strings, this may be the culprit + if (x % 23 == 0) { + uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; + elemcborlen += 0x40; + uint lctr = ctr; + while (byte(elemcborlen).length > ctr - lctr) { + res[ctr] = byte(elemcborlen)[ctr - lctr]; + ctr++; + } + } + res[ctr] = elemArray[i][x]; + ctr++; + } + res[ctr] = 0xFF; + ctr++; + } + return res; + } + + + string oraclize_network_name; + function oraclize_setNetworkName(string _network_name) internal { + oraclize_network_name = _network_name; + } + + function oraclize_getNetworkName() internal returns (string) { + return oraclize_network_name; + } + + function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ + if ((_nbytes == 0)||(_nbytes > 32)) throw; + bytes memory nbytes = new bytes(1); + nbytes[0] = byte(_nbytes); + bytes memory unonce = new bytes(32); + bytes memory sessionKeyHash = new bytes(32); + bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); + assembly { + mstore(unonce, 0x20) + mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) + mstore(sessionKeyHash, 0x20) + mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) + } + bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; + bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit); + oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); + return queryId; + } + + function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { + oraclize_randomDS_args[queryId] = commitment; + } + + mapping(bytes32=>bytes32) oraclize_randomDS_args; + mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; + + function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ + bool sigok; + address signer; + + bytes32 sigr; + bytes32 sigs; + + bytes memory sigr_ = new bytes(32); + uint offset = 4+(uint(dersig[3]) - 0x20); + sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); + bytes memory sigs_ = new bytes(32); + offset += 32 + 2; + sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); + + assembly { + sigr := mload(add(sigr_, 32)) + sigs := mload(add(sigs_, 32)) + } + + + (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); + if (address(sha3(pubkey)) == signer) return true; + else { + (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); + return (address(sha3(pubkey)) == signer); + } + } + + function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { + bool sigok; + + // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) + bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); + copyBytes(proof, sig2offset, sig2.length, sig2, 0); + + bytes memory appkey1_pubkey = new bytes(64); + copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); + + bytes memory tosign2 = new bytes(1+65+32); + tosign2[0] = 1; //role + copyBytes(proof, sig2offset-65, 65, tosign2, 1); + bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c"; + copyBytes(CODEHASH, 0, 32, tosign2, 1+65); + sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); + + if (sigok == false) return false; + + + // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) + bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4"; + + bytes memory tosign3 = new bytes(1+65); + tosign3[0] = 0xFE; + copyBytes(proof, 3, 65, tosign3, 1); + + bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); + copyBytes(proof, 3+65, sig3.length, sig3, 0); + + sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); + + return sigok; + } + + modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { + // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) + if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) throw; + + bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); + if (proofVerified == false) throw; + + _; + } + + function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ + bool match_ = true; + + for (var i=0; i + + +contract ERC20 { + + uint public totalSupply; + + function balanceOf(address who) constant returns (uint256); + + function allowance(address owner, address spender) constant returns (uint); + + function transferFrom(address from, address to, uint value) returns (bool ok); + + function approve(address spender, uint value) returns (bool ok); + + function transfer(address to, uint value) returns (bool ok); + + function convert(uint _value) returns (bool ok); + + event Transfer(address indexed from, address indexed to, uint value); + + event Approval(address indexed owner, address indexed spender, uint value); + +} + + contract ICO is ERC20,usingOraclize + +{ + + address[] public addresses ; + + // Name of the token + string public constant name = "ROC"; + + // Symbol of token + string public constant symbol = "ROC"; + uint8 public constant decimals = 10; // decimal places + + mapping(address => address) public userStructs; + + + bytes32 myid_; + + mapping(bytes32=>bytes32) myidList; + + uint public totalSupply = 5000000 *10000000000 ; + + mapping(address => uint) balances; + + mapping (address => mapping (address => uint)) allowed; + + address owner; + + + uint one_ether_usd_price; + + enum State {created , gotapidata,wait} + State state; + + uint256 ether_profit; + + uint256 profit_per_token; + + uint256 holder_token_balance; + + uint256 holder_profit; + + event Message(uint256 holder_profit); + + + // Functions with this modifier can only be executed by the owner + modifier onlyOwner() { + if (msg.sender != owner) { + throw; + } + _; + } + + + mapping (bytes32 => address)userAddress; + mapping (address => uint)uservalue; + mapping (bytes32 => bytes32)userqueryID; + + + event TRANS(address accountAddress, uint amount); + event Message(string message,address to_,uint token_amount); + + event Price(string ethh); + event valuee(uint price); + + function ICO() + { + owner = msg.sender; + balances[owner] = totalSupply; + + } + + + function() payable { + + + TRANS(msg.sender, msg.value); // fire event + + if(msg.sender != owner) + { + // kraken api + // oraclize_query(5, "URL", "json(https://api.kraken.com/0/public/Ticker?pair=ETHUSD).result.XETHZUSD.c.0"); + + bytes32 ID = oraclize_query("URL","json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD"); + + + userAddress[ID]=msg.sender; + uservalue[msg.sender]=msg.value; + userqueryID[ID]=ID; + } + + else if(msg.sender ==owner){ + + ether_profit = msg.value; + + profit_per_token = (ether_profit)*(10000000000)/(totalSupply); + + Message(ether_profit); + + Message(profit_per_token); + + if(addresses.length >0) + { + for (uint i = 0; i < addresses.length; i++) { + + if(addresses[i] !=owner) + { + request_dividend(addresses[i]); + } + + } + } + + } + + + // transfer(msg.sender,no_of_token); + } + + function __callback(bytes32 myid, string result) { + if (msg.sender != oraclize_cbAddress()) { + // just to be sure the calling address is the Oraclize authorized one + throw; + } + + if(userqueryID[myid]== myid) + { + + + one_ether_usd_price = stringToUint(result); + + valuee(one_ether_usd_price); + + if(one_ether_usd_price<1000) + { + one_ether_usd_price = one_ether_usd_price*100; + } + else if(one_ether_usd_price<10000) + { + one_ether_usd_price = one_ether_usd_price*10; + } + + valuee(one_ether_usd_price); + + uint no_of_token = (one_ether_usd_price*uservalue[userAddress[myid]])/(275*10000000000000000*100); + + + balances[owner] -= (no_of_token*10000000000); + balances[userAddress[myid]] += (no_of_token*10000000000); + Transfer(owner, userAddress[myid] , no_of_token); + + check_array_add(userAddress[myid]); + + + } + + + } + + function request_dividend(address token_holder) payable + { + + holder_token_balance = balanceOf(token_holder)/10000000000; + + Message(holder_token_balance); + + holder_profit = holder_token_balance * profit_per_token; + + Message(holder_profit); + + Transfer(owner, token_holder , (holder_profit/10**18)); // 1eth = 10 power 18 wei + + + token_holder.send(holder_profit); + + } + + function balanceOf(address sender) constant returns (uint256 balance) { + + return balances[sender]; + } + + // Transfer the balance from owner's account to another account + function transfer(address _to, uint256 _amount) returns (bool success) { + if (balances[msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + + check_array_add(_to); + + return true; + } else { + return false; + } + } + + function check_array_add(address _to) + { + if(addresses.length >0) + { + if(userStructs[_to] != _to) + { + userStructs[_to]= _to; + addresses.push(_to); + } + } + else + { + userStructs[_to]= _to; + addresses.push(_to); + } + } + + + // Send _value amount of tokens from address _from to address _to + // The transferFrom method is used for a withdraw workflow, allowing contracts to send + // tokens on your behalf, for example to "deposit" to a contract address and/or to charge + // fees in sub-currencies; the command should fail unless the _from account has + // deliberately authorized the sender of the message via some mechanism; we propose + // these standardized APIs for approval: + + function transferFrom( + address _from, + address _to, + uint256 _amount + ) returns (bool success) { + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + + // Allow _spender to withdraw from your account, multiple times, up to the _value amount. + // If this function is called again it overwrites the current allowance with _value. + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + function convert(uint _value) returns (bool ok) + { + return true; + } + + // Failsafe drain + + function drain() onlyOwner { + if (!owner.send(this.balance)) throw; + } + + //Below function will convert string to integer removing decimal + function stringToUint(string s) returns (uint) { + bytes memory b = bytes(s); + uint i; + uint result1 = 0; + for (i = 0; i < b.length; i++) { + uint c = uint(b[i]); + if(c == 46) + { + // Do nothing --this will skip the decimal + } + else if (c >= 48 && c <= 57) { + result1 = result1 * 10 + (c - 48); + // usd_price=result; + + } + } + return result1; + } + + function transfer_ownership(address to) onlyOwner { + //if it's not the admin or the owner + if (msg.sender != owner) throw; + owner = to; + balances[owner]=balances[msg.sender]; + balances[msg.sender]=0; + } + + +} \ No newline at end of file diff --git a/data/CVE/2018-11239.sol b/data/CVE/2018-11239.sol new file mode 100644 index 00000000..33fd39a0 --- /dev/null +++ b/data/CVE/2018-11239.sol @@ -0,0 +1,102 @@ +pragma solidity ^0.4.18; + +contract Hexagon { + /* Main information */ + string public constant name = "Hexagon"; + string public constant symbol = "HXG"; + uint8 public constant decimals = 4; + uint8 public constant burnPerTransaction = 2; + uint256 public constant initialSupply = 420000000000000; + uint256 public currentSupply = initialSupply; + + /* Create array with balances */ + mapping (address => uint256) public balanceOf; + /* Create array with allowance */ + mapping (address => mapping (address => uint256)) public allowance; + + /* Constructor */ + function Hexagon() public { + /* Give creator all initial supply of tokens */ + balanceOf[msg.sender] = initialSupply; + } + + /* PUBLIC */ + /* Send tokens */ + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + + return true; + } + + /* Return current supply */ + function totalSupply() public constant returns (uint) { + return currentSupply; + } + + /* Burn tokens */ + function burn(uint256 _value) public returns (bool success) { + /* Check if the sender has enough */ + require(balanceOf[msg.sender] >= _value); + /* Subtract from the sender */ + balanceOf[msg.sender] -= _value; + /* Send to the black hole */ + balanceOf[0x0] += _value; + /* Update current supply */ + currentSupply -= _value; + /* Notify network */ + Burn(msg.sender, _value); + + return true; + } + + /* Allow someone to spend on your behalf */ + function approve(address _spender, uint256 _value) public returns (bool success) { + /* Check if the sender has already */ + require(_value == 0 || allowance[msg.sender][_spender] == 0); + /* Add to allowance */ + allowance[msg.sender][_spender] = _value; + /* Notify network */ + Approval(msg.sender, _spender, _value); + + return true; + } + + /* Transfer tokens from allowance */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + /* Prevent transfer of not allowed tokens */ + require(allowance[_from][msg.sender] >= _value); + /* Remove tokens from allowance */ + allowance[_from][msg.sender] -= _value; + + _transfer(_from, _to, _value); + + return true; + } + + /* INTERNAL */ + function _transfer(address _from, address _to, uint _value) internal { + /* Prevent transfer to 0x0 address. Use burn() instead */ + require (_to != 0x0); + /* Check if the sender has enough */ + require (balanceOf[_from] >= _value + burnPerTransaction); + /* Check for overflows */ + require (balanceOf[_to] + _value > balanceOf[_to]); + /* Subtract from the sender */ + balanceOf[_from] -= _value + burnPerTransaction; + /* Add the same to the recipient */ + balanceOf[_to] += _value; + /* Apply transaction fee */ + balanceOf[0x0] += burnPerTransaction; + /* Update current supply */ + currentSupply -= burnPerTransaction; + /* Notify network */ + Burn(_from, burnPerTransaction); + /* Notify network */ + Transfer(_from, _to, _value); + } + + /* Events */ + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} \ No newline at end of file diff --git a/data/CVE_clean/2018-10706.sol b/data/CVE_clean/2018-10706.sol new file mode 100644 index 00000000..92fd90d2 --- /dev/null +++ b/data/CVE_clean/2018-10706.sol @@ -0,0 +1,252 @@ +pragma solidity ^0.4.18; +contract ApproveAndCallReceiver { + function receiveApproval( + address _from, + uint256 _amount, + address _token, + bytes _data + ) public; +} +contract Controlled { + modifier onlyController { + require(msg.sender == controller); + _; + } + address public controller; + function Controlled() public { + controller = msg.sender; + } + function changeController(address _newController) onlyController public { + controller = _newController; + } +} +contract ERC20Token { + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + function transfer(address _to, uint256 _value) public returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); + function approve(address _spender, uint256 _value) public returns (bool success); + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract TokenI is ERC20Token, Controlled { + string public name; + uint8 public decimals; + string public symbol; + function approveAndCall( + address _spender, + uint256 _amount, + bytes _extraData + ) public returns (bool success); + function generateTokens(address _owner, uint _amount) public returns (bool); + function destroyTokens(address _owner, uint _amount) public returns (bool); +} +contract Token is TokenI { + struct FreezeInfo { + address user; + uint256 amount; + } + mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; + mapping (uint8 => uint8) public lastFreezeSeq; + mapping (address => uint256) public airdropOf; + address public owner; + bool public paused=false; + uint256 public minFunding = 1 ether; + uint256 public airdropQty=0; + uint256 public airdropTotalQty=0; + uint256 public tokensPerEther = 10000; + address private vaultAddress; + uint256 public totalCollected = 0; + event Burn(address indexed from, uint256 value); + event Freeze(address indexed from, uint256 value); + event Unfreeze(address indexed from, uint256 value); + event Payment(address sender, uint256 _ethAmount, uint256 _tokenAmount); + function Token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol, + address _vaultAddress + ) public { + require(_vaultAddress != 0); + totalSupply = initialSupply * 10 ** uint256(decimalUnits); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + owner = msg.sender; + vaultAddress=_vaultAddress; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + modifier realUser(address user){ + if(user == 0x0){ + revert(); + } + _; + } + modifier moreThanZero(uint256 _value){ + if (_value <= 0){ + revert(); + } + _; + } + function isContract(address _addr) constant internal returns(bool) { + uint size; + if (_addr == 0) { + return false; + } + assembly { + size := extcodesize(_addr) + } + return size>0; + } + function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { + require(balanceOf[msg.sender] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[msg.sender] = balanceOf[msg.sender] - _value; + balanceOf[_to] = balanceOf[_to] + _value; + emit Transfer(msg.sender, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) moreThanZero(_value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { + require(approve(_spender, _amount)); + ApproveAndCallReceiver(_spender).receiveApproval( + msg.sender, + _amount, + this, + _extraData + ); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] = balanceOf[_from] - _value; + balanceOf[_to] = balanceOf[_to] + _value; + allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; + emit Transfer(_from, _to, _value); + return true; + } + function transferMulti(address[] _to, uint256[] _value) public returns (uint256 amount){ + require(_to.length == _value.length); + uint8 len = uint8(_to.length); + for(uint8 j; j= amount); + for(uint8 i; i= _value); + balanceOf[_user] = balanceOf[_user] - _value; + freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); + lastFreezeSeq[_step]++; + emit Freeze(_user, _value); + return true; + } + function unFreeze(uint8 _step) onlyOwner public returns (bool unlockOver) { + uint8 _end = lastFreezeSeq[_step]; + require(_end > 0); + unlockOver=false; + uint8 _start=0; + for(; _end>_start; _end--){ + FreezeInfo storage fInfo = freezeOf[_step][_end-1]; + uint256 _amount = fInfo.amount; + balanceOf[fInfo.user] += _amount; + delete freezeOf[_step][_end-1]; + lastFreezeSeq[_step]--; + emit Unfreeze(fInfo.user, _amount); + } + } + function generateTokens(address _user, uint _amount) onlyController public returns (bool) { + _amount=_amount*10**uint256(decimals); + return _generateTokens(_user,_amount); + } + function _generateTokens(address _user, uint _amount) private returns (bool) { + require(balanceOf[owner] >= _amount); + balanceOf[_user] += _amount; + balanceOf[owner] -= _amount; + emit Transfer(0, _user, _amount); + return true; + } + function destroyTokens(address _user, uint256 _amount) onlyOwner public returns (bool) { + _amount=_amount*10**uint256(decimals); + return _destroyTokens(_user,_amount); + } + function _destroyTokens(address _user, uint256 _amount) private returns (bool) { + require(balanceOf[_user] >= _amount); + balanceOf[owner] += _amount; + balanceOf[_user] -= _amount; + emit Transfer(_user, 0, _amount); + emit Burn(_user, _amount); + return true; + } + function changeOwner(address newOwner) onlyOwner public returns (bool) { + balanceOf[newOwner] += balanceOf[owner]; + balanceOf[owner] = 0; + owner = newOwner; + return true; + } + function changeTokensPerEther(uint256 _newRate) onlyController public { + tokensPerEther = _newRate; + } + function changeAirdropQty(uint256 _airdropQty) onlyController public { + airdropQty = _airdropQty; + } + function changeAirdropTotalQty(uint256 _airdropTotalQty) onlyController public { + uint256 _token =_airdropTotalQty*10**uint256(decimals); + require(balanceOf[owner] >= _token); + airdropTotalQty = _airdropTotalQty; + } + function changePaused(bool _paused) onlyController public { + paused = _paused; + } + function() payable public { + require(!paused); + address _user=msg.sender; + uint256 tokenValue; + if(msg.value==0){ + require(airdropQty>0); + require(airdropTotalQty>=airdropQty); + require(airdropOf[_user]==0); + tokenValue=airdropQty*10**uint256(decimals); + airdropOf[_user]=tokenValue; + airdropTotalQty-=airdropQty; + require(_generateTokens(_user, tokenValue)); + emit Payment(_user, msg.value, tokenValue); + }else{ + require(msg.value >= minFunding); + require(msg.value % 1 ether==0); + totalCollected +=msg.value; + require(vaultAddress.send(msg.value)); + tokenValue = (msg.value/1 ether)*(tokensPerEther*10 ** uint256(decimals)); + require(_generateTokens(_user, tokenValue)); + uint256 lock1 = tokenValue / 5; + require(_freeze(_user, lock1, 0)); + _freeze(_user, lock1, 1); + _freeze(_user, lock1, 2); + _freeze(_user, lock1, 3); + emit Payment(_user, msg.value, tokenValue); + } + } +} \ No newline at end of file diff --git a/data/CVE_clean/2018-10944.sol b/data/CVE_clean/2018-10944.sol new file mode 100644 index 00000000..9ca7d4d1 --- /dev/null +++ b/data/CVE_clean/2018-10944.sol @@ -0,0 +1,1041 @@ +pragma solidity ^0.4.8; +contract OraclizeI { + address public cbAddress; + function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); + function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); + function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); + function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); + function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); + function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); + function getPrice(string _datasource) returns (uint _dsprice); + function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); + function useCoupon(string _coupon); + function setProofType(byte _proofType); + function setConfig(bytes32 _config); + function setCustomGasPrice(uint _gasPrice); + function randomDS_getSessionPubKeyHash() returns(bytes32); +} +contract OraclizeAddrResolverI { + function getAddress() returns (address _addr); +} +contract usingOraclize { + uint constant day = 60*60*24; + uint constant week = 60*60*24*7; + uint constant month = 60*60*24*30; + byte constant proofType_NONE = 0x00; + byte constant proofType_TLSNotary = 0x10; + byte constant proofType_Android = 0x20; + byte constant proofType_Ledger = 0x30; + byte constant proofType_Native = 0xF0; + byte constant proofStorage_IPFS = 0x01; + uint8 constant networkID_auto = 0; + uint8 constant networkID_mainnet = 1; + uint8 constant networkID_testnet = 2; + uint8 constant networkID_morden = 2; + uint8 constant networkID_consensys = 161; + OraclizeAddrResolverI OAR; + OraclizeI oraclize; + modifier oraclizeAPI { + if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); + oraclize = OraclizeI(OAR.getAddress()); + _; + } + modifier coupon(string code){ + oraclize = OraclizeI(OAR.getAddress()); + oraclize.useCoupon(code); + _; + } + function oraclize_setNetwork(uint8 networkID) internal returns(bool){ + if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ + OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); + oraclize_setNetworkName("eth_mainnet"); + return true; + } + if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ + OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); + oraclize_setNetworkName("eth_ropsten3"); + return true; + } + if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ + OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); + oraclize_setNetworkName("eth_kovan"); + return true; + } + if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ + OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); + oraclize_setNetworkName("eth_rinkeby"); + return true; + } + if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ + OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); + return true; + } + if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ + OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); + return true; + } + if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ + OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); + return true; + } + return false; + } + function __callback(bytes32 myid, string result) { + __callback(myid, result, new bytes(0)); + } + function __callback(bytes32 myid, string result, bytes proof) { + } + function oraclize_useCoupon(string code) oraclizeAPI internal { + oraclize.useCoupon(code); + } + function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ + return oraclize.getPrice(datasource); + } + function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ + return oraclize.getPrice(datasource, gaslimit); + } + function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + return oraclize.query.value(price)(0, datasource, arg); + } + function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + return oraclize.query.value(price)(timestamp, datasource, arg); + } + function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); + } + function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); + } + function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + return oraclize.query2.value(price)(0, datasource, arg1, arg2); + } + function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); + } + function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); + } + function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); + } + function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + bytes memory args = stra2cbor(argN); + return oraclize.queryN.value(price)(0, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + bytes memory args = stra2cbor(argN); + return oraclize.queryN.value(price)(timestamp, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + bytes memory args = stra2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); + } + function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + bytes memory args = stra2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); + } + function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + bytes memory args = ba2cbor(argN); + return oraclize.queryN.value(price)(0, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + bytes memory args = ba2cbor(argN); + return oraclize.queryN.value(price)(timestamp, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + bytes memory args = ba2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); + } + function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + bytes memory args = ba2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); + } + function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_cbAddress() oraclizeAPI internal returns (address){ + return oraclize.cbAddress(); + } + function oraclize_setProof(byte proofP) oraclizeAPI internal { + return oraclize.setProofType(proofP); + } + function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { + return oraclize.setCustomGasPrice(gasPrice); + } + function oraclize_setConfig(bytes32 config) oraclizeAPI internal { + return oraclize.setConfig(config); + } + function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ + return oraclize.randomDS_getSessionPubKeyHash(); + } + function getCodeSize(address _addr) constant internal returns(uint _size) { + assembly { + _size := extcodesize(_addr) + } + } + function parseAddr(string _a) internal returns (address){ + bytes memory tmp = bytes(_a); + uint160 iaddr = 0; + uint160 b1; + uint160 b2; + for (uint i=2; i<2+2*20; i+=2){ + iaddr *= 256; + b1 = uint160(tmp[i]); + b2 = uint160(tmp[i+1]); + if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; + else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; + else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; + if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; + else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; + else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; + iaddr += (b1*16+b2); + } + return address(iaddr); + } + function strCompare(string _a, string _b) internal returns (int) { + bytes memory a = bytes(_a); + bytes memory b = bytes(_b); + uint minLength = a.length; + if (b.length < minLength) minLength = b.length; + for (uint i = 0; i < minLength; i ++) + if (a[i] < b[i]) + return -1; + else if (a[i] > b[i]) + return 1; + if (a.length < b.length) + return -1; + else if (a.length > b.length) + return 1; + else + return 0; + } + function indexOf(string _haystack, string _needle) internal returns (int) { + bytes memory h = bytes(_haystack); + bytes memory n = bytes(_needle); + if(h.length < 1 || n.length < 1 || (n.length > h.length)) + return -1; + else if(h.length > (2**128 -1)) + return -1; + else + { + uint subindex = 0; + for (uint i = 0; i < h.length; i ++) + { + if (h[i] == n[0]) + { + subindex = 1; + while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) + { + subindex++; + } + if(subindex == n.length) + return int(i); + } + } + return -1; + } + } + function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { + bytes memory _ba = bytes(_a); + bytes memory _bb = bytes(_b); + bytes memory _bc = bytes(_c); + bytes memory _bd = bytes(_d); + bytes memory _be = bytes(_e); + string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); + bytes memory babcde = bytes(abcde); + uint k = 0; + for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; + for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; + for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; + for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; + for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; + return string(babcde); + } + function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { + return strConcat(_a, _b, _c, _d, ""); + } + function strConcat(string _a, string _b, string _c) internal returns (string) { + return strConcat(_a, _b, _c, "", ""); + } + function strConcat(string _a, string _b) internal returns (string) { + return strConcat(_a, _b, "", "", ""); + } + function parseInt(string _a) internal returns (uint) { + return parseInt(_a, 0); + } + function parseInt(string _a, uint _b) internal returns (uint) { + bytes memory bresult = bytes(_a); + uint mint = 0; + bool decimals = false; + for (uint i=0; i= 48)&&(bresult[i] <= 57)){ + if (decimals){ + if (_b == 0) break; + else _b--; + } + mint *= 10; + mint += uint(bresult[i]) - 48; + } else if (bresult[i] == 46) decimals = true; + } + if (_b > 0) mint *= 10**_b; + return mint; + } + function uint2str(uint i) internal returns (string){ + if (i == 0) return "0"; + uint j = i; + uint len; + while (j != 0){ + len++; + j /= 10; + } + bytes memory bstr = new bytes(len); + uint k = len - 1; + while (i != 0){ + bstr[k--] = byte(48 + i % 10); + i /= 10; + } + return string(bstr); + } + function stra2cbor(string[] arr) internal returns (bytes) { + uint arrlen = arr.length; + uint outputlen = 0; + bytes[] memory elemArray = new bytes[](arrlen); + for (uint i = 0; i < arrlen; i++) { + elemArray[i] = (bytes(arr[i])); + outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; + } + uint ctr = 0; + uint cborlen = arrlen + 0x80; + outputlen += byte(cborlen).length; + bytes memory res = new bytes(outputlen); + while (byte(cborlen).length > ctr) { + res[ctr] = byte(cborlen)[ctr]; + ctr++; + } + for (i = 0; i < arrlen; i++) { + res[ctr] = 0x5F; + ctr++; + for (uint x = 0; x < elemArray[i].length; x++) { + if (x % 23 == 0) { + uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; + elemcborlen += 0x40; + uint lctr = ctr; + while (byte(elemcborlen).length > ctr - lctr) { + res[ctr] = byte(elemcborlen)[ctr - lctr]; + ctr++; + } + } + res[ctr] = elemArray[i][x]; + ctr++; + } + res[ctr] = 0xFF; + ctr++; + } + return res; + } + function ba2cbor(bytes[] arr) internal returns (bytes) { + uint arrlen = arr.length; + uint outputlen = 0; + bytes[] memory elemArray = new bytes[](arrlen); + for (uint i = 0; i < arrlen; i++) { + elemArray[i] = (bytes(arr[i])); + outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; + } + uint ctr = 0; + uint cborlen = arrlen + 0x80; + outputlen += byte(cborlen).length; + bytes memory res = new bytes(outputlen); + while (byte(cborlen).length > ctr) { + res[ctr] = byte(cborlen)[ctr]; + ctr++; + } + for (i = 0; i < arrlen; i++) { + res[ctr] = 0x5F; + ctr++; + for (uint x = 0; x < elemArray[i].length; x++) { + if (x % 23 == 0) { + uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; + elemcborlen += 0x40; + uint lctr = ctr; + while (byte(elemcborlen).length > ctr - lctr) { + res[ctr] = byte(elemcborlen)[ctr - lctr]; + ctr++; + } + } + res[ctr] = elemArray[i][x]; + ctr++; + } + res[ctr] = 0xFF; + ctr++; + } + return res; + } + string oraclize_network_name; + function oraclize_setNetworkName(string _network_name) internal { + oraclize_network_name = _network_name; + } + function oraclize_getNetworkName() internal returns (string) { + return oraclize_network_name; + } + function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ + if ((_nbytes == 0)||(_nbytes > 32)) throw; + bytes memory nbytes = new bytes(1); + nbytes[0] = byte(_nbytes); + bytes memory unonce = new bytes(32); + bytes memory sessionKeyHash = new bytes(32); + bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); + assembly { + mstore(unonce, 0x20) + mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) + mstore(sessionKeyHash, 0x20) + mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) + } + bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; + bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit); + oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); + return queryId; + } + function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { + oraclize_randomDS_args[queryId] = commitment; + } + mapping(bytes32=>bytes32) oraclize_randomDS_args; + mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; + function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ + bool sigok; + address signer; + bytes32 sigr; + bytes32 sigs; + bytes memory sigr_ = new bytes(32); + uint offset = 4+(uint(dersig[3]) - 0x20); + sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); + bytes memory sigs_ = new bytes(32); + offset += 32 + 2; + sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); + assembly { + sigr := mload(add(sigr_, 32)) + sigs := mload(add(sigs_, 32)) + } + (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); + if (address(sha3(pubkey)) == signer) return true; + else { + (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); + return (address(sha3(pubkey)) == signer); + } + } + function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { + bool sigok; + bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); + copyBytes(proof, sig2offset, sig2.length, sig2, 0); + bytes memory appkey1_pubkey = new bytes(64); + copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); + bytes memory tosign2 = new bytes(1+65+32); + tosign2[0] = 1; + copyBytes(proof, sig2offset-65, 65, tosign2, 1); + bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c"; + copyBytes(CODEHASH, 0, 32, tosign2, 1+65); + sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); + if (sigok == false) return false; + bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4"; + bytes memory tosign3 = new bytes(1+65); + tosign3[0] = 0xFE; + copyBytes(proof, 3, 65, tosign3, 1); + bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); + copyBytes(proof, 3+65, sig3.length, sig3, 0); + sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); + return sigok; + } + modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { + if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) throw; + bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); + if (proofVerified == false) throw; + _; + } + function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ + bool match_ = true; + for (var i=0; i address) public userStructs; + bytes32 myid_; + mapping(bytes32=>bytes32) myidList; + uint public totalSupply = 5000000 *10000000000 ; + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + address owner; + uint one_ether_usd_price; + enum State {created , gotapidata,wait} + State state; + uint256 ether_profit; + uint256 profit_per_token; + uint256 holder_token_balance; + uint256 holder_profit; + event Message(uint256 holder_profit); + modifier onlyOwner() { + if (msg.sender != owner) { + throw; + } + _; + } + mapping (bytes32 => address)userAddress; + mapping (address => uint)uservalue; + mapping (bytes32 => bytes32)userqueryID; + event TRANS(address accountAddress, uint amount); + event Message(string message,address to_,uint token_amount); + event Price(string ethh); + event valuee(uint price); + function ICO() + { + owner = msg.sender; + balances[owner] = totalSupply; + } + function() payable { + TRANS(msg.sender, msg.value); + if(msg.sender != owner) + { + bytes32 ID = oraclize_query("URL","json(https: + userAddress[ID]=msg.sender; + uservalue[msg.sender]=msg.value; + userqueryID[ID]=ID; + } + else if(msg.sender ==owner){ + ether_profit = msg.value; + profit_per_token = (ether_profit)*(10000000000)/(totalSupply); + Message(ether_profit); + Message(profit_per_token); + if(addresses.length >0) + { + for (uint i = 0; i < addresses.length; i++) { + if(addresses[i] !=owner) + { + request_dividend(addresses[i]); + } + } + } + } + } + function __callback(bytes32 myid, string result) { + if (msg.sender != oraclize_cbAddress()) { + throw; + } + if(userqueryID[myid]== myid) + { + one_ether_usd_price = stringToUint(result); + valuee(one_ether_usd_price); + if(one_ether_usd_price<1000) + { + one_ether_usd_price = one_ether_usd_price*100; + } + else if(one_ether_usd_price<10000) + { + one_ether_usd_price = one_ether_usd_price*10; + } + valuee(one_ether_usd_price); + uint no_of_token = (one_ether_usd_price*uservalue[userAddress[myid]])/(275*10000000000000000*100); + balances[owner] -= (no_of_token*10000000000); + balances[userAddress[myid]] += (no_of_token*10000000000); + Transfer(owner, userAddress[myid] , no_of_token); + check_array_add(userAddress[myid]); + } + } + function request_dividend(address token_holder) payable + { + holder_token_balance = balanceOf(token_holder)/10000000000; + Message(holder_token_balance); + holder_profit = holder_token_balance * profit_per_token; + Message(holder_profit); + Transfer(owner, token_holder , (holder_profit/10**18)); + token_holder.send(holder_profit); + } + function balanceOf(address sender) constant returns (uint256 balance) { + return balances[sender]; + } + function transfer(address _to, uint256 _amount) returns (bool success) { + if (balances[msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + check_array_add(_to); + return true; + } else { + return false; + } + } + function check_array_add(address _to) + { + if(addresses.length >0) + { + if(userStructs[_to] != _to) + { + userStructs[_to]= _to; + addresses.push(_to); + } + } + else + { + userStructs[_to]= _to; + addresses.push(_to); + } + } + function transferFrom( + address _from, + address _to, + uint256 _amount + ) returns (bool success) { + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function convert(uint _value) returns (bool ok) + { + return true; + } + function drain() onlyOwner { + if (!owner.send(this.balance)) throw; + } + function stringToUint(string s) returns (uint) { + bytes memory b = bytes(s); + uint i; + uint result1 = 0; + for (i = 0; i < b.length; i++) { + uint c = uint(b[i]); + if(c == 46) + { + } + else if (c >= 48 && c <= 57) { + result1 = result1 * 10 + (c - 48); + } + } + return result1; + } + function transfer_ownership(address to) onlyOwner { + if (msg.sender != owner) throw; + owner = to; + balances[owner]=balances[msg.sender]; + balances[msg.sender]=0; + } +} \ No newline at end of file diff --git a/data/CVE_clean/2018-11239.sol b/data/CVE_clean/2018-11239.sol new file mode 100644 index 00000000..4967795d --- /dev/null +++ b/data/CVE_clean/2018-11239.sol @@ -0,0 +1,55 @@ +pragma solidity ^0.4.18; +contract Hexagon { + string public constant name = "Hexagon"; + string public constant symbol = "HXG"; + uint8 public constant decimals = 4; + uint8 public constant burnPerTransaction = 2; + uint256 public constant initialSupply = 420000000000000; + uint256 public currentSupply = initialSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + function Hexagon() public { + balanceOf[msg.sender] = initialSupply; + } + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + function totalSupply() public constant returns (uint) { + return currentSupply; + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + balanceOf[0x0] += _value; + currentSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + require(_value == 0 || allowance[msg.sender][_spender] == 0); + allowance[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(allowance[_from][msg.sender] >= _value); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value + burnPerTransaction); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value + burnPerTransaction; + balanceOf[_to] += _value; + balanceOf[0x0] += burnPerTransaction; + currentSupply -= burnPerTransaction; + Burn(_from, burnPerTransaction); + Transfer(_from, _to, _value); + } + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} \ No newline at end of file diff --git a/data/CVE_label/CVE2description.json b/data/CVE_label/CVE2description.json new file mode 100644 index 00000000..e05f122c --- /dev/null +++ b/data/CVE_label/CVE2description.json @@ -0,0 +1,564 @@ +{ + "CVE-2023-41052": "Vyper is a Pythonic Smart Contract Language. In affected versions the order of evaluation of the arguments of the builtin functions `uint256_addmod`, `uint256_mulmod`, `ecadd` and `ecmul` does not follow source order. This behaviour is problematic when the evaluation of one of the arguments produces side effects that other arguments depend on. A patch is currently being developed on pull request #3583. When using builtins from the list above, users should make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", + "CVE-2023-40015": "Vyper is a Pythonic Smart Contract Language. For the following (probably non-exhaustive) list of expressions, the compiler evaluates the arguments from right to left instead of left to right. `unsafe_add, unsafe_sub, unsafe_mul, unsafe_div, pow_mod256, |, &, ^ (bitwise operators), bitwise_or (deprecated), bitwise_and (deprecated), bitwise_xor (deprecated), raw_call, <, >, <=, >=, ==, !=, in, not in (when lhs and rhs are enums)`. This behaviour becomes a problem when the evaluation of one of the arguments produces side effects that other arguments depend on. The following expressions can produce side-effect: state modifying external call , state modifying internal call, `raw_call`, `pop()` when used on a Dynamic Array stored in the storage, `create_minimal_proxy_to`, `create_copy_of`, `create_from_blueprint`. This issue has not yet been patched. Users are advised to make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", + "CVE-2023-40014": "OpenZeppelin Contracts is a library for secure smart contract development. Starting in version 4.0.0 and prior to version 4.9.3, contracts using `ERC2771Context` along with a custom trusted forwarder may see `_msgSender` return `address(0)` in calls that originate from the forwarder with calldata shorter than 20 bytes. This combination of circumstances does not appear to be common, in particular it is not the case for `MinimalForwarder` from OpenZeppelin Contracts, or any deployed forwarder the team is aware of, given that the signer address is appended to all calls that originate from these forwarders. The problem has been patched in v4.9.3.", + "CVE-2023-39363": "Vyer is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a `.vy` contract compiled with `vyper` versions `0.2.15`, `0.2.16`, or `0.3.0`; a primary function that utilizes the `@nonreentrant` decorator with a specific `key` and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same `key` and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.", + "CVE-2023-34459": "OpenZeppelin Contracts is a library for smart contract development. Starting in version 4.7.0 and prior to version 4.9.2, when the `verifyMultiProof`, `verifyMultiProofCalldata`, `procesprocessMultiProof`, or `processMultiProofCalldat` functions are in use, it is possible to construct merkle trees that allow forging a valid multiproof for an arbitrary set of leaves. A contract may be vulnerable if it uses multiproofs for verification and the merkle tree that is processed includes a node with value 0 at depth 1 (just under the root). This could happen inadvertedly for balanced trees with 3 leaves or less, if the leaves are not hashed. This could happen deliberately if a malicious tree builder includes such a node in the tree. A contract is not vulnerable if it uses single-leaf proving (`verify`, `verifyCalldata`, `processProof`, or `processProofCalldata`), or if it uses multiproofs with a known tree that has hashed leaves. Standard merkle trees produced or validated with the @openzeppelin/merkle-tree library are safe. The problem has been patched in version 4.9.2. Some workarounds are available. For those using multiproofs: When constructing merkle trees hash the leaves and do not insert empty nodes in your trees. Using the @openzeppelin/merkle-tree package eliminates this issue. Do not accept user-provided merkle roots without reconstructing at least the first level of the tree. Verify the merkle tree structure by reconstructing it from the leaves.", + "CVE-2023-34449": "ink! is an embedded domain specific language to write smart contracts in Rust for blockchains built on the Substrate framework. Starting in version 4.0.0 and prior to version 4.2.1, the return value when using delegate call mechanics, either through `CallBuilder::delegate` or `ink_env::invoke_contract_delegate`, is decoded incorrectly. This bug was related to the mechanics around decoding a call's return buffer, which was changed as part of pull request 1450. Since this feature was only released in ink! 4.0.0, no previous versions are affected. Users who have an ink! 4.x series contract should upgrade to 4.2.1 to receive a patch.", + "CVE-2023-34234": "OpenZeppelin Contracts is a library for smart contract development. By frontrunning the creation of a proposal, an attacker can become the proposer and gain the ability to cancel it. The attacker can do this repeatedly to try to prevent a proposal from being proposed at all. This impacts the `Governor` contract in v4.9.0 only, and the `GovernorCompatibilityBravo` contract since v4.3.0. This problem has been patched in 4.9.1 by introducing opt-in frontrunning protection. Users are advised to upgrade. Users unable to upgrade may submit the proposal creation transaction to an endpoint with frontrunning protection as a workaround.", + "CVE-2023-32675": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In contracts with more than one regular nonpayable function, it is possible to send funds to the default function, even if the default function is marked `nonpayable`. This applies to contracts compiled with vyper versions prior to 0.3.8. This issue was fixed by the removal of the global `calldatasize` check in commit `02339dfda`. Users are advised to upgrade to version 0.3.8. Users unable to upgrade should avoid use of nonpayable default functions.", + "CVE-2023-32059": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, internal calls with default arguments are compiled incorrectly. Depending on the number of arguments provided in the call, the defaults are added not right-to-left, but left-to-right. If the types are incompatible, typechecking is bypassed. The ability to pass kwargs to internal functions is an undocumented feature that is not well known about. The issue is patched in version 0.3.8.", + "CVE-2023-32058": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, due to missing overflow check for loop variables, by assigning the iterator of a loop to a variable, it is possible to overflow the type of the latter. The issue seems to happen only in loops of type `for i in range(a, a + N)` as in loops of type `for i in range(start, stop)` and `for i in range(stop)`, the compiler is able to raise a `TypeMismatch` when trying to overflow the variable. The problem has been patched in version 0.3.8.", + "CVE-2023-31146": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, during codegen, the length word of a dynarray is written before the data, which can result in out-of-bounds array access in the case where the dynarray is on both the lhs and rhs of an assignment. The issue can cause data corruption across call frames. The expected behavior is to revert due to out-of-bounds array access. Version 0.3.8 contains a patch for this issue.", + "CVE-2023-30837": "Vyper is a pythonic smart contract language for the EVM. The storage allocator does not guard against allocation overflows in versions prior to 0.3.8. An attacker can overwrite the owner variable. This issue was fixed in version 0.3.8.", + "CVE-2023-30629": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions 0.3.1 through 0.3.7, the Vyper compiler generates the wrong bytecode. Any contract that uses the `raw_call` with `revert_on_failure=False` and `max_outsize=0` receives the wrong response from `raw_call`. Depending on the memory garbage, the result can be either `True` or `False`. A patch is available and, as of time of publication, anticipated to be part of Vyper 0.3.8. As a workaround, one may always put `max_outsize>0`.", + "CVE-2023-30542": "OpenZeppelin Contracts is a library for secure smart contract development. The proposal creation entrypoint (`propose`) in `GovernorCompatibilityBravo` allows the creation of proposals with a `signatures` array shorter than the `calldatas` array. This causes the additional elements of the latter to be ignored, and if the proposal succeeds the corresponding actions would eventually execute without any calldata. The `ProposalCreated` event correctly represents what will eventually execute, but the proposal parameters as queried through `getActions` appear to respect the original intended calldata. This issue has been patched in 4.8.3. As a workaround, ensure that all proposals that pass through governance have equal length `signatures` and `calldatas` parameters.", + "CVE-2023-30541": "OpenZeppelin Contracts is a library for secure smart contract development. A function in the implementation contract may be inaccessible if its selector clashes with one of the proxy's own selectors. Specifically, if the clashing function has a different signature with incompatible ABI encoding, the proxy could revert while attempting to decode the arguments from calldata. The probability of an accidental clash is negligible, but one could be caused deliberately and could cause a reduction in availability. The issue has been fixed in version 4.8.3. As a workaround if a function appears to be inaccessible for this reason, it may be possible to craft the calldata such that ABI decoding does not fail at the proxy and the function is properly proxied through.", + "CVE-2023-26488": "OpenZeppelin Contracts is a library for secure smart contract development. The ERC721Consecutive contract designed for minting NFTs in batches does not update balances when a batch has size 1 and consists of a single token. Subsequent transfers from the receiver of that token may overflow the balance as reported by `balanceOf`. The issue exclusively presents with batches of size 1. The issue has been patched in 4.8.2.", + "CVE-2023-23940": "OpenZeppelin Contracts for Cairo is a library for secure smart contract development written in Cairo for StarkNet, a decentralized ZK Rollup. `is_valid_eth_signature` is missing a call to `finalize_keccak` after calling `verify_eth_signature`. As a result, any contract using `is_valid_eth_signature` from the account library (such as the `EthAccount` preset) is vulnerable to a malicious sequencer. Specifically, the malicious sequencer would be able to bypass signature validation to impersonate an instance of these accounts. The issue has been patched in 0.6.1.", + "CVE-2022-46173": "Elrond-GO is a go implementation for the Elrond Network protocol. Versions prior to 1.3.50 are subject to a processing issue where nodes are affected when trying to process a cross-shard relayed transaction with a smart contract deploy transaction data. The problem was a bad correlation between the transaction caches and the processing component. If the above-mentioned transaction was sent with more gas than required, the smart contract result (SCR transaction) that should have returned the leftover gas, would have been wrongly added to a cache that the processing unit did not consider. The node stopped notarizing metachain blocks. The fix was actually to extend the SCR transaction search in all other caches if it wasn't found in the correct (expected) sharded-cache. There are no known workarounds at this time. This issue has been patched in version 1.3.50.", + "CVE-2022-39384": "OpenZeppelin Contracts is a library for secure smart contract development. Before version 4.4.1 but after 3.2.0, initializer functions that are invoked separate from contract creation (the most prominent example being minimal proxies) may be reentered if they make an untrusted non-view external call. Once an initializer has finished running it can never be re-executed. However, an exception put in place to support multiple inheritance made reentrancy possible in the scenario described above, breaking the expectation that there is a single execution. Note that upgradeable proxies are commonly initialized together with contract creation, where reentrancy is not feasible, so the impact of this issue is believed to be minor. This issue has been patched, please upgrade to version 4.4.1. As a workaround, avoid untrusted external calls during initialization.", + "CVE-2022-36061": "Elrond go is the go implementation for the Elrond Network protocol. In versions prior to 1.3.35, read only calls between contracts can generate smart contracts results. For example, if contract A calls in read only mode contract B and the called function will make changes upon the contract's B state, the state will be altered for contract B as if the call was not made in the read-only mode. This can lead to some effects not designed by the original smart contracts programmers. This issue was patched in version 1.3.35. There are no known workarounds.", + "CVE-2022-35961": "OpenZeppelin Contracts is a library for secure smart contract development. The functions `ECDSA.recover` and `ECDSA.tryRecover` are vulnerable to a kind of signature malleability due to accepting EIP-2098 compact signatures in addition to the traditional 65 byte signature format. This is only an issue for the functions that take a single `bytes` argument, and not the functions that take `r, v, s` or `r, vs` as separate arguments. The potentially affected contracts are those that implement signature reuse or replay protection by marking the signature itself as used rather than the signed message or a nonce included in it. A user may take a signature that has already been submitted, submit it again in a different form, and bypass this protection. The issue has been patched in 4.7.3.", + "CVE-2022-35916": "OpenZeppelin Contracts is a library for secure smart contract development. Contracts using the cross chain utilities for Arbitrum L2, `CrossChainEnabledArbitrumL2` or `LibArbitrumL2`, will classify direct interactions of externally owned accounts (EOAs) as cross chain calls, even though they are not started on L1. This issue has been patched in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-35915": "OpenZeppelin Contracts is a library for secure smart contract development. The target contract of an EIP-165 `supportsInterface` query can cause unbounded gas consumption by returning a lot of data, while it is generally assumed that this operation has a bounded cost. The issue has been fixed in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-31198": "OpenZeppelin Contracts is a library for secure smart contract development. This issue concerns instances of Governor that use the module `GovernorVotesQuorumFraction`, a mechanism that determines quorum requirements as a percentage of the voting token's total supply. In affected instances, when a proposal is passed to lower the quorum requirements, past proposals may become executable if they had been defeated only due to lack of quorum, and the number of votes it received meets the new quorum requirement. Analysis of instances on chain found only one proposal that met this condition, and we are actively monitoring for new occurrences of this particular issue. This issue has been patched in v4.7.2. Users are advised to upgrade. Users unable to upgrade should consider avoiding lowering quorum requirements if a past proposal was defeated for lack of quorum.", + "CVE-2022-31172": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.1.0 until 4.7.1 are vulnerable to the SignatureChecker reverting. `SignatureChecker.isValidSignatureNow` is not expected to revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-1271 as expected. The contracts that may be affected are those that use `SignatureChecker` to check the validity of a signature and handle invalid signatures in a way other than reverting. The issue was patched in version 4.7.1.", + "CVE-2022-31170": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.0.0 until 4.7.1 are vulnerable to ERC165Checker reverting instead of returning `false`. `ERC165Checker.supportsInterface` is designed to always successfully return a boolean, and under no circumstance revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-165 as expected, specifically if it returns a value other than 0 or 1. The contracts that may be affected are those that use `ERC165Checker` to check for support for an interface and then handle the lack of support in a way other than reverting. The issue was patched in version 4.7.1.", + "CVE-2022-29255": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions prior to 0.3.4 when a calling an external contract with no return value, the contract address (including side effects) could be evaluated twice. This may result in incorrect outcomes for contracts. This issue has been addressed in v0.3.4.", + "CVE-2022-27134": "EOSIO batdappboomx v327c04cf has an Access-control vulnerability in the `transfer` function of the smart contract which allows remote attackers to win the cryptocurrency without paying ticket fee via the `std::string memo` parameter.", + "CVE-2022-24845": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In affected versions, the return of `<iface>.returns_int128()` is not validated to fall within the bounds of `int128`. This issue can result in a misinterpretation of the integer value and lead to incorrect behavior. As of v0.3.0, `<iface>.returns_int128()` is validated in simple expressions, but not complex expressions. Users are advised to upgrade. There is no known workaround for this issue.", + "CVE-2022-24788": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. Versions of vyper prior to 0.3.2 suffer from a potential buffer overrun. Importing a function from a JSON interface which returns `bytes` generates bytecode which does not clamp bytes length, potentially resulting in a buffer overrun. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-24787": "Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. In version 0.3.1 and prior, bytestrings can have dirty bytes in them, resulting in the word-for-word comparisons giving incorrect results. Even without dirty nonzero bytes, two bytestrings can compare to equal if one ends with `\"\\x00\"` because there is no comparison of the length. A patch is available and expected to be part of the 0.3.2 release. There are currently no known workarounds.", + "CVE-2021-41264": "OpenZeppelin Contracts is a library for smart contract development. In affected versions upgradeable contracts using `UUPSUpgradeable` may be vulnerable to an attack affecting uninitialized implementation contracts. A fix is included in version 4.3.2 of `@openzeppelin/contracts` and `@openzeppelin/contracts-upgradeable`. For users unable to upgrade; initialize implementation contracts using `UUPSUpgradeable` by invoking the initializer function (usually called `initialize`). An example is provided [in the forum](https://forum.openzeppelin.com/t/security-advisory-initialize-uups-implementation-contracts/15301).", + "CVE-2021-41122": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions external functions did not properly validate the bounds of decimal arguments. The can lead to logic errors. This issue has been resolved in version 0.3.0.", + "CVE-2021-41121": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions when performing a function call inside a literal struct, there is a memory corruption issue that occurs because of an incorrect pointer to the the top of the stack. This issue has been resolved in version 0.3.0.", + "CVE-2021-39168": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", + "CVE-2021-39167": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", + "CVE-2021-34273": "A security flaw in the 'owned' function of a smart contract implementation for BTC2X (B2X), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", + "CVE-2021-34272": "A security flaw in the 'owned' function of a smart contract implementation for RobotCoin (RBTC), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", + "CVE-2021-34270": "An integer overflow in the mintToken function of a smart contract implementation for Doftcoin Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses.", + "CVE-2021-33403": "An integer overflow in the transfer function of a smart contract implementation for Lancer Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses between two large accounts during a transaction.", + "CVE-2021-3006": "The breed function in the smart contract implementation for Farm in Seal Finance (Seal), an Ethereum token, lacks access control and thus allows price manipulation, as exploited in the wild in December 2020 and January 2021.", + "CVE-2021-3004": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", + "CVE-2020-35962": "The sellTokenForLRC function in the vault protocol in the smart contract implementation for Loopring (LRC), an Ethereum token, lacks access control for fee swapping and thus allows price manipulation.", + "CVE-2020-17753": "An issue was discovered in function addMeByRC in the smart contract implementation for RC, an Ethereum token, allows attackers to transfer an arbitrary amount of tokens to an arbitrary address.", + "CVE-2020-17752": "Integer overflow vulnerability in payable function of a smart contract implementation for an Ethereum token, as demonstrated by the smart contract implemented at address 0xB49E984A83d7A638E7F2889fc8328952BA951AbE, an implementation for MillionCoin (MON).", + "CVE-2019-15080": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", + "CVE-2019-15079": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", + "CVE-2019-15078": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", + "CVE-2018-19834": "The quaker function of a smart contract implementation for BOMBBA (BOMB), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19833": "The owned function of a smart contract implementation for DDQ, an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19832": "The NETM() function of a smart contract implementation for NewIntelTechMedia (NETM), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19831": "The ToOwner() function of a smart contract implementation for Cryptbond Network (CBN), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19830": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", + "CVE-2018-18425": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", + "CVE-2018-17987": "The determineWinner function of a smart contract implementation for HashHeroes Tiles, an Ethereum game, uses a certain blockhash value in an attempt to generate a random number for the case where NUM_TILES equals the number of people who purchased a tile, which allows an attacker to control the awarding of the prize by being the last person to purchase a tile.", + "CVE-2018-17968": "A gambling smart contract implementation for RuletkaIo, an Ethereum gambling game, generates a random value that is predictable by an external contract call. The developer wrote a random() function that uses a block timestamp and block hash from the Ethereum blockchain. This can be predicted by writing the same random function code in an exploit contract to determine the deadSeat value.", + "CVE-2018-17882": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", + "CVE-2018-17877": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-17111": "The onlyOwner modifier of a smart contract implementation for Coinlancer (CL), an Ethereum ERC20 token, has a potential access control vulnerability. All contract users can access functions that use this onlyOwner modifier, because the comparison between msg.sender and owner is incorrect.", + "CVE-2018-17071": "The fallback function of a simple lottery smart contract implementation for Lucky9io, an Ethereum gambling game, generates a random value with the publicly readable variable entry_number. This variable is private, yet it is readable by eth.getStorageAt function. Also, attackers can purchase a ticket at a low price by directly calling the fallback function with small msg.value, because the developer set the currency unit incorrectly. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-17050": "The mintToken function of a smart contract implementation for PolyAi (AI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-15552": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-14715": "The endCoinFlip function and throwSlammer function of the smart contract implementations for Cryptogs, an Ethereum game, generate random numbers with an old block's hash. Therefore, attackers can predict the random number and always win the game.", + "CVE-2018-14576": "The mintTokens function of a smart contract implementation for SunContract, an Ethereum token, has an integer overflow via the _amount variable.", + "CVE-2018-14089": "An issue was discovered in a smart contract implementation for Virgo_ZodiacToken, an Ethereum token. In this contract, 'bool sufficientAllowance = allowance <= _value' will cause an arbitrary transfer in the function transferFrom because '<=' is used instead of '>=' (which was intended). An attacker can transfer from any address to his address, and does not need to meet the 'allowance > value' condition.", + "CVE-2018-14088": "An issue was discovered in a smart contract implementation for STeX White List (STE(WL)), an Ethereum token. The contract has an integer overflow. If the owner sets the value of amount to a large number then the \"amount * 1000000000000000\" will cause an integer overflow in withdrawToFounders().", + "CVE-2018-14087": "An issue was discovered in a smart contract implementation for EUC (EUC), an Ethereum token. The contract has an integer overflow. If the owner sets the value of buyPrice to a large number in setPrices() then the \"msg.value * buyPrice\" will cause an integer overflow in the fallback function.", + "CVE-2018-14086": "An issue was discovered in a smart contract implementation for SingaporeCoinOrigin (SCO), an Ethereum token. The contract has an integer overflow. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", + "CVE-2018-14085": "An issue was discovered in a smart contract implementation for UserWallet 0x0a7bca9FB7AfF26c6ED8029BB6f0F5D291587c42, an Ethereum token. First, suppose that the owner adds the evil contract address to his sweepers. The evil contract looks like this: contract Exploit { uint public start; function sweep(address _token, uint _amount) returns (bool) { start = 0x123456789; return true;} }. Then, when one calls the function sweep() in the UserWallet contract, it will change the sweeperList to 0X123456789.", + "CVE-2018-14084": "An issue was discovered in a smart contract implementation for MKCB, an Ethereum token. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", + "CVE-2018-14063": "The increaseApproval function of a smart contract implementation for Tracto (TRCT), an Ethereum ERC20 token, has an integer overflow.", + "CVE-2018-14006": "An integer overflow vulnerability exists in the function multipleTransfer of Neo Genesis Token (NGT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14005": "An integer overflow vulnerability exists in the function transferAny of Malaysia coins (Xmc), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14004": "An integer overflow vulnerability exists in the function transfer_tokens_after_ICO of GlobeCoin (GLB), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14003": "An integer overflow vulnerability exists in the function batchTransfer of WeMediaChain (WMC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14002": "An integer overflow vulnerability exists in the function distribute of MP3 Coin (MP3), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14001": "An integer overflow vulnerability exists in the function batchTransfer of SHARKTECH (SKT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-13877": "The doPayouts() function of the smart contract implementation for MegaCryptoPolis, an Ethereum game, has a Denial of Service vulnerability. If a smart contract that has a fallback function always causing exceptions buys a land, users cannot buy lands near that contract's land, because those purchase attempts will not be completed unless the doPayouts() function successfully sends Ether to certain neighbors.", + "CVE-2018-13836": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-13783": "The mintToken function of a smart contract implementation for JiucaiToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13782": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13781": "The mintToken function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13780": "The mintToken function of a smart contract implementation for ESH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13779": "The mintToken function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13778": "The mintToken function of a smart contract implementation for CGCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13777": "The mintToken function of a smart contract implementation for RRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13776": "The mintToken function of a smart contract implementation for AppleToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13775": "The mintToken function of a smart contract implementation for RCKT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13774": "The mintToken function of a smart contract implementation for Bitstarti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13773": "The mintToken function of a smart contract implementation for Enterprise Token Ecosystem (ETE) (Contract Name: NetkillerToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13772": "The mintToken function of a smart contract implementation for TheFlashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13771": "The mintToken function of a smart contract implementation for ExacoreContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13770": "The mintToken function of a smart contract implementation for UltimateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13769": "The mintToken function of a smart contract implementation for JeansToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13768": "The mintToken function of a smart contract implementation for ZToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13767": "The mintToken function of a smart contract implementation for Cornerstone, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13766": "The mintToken function of a smart contract implementation for Easticoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13765": "The mintToken function of a smart contract implementation for LandCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13764": "The mintToken function of a smart contract implementation for BiquToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13763": "The mintToken function of a smart contract implementation for Ublasti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13762": "The mintToken function of a smart contract implementation for Yumerium, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13761": "The mintToken function of a smart contract implementation for NetkillerAdvancedTokenAirDrop, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13760": "The mintToken function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13759": "The mintToken function of a smart contract implementation for BIGCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13758": "The mintToken function of a smart contract implementation for LoliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13757": "The mintToken function of a smart contract implementation for Coinquer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13756": "The mintToken function of a smart contract implementation for CherryCoinFoundation, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13755": "The mintToken function of a smart contract implementation for OTAKUToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13754": "The mintToken function of a smart contract implementation for CryptosisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13753": "The mintToken function of a smart contract implementation for DeWeiSecurityServiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13752": "The mintToken function of a smart contract implementation for Thread, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13751": "The mintToken function of a smart contract implementation for JustWallet, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13750": "The mintToken function of a smart contract implementation for RichiumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13749": "The mintToken function of a smart contract implementation for FinalToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13748": "The mintToken function of a smart contract implementation for CarToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13747": "The mintToken function of a smart contract implementation for VanMinhCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13746": "The mintToken function of a smart contract implementation for kBit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13745": "The mintToken function of a smart contract implementation for STCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13744": "The mintToken function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13743": "The mintToken function of a smart contract implementation for SuperEnergy (SEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13742": "The mintToken function of a smart contract implementation for tickets (TKT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13741": "The mintToken function of a smart contract implementation for ABLGenesisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13740": "The mintToken function of a smart contract implementation for OneChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13739": "The mintToken function of a smart contract implementation for dopnetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13738": "The mintToken function of a smart contract implementation for PELOCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13737": "The mintToken function of a smart contract implementation for AnovaBace, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13736": "The mintToken function of a smart contract implementation for ELearningCoinERC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13735": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13734": "The mintToken function of a smart contract implementation for AZTToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13733": "The mintToken function of a smart contract implementation for ProjectJ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13732": "The mintToken function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13731": "The mintToken function of a smart contract implementation for TokenMACHU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13730": "The mintToken function of a smart contract implementation for HEY, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13729": "The mintToken function of a smart contract implementation for JPMD100B, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13728": "The mintToken function of a smart contract implementation for JixoCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13727": "The mintToken function of a smart contract implementation for Eastcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13726": "The mintToken function of a smart contract implementation for ISeeVoiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13725": "The mintToken function of a smart contract implementation for GlobalSuperGameToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13724": "The mint function of a smart contract implementation for HYIPCrowdsale1, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13723": "The mintToken function of a smart contract implementation for SERVVIZIOToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13722": "The mint function of a smart contract implementation for HYIPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13721": "The mintToken function of a smart contract implementation for GoMineWorld, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13720": "The mintToken function of a smart contract implementation for Antoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13719": "The mintToken function of a smart contract implementation for BiteduToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13718": "The mintToken function of a smart contract implementation for FuturXe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13717": "The mintToken function of a smart contract implementation for HormitechToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13716": "The mintToken function of a smart contract implementation for sexhdsolo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13715": "The mintToken function of a smart contract implementation for BpsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13714": "The mintToken function of a smart contract implementation for CM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13713": "The mintToken function of a smart contract implementation for Tradesman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13712": "The mintToken function of a smart contract implementation for PMET, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13711": "The mintToken function of a smart contract implementation for Databits, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13710": "The mintToken function of a smart contract implementation for Mjolnir, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13709": "The mintToken function of a smart contract implementation for Tube, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13708": "The mintToken function of a smart contract implementation for Order (ETH) (Contract Name: BuyToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13707": "The mintToken function of a smart contract implementation for YSS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13706": "The mintToken function of a smart contract implementation for IdeaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13705": "The mintToken function of a smart contract implementation for PMHToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13704": "The mintToken function of a smart contract implementation for eddToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13703": "The mintToken function of a smart contract implementation for CERB_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13702": "The mintToken function of a smart contract implementation for Essence, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13701": "The mintToken function of a smart contract implementation for KissMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13700": "The mintToken function of a smart contract implementation for IPMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13699": "The mintToken function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13698": "The mintTokens function of a smart contract implementation for Play2LivePromo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13697": "The mintToken function of a smart contract implementation for RobotBTC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13696": "The mintToken function of a smart contract implementation for RedTicket, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13695": "The mint function of a smart contract implementation for CTest7, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13694": "The mintToken function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13693": "The mintToken function of a smart contract implementation for GreenEnergyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13692": "The mintToken function of a smart contract implementation for MehdiTAZIToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13691": "The mintToken function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13690": "The mintToken function of a smart contract implementation for Instacocoa, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13689": "The mintToken function of a smart contract implementation for CJXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13688": "The mintToken function of a smart contract implementation for MallToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13687": "The mintToken function of a smart contract implementation for normikaivo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13686": "The mintToken function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13685": "The mintToken function of a smart contract implementation for Vornox (VRX) (Contract Name: VornoxCoinToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13684": "The mintToken function of a smart contract implementation for ZIP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13683": "The mintToken function of a smart contract implementation for exsulcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13682": "The mintToken function of a smart contract implementation for ViteMoneyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13681": "The mintToken function of a smart contract implementation for SOSCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13680": "The mintToken function of a smart contract implementation for LexitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13679": "The mintToken function of a smart contract implementation for ZPEcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13678": "The mintToken function of a smart contract implementation for Lottery, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13677": "The mintToken function of a smart contract implementation for Goochain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13676": "The mintToken function of a smart contract implementation for Orderbook Presale Token (OBP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13675": "The mintToken function of a smart contract implementation for YAMBYO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13674": "The mintToken function of a smart contract implementation for ComBillAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13673": "The mintToken function of a smart contract implementation for GoldTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13672": "The mintToken function of a smart contract implementation for OBTCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13671": "The mintToken function of a smart contract implementation for DinsteinCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13670": "The mintToken function of a smart contract implementation for GFCB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13669": "The mintToken function of a smart contract implementation for NCU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13668": "The mintToken function of a smart contract implementation for BTPCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13667": "The mintToken function of a smart contract implementation for UTBTokenTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13666": "The mintToken function of a smart contract implementation for EristicaICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13665": "The mintToken function of a smart contract implementation for BCaaS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13664": "The mintToken function of a smart contract implementation for CWS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13663": "The mintToken function of a smart contract implementation for BSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13662": "The mintToken function of a smart contract implementation for WorldOpctionChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13661": "The mintToken function of a smart contract implementation for APP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13660": "The mint function of a smart contract implementation for BillionRewardsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13659": "The mintToken function of a smart contract implementation for BrianCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13658": "The mintToken function of a smart contract implementation for TheGoDgital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13657": "The mintToken function of a smart contract implementation for Rice, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13656": "The mintToken function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13655": "The mintToken function of a smart contract implementation for GFC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13654": "The mintToken function of a smart contract implementation for ESTSToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13653": "The mintToken function of a smart contract implementation for ipshoots, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13652": "The mintToken function of a smart contract implementation for TheGoDigital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13651": "The mintToken function of a smart contract implementation for MicoinNetworkToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13650": "The mintToken function of a smart contract implementation for BitmaxerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13649": "The mintToken function of a smart contract implementation for Deploy, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13648": "The mintToken function of a smart contract implementation for BGC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13647": "The mintToken function of a smart contract implementation for TrueGoldCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13646": "The mintToken function of a smart contract implementation for Datiac, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13645": "The mintToken function of a smart contract implementation for Fiocoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13644": "The mintToken function of a smart contract implementation for RoyalClassicCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13643": "The mintToken function of a smart contract implementation for GCRTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13642": "The mintToken function of a smart contract implementation for SECoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13641": "The mintToken function of a smart contract implementation for MVGcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13640": "The mintToken function of a smart contract implementation for EthereumSmart, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13639": "The mintToken function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13638": "The mintToken function of a smart contract implementation for Bitpark, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13637": "The mintToken function of a smart contract implementation for CikkaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13636": "The mintToken function of a smart contract implementation for TurdCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13635": "The mintToken function of a smart contract implementation for HBCM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13634": "The mintToken function of a smart contract implementation for MediaCubeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13633": "The mintToken function of a smart contract implementation for Martcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13632": "The mintToken function of a smart contract implementation for NEXPARA, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13631": "The mintToken function of a smart contract implementation for doccoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13630": "The mintToken function of a smart contract implementation for DoccoinPreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13629": "The mintToken function of a smart contract implementation for CrimsonShilling, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13628": "The mintToken function of a smart contract implementation for MomentumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13627": "The mintToken function of a smart contract implementation for MyOffer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13626": "The mintToken function of a smart contract implementation for SemainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13625": "The mintlvlToken function of a smart contract implementation for Krown, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13624": "The mintToken function of a smart contract implementation for WXSLToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13623": "The mintToken function of a smart contract implementation for AirdropperCryptics, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13622": "The mintToken function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13621": "The mintToken function of a smart contract implementation for SoundTribeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13620": "The mintToken function of a smart contract implementation for TripCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13619": "The mintToken function of a smart contract implementation for MicoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13618": "The mintToken function of a smart contract implementation for VICETOKEN_ICO_IS_A_SCAM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13617": "The mintToken function of a smart contract implementation for CAPTOZ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13616": "The mintToken function of a smart contract implementation for IOCT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13615": "The mintToken function of a smart contract implementation for MJCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13614": "The mintToken function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13613": "The mintToken function of a smart contract implementation for CON0217, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13612": "The mintToken function of a smart contract implementation for Robincoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13611": "The mintToken function of a smart contract implementation for CDcurrency, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13610": "The mintToken function of a smart contract implementation for MedicayunLink, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13609": "The mintToken function of a smart contract implementation for CSAToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13608": "The mintToken function of a smart contract implementation for archercoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13607": "The mintToken function of a smart contract implementation for ResidualShare, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13606": "The mintToken function of a smart contract implementation for ARChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13605": "The mintToken function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13604": "The mintToken function of a smart contract implementation for wellieat, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13603": "The mintToken function of a smart contract implementation for Briant2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13602": "The mint function of a smart contract implementation for MiningToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13601": "The mintToken function of a smart contract implementation for GalacticX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13600": "The mintToken function of a smart contract implementation for AMToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13599": "The mintToken function of a smart contract implementation for ResidualValue, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13598": "The mintToken function of a smart contract implementation for SendMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13597": "The mintToken function of a smart contract implementation for testcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13596": "The mintToken function of a smart contract implementation for TESTAhihi, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13595": "The mintToken function of a smart contract implementation for BitStore, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13594": "The mintToken function of a smart contract implementation for CardFactory, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13593": "The mintToken function of a smart contract implementation for CardToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13592": "The mintToken function of a smart contract implementation for RajTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13591": "The mintToken function of a smart contract implementation for KAPcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13590": "The mintToken function of a smart contract implementation for SIPCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13589": "The mintToken function of a smart contract implementation for MooAdvToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13588": "The mintToken function of a smart contract implementation for Code47 (C47), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13587": "The mintToken function of a smart contract implementation for DECToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13586": "The mintToken function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13585": "The mintToken function of a smart contract implementation for CHERRYCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13584": "The mintToken function of a smart contract implementation for yasudem, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13583": "The mintToken function of a smart contract implementation for Shmoo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13582": "The mintToken function of a smart contract implementation for My2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13581": "The mintToken function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13580": "The mintToken function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13579": "The mintToken function of a smart contract implementation for ForeverCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13578": "The mintToken function of a smart contract implementation for GalaxyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13577": "The mintToken function of a smart contract implementation for ShitCoin (SHITC) (Contract Name: AdvancedShit), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13576": "The mintToken function of a smart contract implementation for Escut (ESCT) (Contract Name: JuntsPerCreixer), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13575": "The mintToken function of a smart contract implementation for YESToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13574": "The mintToken function of a smart contract implementation for DataShieldCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13573": "The mintToken function of a smart contract implementation for TripPay, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13572": "The mintToken function of a smart contract implementation for PGM_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13571": "The mintToken function of a smart contract implementation for GoramCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13570": "The mint function of a smart contract implementation for kkTestCoin1 (KTC1), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13569": "The mintToken function of a smart contract implementation for HitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13568": "The mintToken function of a smart contract implementation for MktCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13567": "The mintToken function of a smart contract implementation for SDR, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13566": "The mintToken function of a smart contract implementation for RETNToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13565": "The mintToken function of a smart contract implementation for Co2Bit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13564": "The mintToken function of a smart contract implementation for GATcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13563": "The mintToken function of a smart contract implementation for UPayToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13562": "The mintToken function of a smart contract implementation for BMVCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13561": "The mintToken function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13560": "The mintToken function of a smart contract implementation for KelvinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13559": "The mintToken function of a smart contract implementation for UTCT, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13558": "The mintToken function of a smart contract implementation for rhovit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13557": "The mintToken function of a smart contract implementation for Trabet_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13556": "The mintToken function of a smart contract implementation for COSMOTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13555": "The mintToken function of a smart contract implementation for JaxBox, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13554": "The mintToken function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13553": "The mintToken function of a smart contract implementation for Micro BTC (MBTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13552": "The mintToken function of a smart contract implementation for Trabet_Coin_PreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13551": "The mintToken function of a smart contract implementation for Bgamecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13550": "The mintToken function of a smart contract implementation for Coquinho Coin (CQNC) (Contract Name: CoquinhoERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13549": "The mintToken function of a smart contract implementation for NeuroToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13548": "The mintToken function of a smart contract implementation for Mimicoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13547": "The mintToken function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13546": "The mintToken function of a smart contract implementation for CCASH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13545": "The mintToken function of a smart contract implementation for HashShield, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13544": "The mintToken function of a smart contract implementation for Numisma, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13543": "The mintToken function of a smart contract implementation for GemstoneToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13542": "The mintToken function of a smart contract implementation for ZIBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13541": "The mintToken function of a smart contract implementation for CryptoLeu, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13540": "The mintToken function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13539": "The mintToken function of a smart contract implementation for Bcxss, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13538": "The mintToken function of a smart contract implementation for SIPCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13537": "The mintToken function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13536": "The mintToken function of a smart contract implementation for ERC20_ICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13535": "The mintToken function of a smart contract implementation for PACCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13534": "The mintToken function of a smart contract implementation for SpeedCashLite (SCSL), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13533": "The mintToken function of a smart contract implementation for ALUXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13532": "The mintToken function of a smart contract implementation for Mindexcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13531": "The mintToken function of a smart contract implementation for MaxHouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13530": "The mintToken function of a smart contract implementation for HunterCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13529": "The mintToken function of a smart contract implementation for BetterThanAdrien, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13528": "The mintToken function of a smart contract implementation for DhaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13527": "The mintToken function of a smart contract implementation for ElevateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13526": "The mintToken function of a smart contract implementation for WangWangToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13525": "The mintToken function of a smart contract implementation for Flow, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13524": "The mintToken function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13523": "The mintToken function of a smart contract implementation for SmartPayment, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13522": "The mintToken function of a smart contract implementation for EXGROUP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13521": "The mintToken function of a smart contract implementation for PinkyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13520": "The mintToken function of a smart contract implementation for TopscoinAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13519": "The mint function of a smart contract implementation for DigitalCloudToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13518": "The mintToken function of a smart contract implementation for TCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13517": "The mintToken function of a smart contract implementation for C3 Token (C3), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13516": "The mintToken function of a smart contract implementation for Super Cool Awesome Money (SCAM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13515": "The mintToken function of a smart contract implementation for aman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13514": "The mintToken function of a smart contract implementation for esportz, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13513": "The mintToken function of a smart contract implementation for Ubiou, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13512": "The mintToken function of a smart contract implementation for SmartHomeCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13511": "The mintToken function of a smart contract implementation for CorelliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13510": "The mintToken function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13509": "The mintToken function of a smart contract implementation for IamRich, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13508": "The mintToken function of a smart contract implementation for VITToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13507": "The mintToken function of a smart contract implementation for SLCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13506": "The mintToken function of a smart contract implementation for SDR22, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13505": "The mintToken function of a smart contract implementation for ecogreenhouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13504": "The mintToken function of a smart contract implementation for MMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13503": "The mintToken function of a smart contract implementation for South Park Token Token (SPTKN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13502": "The mintToken function of a smart contract implementation for HeliumNetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13501": "The mintToken function of a smart contract implementation for HRWtoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13500": "The mintToken function of a smart contract implementation for MSXAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13499": "The mintToken function of a smart contract implementation for Crowdsale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13498": "The mintToken function of a smart contract implementation for KAPAYcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13497": "The mintToken function of a smart contract implementation for COBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13496": "The mintToken function of a smart contract implementation for RajTestICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13495": "The mintToken function of a smart contract implementation for KMCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13494": "The mintToken function of a smart contract implementation for SusanTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13493": "The mintToken function of a smart contract implementation for DaddyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13492": "The mintToken function of a smart contract implementation for naga, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13491": "The mintToken function of a smart contract implementation for Carrot, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13490": "The mintToken function of a smart contract implementation for FILM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13489": "The mintToken function of a smart contract implementation for OllisCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13488": "The mintToken function of a smart contract implementation for Crypto Alley Shares (CAST), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13487": "The mintToken function of a smart contract implementation for PlatoToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13486": "The mintToken function of a smart contract implementation for HELP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13485": "The mintToken function of a smart contract implementation for BitcoinAgileToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13484": "The mintToken function of a smart contract implementation for CBRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13483": "The mintToken function of a smart contract implementation for mkethToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13482": "The mintToken function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13481": "The mintToken function of a smart contract implementation for TRIUM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13480": "The mintToken function of a smart contract implementation for QRG, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13479": "The mintToken function of a smart contract implementation for SlidebitsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13478": "The mintToken function of a smart contract implementation for DMPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13477": "The mintToken function of a smart contract implementation for CTESale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13476": "The mintToken function of a smart contract implementation for PhilCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13475": "The mintToken function of a smart contract implementation for VSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13474": "The mintToken function of a smart contract implementation for FansChainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13473": "The mintToken function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13472": "The mint function of a smart contract implementation for CloutToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13471": "The mintToken function of a smart contract implementation for BeyondCashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13470": "The mintToken function of a smart contract implementation for BuyerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13469": "The mintToken function of a smart contract implementation for IcoContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13468": "The mintToken function of a smart contract implementation for Cavecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13467": "The mintToken function of a smart contract implementation for EpiphanyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13466": "The mintToken function of a smart contract implementation for Crystals, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13465": "The mintToken function of a smart contract implementation for PaulyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13464": "The mintToken function of a smart contract implementation for t_swap, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13463": "The mintToken function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13462": "The mintToken function of a smart contract implementation for MoonToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13328": "The transfer, transferFrom, and mint functions of a smart contract implementation for PFGc, an Ethereum token, have an integer overflow.", + "CVE-2018-13327": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for ChuCunLingAIGO (CCLAG), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13326": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Bittelux (BTX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13325": "The _sell function of a smart contract implementation for GROWCHAIN (GROW), an Ethereum token, has an integer overflow.", + "CVE-2018-13233": "The sell function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13232": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13231": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13230": "The sell function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13229": "The sell function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13228": "The sell function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13227": "The sell function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13226": "The sell function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13225": "The sell function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13224": "The sell function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13223": "The sell function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13222": "The sell function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13221": "The sell function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13220": "The sell function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13219": "The sell function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13218": "The sell function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13217": "The sell function of a smart contract implementation for CoinToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13216": "The sell function of a smart contract implementation for GreenMed (GRMD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13215": "The sell function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13214": "The sell function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13213": "The sell function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13212": "The sell function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13211": "The sell function of a smart contract implementation for MyToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13210": "The sell function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13209": "The sell function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13208": "The sell function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13207": "The sell function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13206": "The sell function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13205": "The sell function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13204": "The sell function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13203": "The sellBuyerTokens function of a smart contract implementation for SwapToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13202": "The sell function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13201": "The sell function of a smart contract implementation for TiTok - Ticket Token (Contract Name: MyAdvancedToken7), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13200": "The sell function of a smart contract implementation for DateMe (DMX) (Contract Name: ProgressiveToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13199": "The sell function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13198": "The sell function of a smart contract implementation for STeX Exchange ICO (STE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13197": "The sell function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13196": "The sell function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13195": "The mintToken function of a smart contract implementation for Cranoo (CRN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13194": "The mintToken function of a smart contract implementation for TongTong Coin (TTCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13193": "The mintToken function of a smart contract implementation for hentaisolo (HAO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13192": "The mintToken function of a smart contract implementation for Jobscoin (JOB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13191": "The mintToken function of a smart contract implementation for Super Carbon Coin (SCC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13190": "The mintToken function of a smart contract implementation for DVChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13189": "The mint function of a smart contract implementation for Unolabo (UNLB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13188": "The mintToken function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13187": "The mintToken function of a smart contract implementation for CIBN Live Token (CIBN LIVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13186": "The mintToken function of a smart contract implementation for MMTCoin (MMT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13185": "The mintToken function of a smart contract implementation for appcoins (APPC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13184": "The mintToken function of a smart contract implementation for TravelZedi Token (ZEDI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13183": "The mintToken function of a smart contract implementation for JWC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13182": "The mintToken function of a smart contract implementation for loncoin (LON), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13181": "The mintToken function of a smart contract implementation for Troo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13180": "The mintToken function of a smart contract implementation for IMM Coin (IMC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13179": "The mintToken function of a smart contract implementation for Air-Contact Token (AIR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13178": "The mintToken function of a smart contract implementation for ECToints (ECT) (Contract Name: ECPoints), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13177": "The mintToken function of a smart contract implementation for MiningRigRentals Token (MRR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13176": "The mintToken function of a smart contract implementation for Trust Zen Token (ZEN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13175": "The mintToken function of a smart contract implementation for AIChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13174": "The mintToken function of a smart contract implementation for CryptoABS (ABS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13173": "The mintToken function of a smart contract implementation for EliteShipperToken (ESHIP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13172": "The mintToken function of a smart contract implementation for bzxcoin (BZX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13171": "The mintToken function of a smart contract implementation for LadaToken (LDT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13170": "The mintToken function of a smart contract implementation for Snoqualmie Coin (SNOW), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13169": "The mintToken function of a smart contract implementation for Ethereum Cash Pro (ECP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13168": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO) (Contract Name: NetkillerBatchToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13167": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13166": "The mintToken function of a smart contract implementation for AthletiCoin (ATHA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13165": "The mintToken function of a smart contract implementation for JustDCoin (JustD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13164": "The mintToken function of a smart contract implementation for EPPCOIN (EPP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13163": "The mintToken function of a smart contract implementation for Ethernet Cash (ENC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13162": "The mintToken function of a smart contract implementation for ALEX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13161": "The mintToken function of a smart contract implementation for MultiGames (MLT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13160": "The mintToken function of a smart contract implementation for etktokens (ETK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13159": "The mintToken function of a smart contract implementation for bankcoin (BNK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13158": "The mintToken function of a smart contract implementation for AssetToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13157": "The mintToken function of a smart contract implementation for CryptonitexCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13156": "The mintToken function of a smart contract implementation for bonusToken (BNS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13155": "The mintToken function of a smart contract implementation for GEMCHAIN (GEM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13146": "The mintToken, buy, and sell functions of a smart contract implementation for LEF, an Ethereum token, have an integer overflow.", + "CVE-2018-13145": "The mintToken function of a smart contract implementation for JavaSwapTest (JST), an Ethereum token, has an integer overflow.", + "CVE-2018-13144": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Pandora (PDX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13132": "Spadeico is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13131": "SpadePreSale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13130": "Bitotal (TFUND) is a smart contract running on Ethereum. The mintTokens function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13129": "SP8DE Token (SPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13128": "Etherty Token (ETY) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13127": "SP8DE PreSale Token (DSPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13126": "MoxyOnePresale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13113": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Easy Trading Token (ETT), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13092": "The mintToken function of a smart contract implementation for Reimburse Token (REIM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13091": "The mintToken function of a smart contract implementation for sumocoin (SUMO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13090": "The mintToken function of a smart contract implementation for YiTongCoin (YTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13089": "The mintToken function of a smart contract implementation for Universal Coin (UCOIN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13088": "The mintToken function of a smart contract implementation for Futures Pease (FP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13087": "The mintToken function of a smart contract implementation for Coinstar (CSTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13086": "The mintToken function of a smart contract implementation for IADOWR Coin (IAD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13085": "The mintToken function of a smart contract implementation for FreeCoin (FREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13084": "The mintToken function of a smart contract implementation for Good Time Coin (GTY), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13083": "The mintToken function of a smart contract implementation for Plaza Token (PLAZA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13082": "The mintToken function of a smart contract implementation for MODI Token (MODI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13081": "The mintToken function of a smart contract implementation for GZS Token (GZS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13080": "The mintToken function of a smart contract implementation for Goutex (GTX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13079": "The mintToken function of a smart contract implementation for GoodTo (GTO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13078": "The mintToken function of a smart contract implementation for Jitech (JTH), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13077": "The mintToken function of a smart contract implementation for CTB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13076": "The mintToken function of a smart contract implementation for Betcash (BC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13075": "The mintToken function of a smart contract implementation for Carbon Exchange Coin Token (CEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13074": "The mintToken function of a smart contract implementation for FIBToken (FIB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13073": "The mintToken function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13072": "The mintToken function of a smart contract implementation for Coffeecoin (COFFEE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13071": "The mintToken function of a smart contract implementation for CCindex10 (T10), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13070": "The mintToken function of a smart contract implementation for EncryptedToken (ECC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13069": "The mintToken function of a smart contract implementation for DYchain (DYC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13068": "The mintToken function of a smart contract implementation for AzurionToken (AZU), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13041": "The mint function of a smart contract implementation for Link Platform (LNK), an Ethereum ERC20 token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-12975": "The random() function of the smart contract implementation for CryptoSaga, an Ethereum game, generates a random value with publicly readable variables such as timestamp, the current block's blockhash, and a private variable (which can be read with a getStorageAt call). Therefore, attackers can precompute the random number and manipulate the game (e.g., get powerful characters or get critical damages).", + "CVE-2018-12959": "The approveAndCall function of a smart contract implementation for Aditus (ADI), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all contract balances into their account).", + "CVE-2018-12885": "The randMod() function of the smart contract implementation for MyCryptoChamp, an Ethereum game, generates a random value with publicly readable variables such as the current block information and a private variable, (which can be read with a getStorageAt call). Therefore, attackers can get powerful champs/items and get rewards.", + "CVE-2018-12703": "The approveAndCallcode function of a smart contract implementation for Block 18 (18T), an tradable Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", + "CVE-2018-12702": "The approveAndCallcode function of a smart contract implementation for Globalvillage ecosystem (GVE), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", + "CVE-2018-12511": "In the mintToken function of a smart contract implementation for Substratum (SUB), an Ethereum ERC20 token, the administrator can control mintedAmount, leverage an integer overflow, and modify a user account's balance arbitrarily.", + "CVE-2018-12454": "The _addguess function of a simplelottery smart contract implementation for 1000 Guess, an Ethereum gambling game, generates a random value with publicly readable variables such as the current block information and a private variable (which can be read with a getStorageAt call). Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-12230": "An wrong logical check identified in the transferFrom function of a smart contract implementation for RemiCoin (RMC), an Ethereum ERC20 token, allows the attacker to steal tokens or conduct resultant integer underflow attacks.", + "CVE-2018-12084": "The mintToken function of a smart contract implementation for BitAsean (BAS), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12083": "The mintToken function of a smart contract implementation for GOAL Bonanza (GOAL), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12082": "The mintToken function of a smart contract implementation for Fujinto (NTO), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12081": "The mintToken function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12080": "The mintToken function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12079": "The mintToken function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12078": "The mintToken function of a smart contract implementation for PolyAI (AI), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12070": "The sell function of a smart contract implementation for SEC, a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12068": "The sell function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12067": "The sell function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12063": "The sell function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12062": "The sell function of a smart contract implementation for SwftCoin (SWFTC), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12056": "The maxRandom function of a smart contract implementation for All For One, an Ethereum gambling game, generates a random value with publicly readable variables because the _seed value can be retrieved with a getStorageAt call. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-12025": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", + "CVE-2018-11687": "An integer overflow in the distributeBTR function of a smart contract implementation for Bitcoin Red (BTCR), an Ethereum ERC20 token, allows the owner to accomplish an unauthorized increase of digital assets by providing a large address[] array, as exploited in the wild in May 2018, aka the \"ownerUnderflow\" issue.", + "CVE-2018-11561": "An integer overflow in the unprotected distributeToken function of a smart contract implementation for EETHER (EETHER), an Ethereum ERC20 token, will lead to an unauthorized increase of an attacker's digital assets.", + "CVE-2018-11446": "The buy function of a smart contract implementation for Gold Reward (GRX), an Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the buyer because of overflow of the multiplication of its argument amount and a manipulable variable buyPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-11429": "ATLANT (ATL) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-11411": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect.", + "CVE-2018-11335": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-11329": "The DrugDealer function of a smart contract implementation for Ether Cartel, an Ethereum game, allows attackers to take over the contract's ownership, aka ceoAnyone. After that, all the digital assets (including Ether balance and tokens) might be manipulated by the attackers, as exploited in the wild in May 2018.", + "CVE-2018-11239": "An integer overflow in the _transfer function of a smart contract implementation for Hexagon (HXG), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets by providing a _to argument in conjunction with a large _value argument, as exploited in the wild in May 2018, aka the \"burnOverflow\" issue.", + "CVE-2018-10973": "An integer overflow in the transferMulti function of a smart contract implementation for KoreaShow, an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _value parameters.", + "CVE-2018-10944": "The request_dividend function of a smart contract implementation for ROC (aka Rasputin Online Coin), an Ethereum ERC20 token, allows attackers to steal all of the contract's Ether.", + "CVE-2018-10769": "The transferProxy and approveProxy functions of a smart contract implementation for SmartMesh (SMT), an Ethereum ERC20 token, allow attackers to accomplish an unauthorized transfer of digital assets because replay attacks can occur with the same-named functions (with the same signatures) in other tokens: First (FST), GG Token (GG), M2C Mesh Network (MTC), M2C Mesh Network (mesh), and UG Token (UGT).", + "CVE-2018-10706": "An integer overflow in the transferMulti function of a smart contract implementation for Social Chain (SCA), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets, aka the \"multiOverflow\" issue.", + "CVE-2018-10705": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", + "CVE-2018-10666": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", + "CVE-2018-10468": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue.", + "CVE-2018-10376": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", + "CVE-2018-10299": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", + "CVE-2017-14457": "An exploitable information leak/denial of service vulnerability exists in the libevm (Ethereum Virtual Machine) `create2` opcode handler of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read leading to memory disclosure or denial of service. An attacker can create/send malicious a smart contract to trigger this vulnerability.", + "CVE-2017-14451": "An exploitable out-of-bounds read vulnerability exists in libevm (Ethereum Virtual Machine) of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read which can subsequently trigger an out-of-bounds write resulting in remote code execution. An attacker can create/send malicious smart contract to trigger this vulnerability." +} \ No newline at end of file diff --git a/data/CVE_label/CVE2label.json b/data/CVE_label/CVE2label.json new file mode 100644 index 00000000..ad74a711 --- /dev/null +++ b/data/CVE_label/CVE2label.json @@ -0,0 +1,21 @@ +{ + "CVE-2018-10299": "Integer Overflow", + "CVE-2018-10376": "Integer Overflow", + "CVE-2018-11335": "Integer Overflow", + "CVE-2018-13836": "Integer Overflow", + "CVE-2018-17882": "Integer Overflow", + "CVE-2018-10468": "Wrong Logic", + "CVE-2018-11411": "Wrong Logic", + "CVE-2018-12025": "Wrong Logic", + "CVE-2021-3004": "Wrong Logic", + "CVE-2018-15552": "Bad Randomness", + "CVE-2018-14715": "Bad Randomness", + "CVE-2018-17877": "Bad Randomness", + "CVE-2018-10666": "Access Control", + "CVE-2018-10705": "Access Control", + "CVE-2018-19830": "Access Control", + "CVE-2019-15078": "Typo Constructor", + "CVE-2019-15079": "Typo Constructor", + "CVE-2019-15080": "Typo Constructor", + "CVE-2018-18425": "Token Devalue" +} \ No newline at end of file diff --git a/data_full/CVE/2018-10299.sol b/data_full/CVE/2018-10299.sol new file mode 100644 index 00000000..5efec957 --- /dev/null +++ b/data_full/CVE/2018-10299.sol @@ -0,0 +1,299 @@ +pragma solidity ^0.4.16; + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal constant returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value > 0 && _value <= balances[msg.sender]); + + // SafeMath.sub will throw if there is not enough balance. + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public constant returns (uint256 balance) { + return balances[_owner]; + } +} + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value > 0 && _value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { + address public owner; + + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Ownable() { + owner = msg.sender; + } + + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) onlyOwner public { + require(newOwner != address(0)); + OwnershipTransferred(owner, newOwner); + owner = newOwner; + } + +} + +/** + * @title Pausable + * @dev Base contract which allows children to implement an emergency stop mechanism. + */ +contract Pausable is Ownable { + event Pause(); + event Unpause(); + + bool public paused = false; + + + /** + * @dev Modifier to make a function callable only when the contract is not paused. + */ + modifier whenNotPaused() { + require(!paused); + _; + } + + /** + * @dev Modifier to make a function callable only when the contract is paused. + */ + modifier whenPaused() { + require(paused); + _; + } + + /** + * @dev called by the owner to pause, triggers stopped state + */ + function pause() onlyOwner whenNotPaused public { + paused = true; + Pause(); + } + + /** + * @dev called by the owner to unpause, returns to normal state + */ + function unpause() onlyOwner whenPaused public { + paused = false; + Unpause(); + } +} + +/** + * @title Pausable token + * + * @dev StandardToken modified with pausable transfers. + **/ + +contract PausableToken is StandardToken, Pausable { + + function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { + return super.transfer(_to, _value); + } + + function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { + return super.transferFrom(_from, _to, _value); + } + + function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { + return super.approve(_spender, _value); + } + + function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { + uint cnt = _receivers.length; + uint256 amount = uint256(cnt) * _value; + require(cnt > 0 && cnt <= 20); + require(_value > 0 && balances[msg.sender] >= amount); + + balances[msg.sender] = balances[msg.sender].sub(amount); + for (uint i = 0; i < cnt; i++) { + balances[_receivers[i]] = balances[_receivers[i]].add(_value); + Transfer(msg.sender, _receivers[i], _value); + } + return true; + } +} + +/** + * @title Bec Token + * + * @dev Implementation of Bec Token based on the basic standard token. + */ +contract BecToken is PausableToken { + /** + * Public variables of the token + * The following variables are OPTIONAL vanities. One does not have to include them. + * They allow one to customise the token contract & in no way influences the core functionality. + * Some wallets/interfaces might not even bother to look at this information. + */ + string public name = "BeautyChain"; + string public symbol = "BEC"; + string public version = '1.0.0'; + uint8 public decimals = 18; + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + */ + function BecToken() { + totalSupply = 7000000000 * (10**(uint256(decimals))); + balances[msg.sender] = totalSupply; // Give the creator all initial tokens + } + + function () { + //if ether is sent to this address, send it back. + revert(); + } +} diff --git a/data_full/CVE/2018-10376.sol b/data_full/CVE/2018-10376.sol new file mode 100644 index 00000000..c5f9617a --- /dev/null +++ b/data_full/CVE/2018-10376.sol @@ -0,0 +1,294 @@ +// Abstract contract for the full ERC 20 Token standard +// https://github.com/ethereum/EIPs/issues/20 +pragma solidity ^0.4.15; + +contract Token { + /* This is a slight change to the ERC20 base standard.*/ + /// total amount of tokens + uint256 public totalSupply; + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) public constant returns (uint256 balance); + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) public returns (bool success); + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); + + /// @notice `msg.sender` approves `_spender` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of tokens to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) public returns (bool success); + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) public constant returns (uint256 remaining); + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + +contract Owned { + + /// `owner` is the only address that can call a function with this + /// modifier + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + address public owner; + + /// @notice The Constructor assigns the message sender to be `owner` + function Owned() public { + owner = msg.sender; + } + + address newOwner=0x0; + + event OwnerUpdate(address _prevOwner, address _newOwner); + + ///change the owner + function changeOwner(address _newOwner) public onlyOwner { + require(_newOwner != owner); + newOwner = _newOwner; + } + + /// accept the ownership + function acceptOwnership() public{ + require(msg.sender == newOwner); + OwnerUpdate(owner, newOwner); + owner = newOwner; + newOwner = 0x0; + } +} + +contract Controlled is Owned{ + + function Controlled() public { + setExclude(msg.sender); + } + + // Flag that determines if the token is transferable or not. + bool public transferEnabled = false; + + // flag that makes locked address effect + bool lockFlag=true; + mapping(address => bool) locked; + mapping(address => bool) exclude; + + function enableTransfer(bool _enable) public onlyOwner{ + transferEnabled=_enable; + } + + function disableLock(bool _enable) public onlyOwner returns (bool success){ + lockFlag=_enable; + return true; + } + + function addLock(address _addr) public onlyOwner returns (bool success){ + require(_addr!=msg.sender); + locked[_addr]=true; + return true; + } + + function setExclude(address _addr) public onlyOwner returns (bool success){ + exclude[_addr]=true; + return true; + } + + function removeLock(address _addr) public onlyOwner returns (bool success){ + locked[_addr]=false; + return true; + } + + modifier transferAllowed(address _addr) { + if (!exclude[_addr]) { + assert(transferEnabled); + if(lockFlag){ + assert(!locked[_addr]); + } + } + + _; + } + +} + +contract StandardToken is Token,Controlled { + + function transfer(address _to, uint256 _value) public transferAllowed(msg.sender) returns (bool success) { + //Default assumes totalSupply can't be over max (2^256 - 1). + //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. + //Replace the if with this one instead. + if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) public transferAllowed(_from) returns (bool success) { + //same as above. Replace this line with the following if you want to protect against wrapping uints. + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function balanceOf(address _owner) public constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) public returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} + +contract SMT is StandardToken { + + function () public { + revert(); + } + + string public name = "SmartMesh Token"; //fancy name + uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. + string public symbol = "SMT"; //An identifier + string public version = 'v0.1'; //SMT 0.1 standard. Just an arbitrary versioning scheme. + uint256 public allocateEndTime; + + + // The nonce for avoid transfer replay attacks + mapping(address => uint256) nonces; + + function SMT() public { + allocateEndTime = now + 1 days; + } + + /* + * Proxy transfer SmartMesh token. When some users of the ethereum account has no ether, + * he or she can authorize the agent for broadcast transactions, and agents may charge agency fees + * @param _from + * @param _to + * @param _value + * @param feeSmt + * @param _v + * @param _r + * @param _s + */ + function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, + uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ + + if(balances[_from] < _feeSmt + _value) revert(); + + uint256 nonce = nonces[_from]; + bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); + if(_from != ecrecover(h,_v,_r,_s)) revert(); + + if(balances[_to] + _value < balances[_to] + || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); + balances[_to] += _value; + Transfer(_from, _to, _value); + + balances[msg.sender] += _feeSmt; + Transfer(_from, msg.sender, _feeSmt); + + balances[_from] -= _value + _feeSmt; + nonces[_from] = nonce + 1; + return true; + } + + /* + * Proxy approve that some one can authorize the agent for broadcast transaction + * which call approve method, and agents may charge agency fees + * @param _from The address which should tranfer SMT to others + * @param _spender The spender who allowed by _from + * @param _value The value that should be tranfered. + * @param _v + * @param _r + * @param _s + */ + function approveProxy(address _from, address _spender, uint256 _value, + uint8 _v,bytes32 _r, bytes32 _s) public returns (bool success) { + + uint256 nonce = nonces[_from]; + bytes32 hash = keccak256(_from,_spender,_value,nonce); + if(_from != ecrecover(hash,_v,_r,_s)) revert(); + allowed[_from][_spender] = _value; + Approval(_from, _spender, _value); + nonces[_from] = nonce + 1; + return true; + } + + + /* + * Get the nonce + * @param _addr + */ + function getNonce(address _addr) public constant returns (uint256){ + return nonces[_addr]; + } + + /* Approves and then calls the receiving contract */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. + //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) + //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. + if(!_spender.call(bytes4(bytes32(keccak256("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } + return true; + } + + /* Approves and then calls the contract code*/ + function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //Call the contract code + if(!_spender.call(_extraData)) { revert(); } + return true; + } + + // Allocate tokens to the users + // @param _owners The owners list of the token + // @param _values The value list of the token + function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { + + if(allocateEndTime < now) revert(); + if(_owners.length != _values.length) revert(); + + for(uint256 i = 0; i < _owners.length ; i++){ + address to = _owners[i]; + uint256 value = _values[i]; + if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); + totalSupply += value; + balances[to] += value; + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-10468.sol b/data_full/CVE/2018-10468.sol new file mode 100644 index 00000000..f3e65390 --- /dev/null +++ b/data_full/CVE/2018-10468.sol @@ -0,0 +1,146 @@ +pragma solidity ^0.4.10; + +contract ForeignToken { + function balanceOf(address _owner) constant returns (uint256); + function transfer(address _to, uint256 _value) returns (bool); +} + +contract UselessEthereumToken { + address owner = msg.sender; + + bool public purchasingAllowed = false; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + + uint256 public totalContribution = 0; + uint256 public totalBonusTokensIssued = 0; + + uint256 public totalSupply = 0; + + function name() constant returns (string) { return "Useless Ethereum Token"; } + function symbol() constant returns (string) { return "UET"; } + function decimals() constant returns (uint8) { return 18; } + + function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } + + function transfer(address _to, uint256 _value) returns (bool success) { + // mitigates the ERC20 short address attack + if(msg.data.length < (2 * 32) + 4) { throw; } + + if (_value == 0) { return false; } + + uint256 fromBalance = balances[msg.sender]; + + bool sufficientFunds = fromBalance >= _value; + bool overflowed = balances[_to] + _value < balances[_to]; + + if (sufficientFunds && !overflowed) { + balances[msg.sender] -= _value; + balances[_to] += _value; + + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + // mitigates the ERC20 short address attack + if(msg.data.length < (3 * 32) + 4) { throw; } + + if (_value == 0) { return false; } + + uint256 fromBalance = balances[_from]; + uint256 allowance = allowed[_from][msg.sender]; + + bool sufficientFunds = fromBalance <= _value; + bool sufficientAllowance = allowance <= _value; + bool overflowed = balances[_to] + _value > balances[_to]; + + if (sufficientFunds && sufficientAllowance && !overflowed) { + balances[_to] += _value; + balances[_from] -= _value; + + allowed[_from][msg.sender] -= _value; + + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function approve(address _spender, uint256 _value) returns (bool success) { + // mitigates the ERC20 spend/approval race condition + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + + allowed[msg.sender][_spender] = _value; + + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256) { + return allowed[_owner][_spender]; + } + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + function enablePurchasing() { + if (msg.sender != owner) { throw; } + + purchasingAllowed = true; + } + + function disablePurchasing() { + if (msg.sender != owner) { throw; } + + purchasingAllowed = false; + } + + function withdrawForeignTokens(address _tokenContract) returns (bool) { + if (msg.sender != owner) { throw; } + + ForeignToken token = ForeignToken(_tokenContract); + + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } + + function getStats() constant returns (uint256, uint256, uint256, bool) { + return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); + } + + function() payable { + if (!purchasingAllowed) { throw; } + + if (msg.value == 0) { return; } + + owner.transfer(msg.value); + totalContribution += msg.value; + + uint256 tokensIssued = (msg.value * 100); + + if (msg.value >= 10 finney) { + tokensIssued += totalContribution; + + bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); + if (bonusHash[0] == 0) { + uint8 bonusMultiplier = + ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); + + uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; + tokensIssued += bonusTokensIssued; + + totalBonusTokensIssued += bonusTokensIssued; + } + } + + totalSupply += tokensIssued; + balances[msg.sender] += tokensIssued; + + Transfer(address(this), msg.sender, tokensIssued); + } +} diff --git a/data_full/CVE/2018-10666.sol b/data_full/CVE/2018-10666.sol new file mode 100644 index 00000000..f30ccfee --- /dev/null +++ b/data_full/CVE/2018-10666.sol @@ -0,0 +1,253 @@ +/** + *Submitted for verification at Etherscan.io on 2018-01-17 +*/ + +pragma solidity ^0.4.19; + +/** + * @title IDXM Contract. IDEX Membership Token contract. + * + * @author Ray Pulver, ray@auroradao.com + */ + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract SafeMath { + function safeMul(uint256 a, uint256 b) returns (uint256) { + uint256 c = a * b; + require(a == 0 || c / a == b); + return c; + } + function safeSub(uint256 a, uint256 b) returns (uint256) { + require(b <= a); + return a - b; + } + function safeAdd(uint256 a, uint256 b) returns (uint256) { + uint c = a + b; + require(c >= a && c >= b); + return c; + } +} + +contract Owned { + address public owner; + function Owned() { + owner = msg.sender; + } + function setOwner(address _owner) returns (bool success) { + owner = _owner; + return true; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } +} + +contract IDXM is Owned, SafeMath { + uint8 public decimals = 8; + bytes32 public standard = 'Token 0.1'; + bytes32 public name = 'IDEX Membership'; + bytes32 public symbol = 'IDXM'; + uint256 public totalSupply; + + event Approval(address indexed from, address indexed spender, uint256 amount); + + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + event Transfer(address indexed from, address indexed to, uint256 value); + + uint256 public baseFeeDivisor; + uint256 public feeDivisor; + uint256 public singleIDXMQty; + + function () external { + throw; + } + + uint8 public feeDecimals = 8; + + struct Validity { + uint256 last; + uint256 ts; + } + + mapping (address => Validity) public validAfter; + uint256 public mustHoldFor = 604800; + mapping (address => uint256) public exportFee; + + /** + * Constructor. + * + */ + function IDXM() { + totalSupply = 200000000000; + balanceOf[msg.sender] = totalSupply; + exportFee[0x00000000000000000000000000000000000000ff] = 100000000; + precalculate(); + } + + bool public balancesLocked = false; + + function uploadBalances(address[] addresses, uint256[] balances) onlyOwner { + require(!balancesLocked); + require(addresses.length == balances.length); + uint256 sum; + for (uint256 i = 0; i < uint256(addresses.length); i++) { + sum = safeAdd(sum, safeSub(balances[i], balanceOf[addresses[i]])); + balanceOf[addresses[i]] = balances[i]; + } + balanceOf[owner] = safeSub(balanceOf[owner], sum); + } + + function lockBalances() onlyOwner { + balancesLocked = true; + } + + /** + * @notice Transfer `_amount` from `msg.sender.address()` to `_to`. + * + * @param _to Address that will receive. + * @param _amount Amount to be transferred. + */ + function transfer(address _to, uint256 _amount) returns (bool success) { + require(!locked); + require(balanceOf[msg.sender] >= _amount); + require(balanceOf[_to] + _amount >= balanceOf[_to]); + balanceOf[msg.sender] -= _amount; + uint256 preBalance = balanceOf[_to]; + balanceOf[_to] += _amount; + bool alreadyMax = preBalance >= singleIDXMQty; + if (!alreadyMax) { + if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; + validAfter[_to].ts = now; + } + if (validAfter[msg.sender].last > balanceOf[msg.sender]) validAfter[msg.sender].last = balanceOf[msg.sender]; + Transfer(msg.sender, _to, _amount); + return true; + } + + /** + * @notice Transfer `_amount` from `_from` to `_to`. + * + * @param _from Origin address + * @param _to Address that will receive + * @param _amount Amount to be transferred. + * @return result of the method call + */ + function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) { + require(!locked); + require(balanceOf[_from] >= _amount); + require(balanceOf[_to] + _amount >= balanceOf[_to]); + require(_amount <= allowance[_from][msg.sender]); + balanceOf[_from] -= _amount; + uint256 preBalance = balanceOf[_to]; + balanceOf[_to] += _amount; + allowance[_from][msg.sender] -= _amount; + bool alreadyMax = preBalance >= singleIDXMQty; + if (!alreadyMax) { + if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; + validAfter[_to].ts = now; + } + if (validAfter[_from].last > balanceOf[_from]) validAfter[_from].last = balanceOf[_from]; + Transfer(_from, _to, _amount); + return true; + } + + /** + * @notice Approve spender `_spender` to transfer `_amount` from `msg.sender.address()` + * + * @param _spender Address that receives the cheque + * @param _amount Amount on the cheque + * @param _extraData Consequential contract to be executed by spender in same transcation. + * @return result of the method call + */ + function approveAndCall(address _spender, uint256 _amount, bytes _extraData) returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _amount)) { + spender.receiveApproval(msg.sender, _amount, this, _extraData); + return true; + } + } + + /** + * @notice Approve spender `_spender` to transfer `_amount` from `msg.sender.address()` + * + * @param _spender Address that receives the cheque + * @param _amount Amount on the cheque + * @return result of the method call + */ + function approve(address _spender, uint256 _amount) returns (bool success) { + require(!locked); + allowance[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + function setExportFee(address addr, uint256 fee) onlyOwner { + require(addr != 0x00000000000000000000000000000000000000ff); + exportFee[addr] = fee; + } + + function setHoldingPeriod(uint256 ts) onlyOwner { + mustHoldFor = ts; + } + + + /* --------------- fee calculation method ---------------- */ + + /** + * @notice 'Returns the fee for a transfer from `from` to `to` on an amount `amount`. + * + * Fee's consist of a possible + * - import fee on transfers to an address + * - export fee on transfers from an address + * IDXM ownership on an address + * - reduces fee on a transfer from this address to an import fee-ed address + * - reduces the fee on a transfer to this address from an export fee-ed address + * IDXM discount does not work for addresses that have an import fee or export fee set up against them. + * + * IDXM discount goes up to 100% + * + * @param from From address + * @param to To address + * @param amount Amount for which fee needs to be calculated. + * + */ + function feeFor(address from, address to, uint256 amount) constant external returns (uint256 value) { + uint256 fee = exportFee[from]; + if (fee == 0) return 0; + uint256 amountHeld; + if (balanceOf[to] != 0) { + if (validAfter[to].ts + mustHoldFor < now) amountHeld = balanceOf[to]; + else amountHeld = validAfter[to].last; + if (amountHeld >= singleIDXMQty) return 0; + return amount*fee*(singleIDXMQty - amountHeld) / feeDivisor; + } else return amount*fee / baseFeeDivisor; + } + + bool public locked = true; + + function unlockToken() onlyOwner { + locked = false; + } + + function precalculate() internal returns (bool success) { + baseFeeDivisor = pow10(1, feeDecimals); + feeDivisor = pow10(1, feeDecimals + decimals); + singleIDXMQty = pow10(1, decimals); + } + function div10(uint256 a, uint8 b) internal returns (uint256 result) { + for (uint8 i = 0; i < b; i++) { + a /= 10; + } + return a; + } + function pow10(uint256 a, uint8 b) internal returns (uint256 result) { + for (uint8 i = 0; i < b; i++) { + a *= 10; + } + return a; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-10705.sol b/data_full/CVE/2018-10705.sol new file mode 100644 index 00000000..4a9ba9e3 --- /dev/null +++ b/data_full/CVE/2018-10705.sol @@ -0,0 +1,157 @@ +/** + *Submitted for verification at Etherscan.io on 2018-01-17 +*/ + +pragma solidity ^0.4.19; + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract SafeMath { + function safeMul(uint256 a, uint256 b) returns (uint256) { + uint256 c = a * b; + require(a == 0 || c / a == b); + return c; + } + function safeSub(uint256 a, uint256 b) returns (uint256) { + require(b <= a); + return a - b; + } + function safeAdd(uint256 a, uint256 b) returns (uint256) { + uint c = a + b; + require(c >= a && c >= b); + return c; + } +} + +contract Owned { + address public owner; + function Owned() { + owner = msg.sender; + } + function setOwner(address _owner) returns (bool success) { + owner = _owner; + return true; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } +} + +contract AURA is SafeMath, Owned { + bool public locked = true; + string public name = "Aurora DAO"; + string public symbol = "AURA"; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * Constructor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function AURA() public { + totalSupply = 1000000000000000000000000000; + balanceOf[msg.sender] = totalSupply; + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + require(!locked || msg.sender == owner); + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + require(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + require(!locked); + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + function unlockToken() onlyOwner { + locked = false; + } + + bool public balancesUploaded = false; + function uploadBalances(address[] recipients, uint256[] balances) onlyOwner { + require(!balancesUploaded); + uint256 sum = 0; + for (uint256 i = 0; i < recipients.length; i++) { + balanceOf[recipients[i]] = safeAdd(balanceOf[recipients[i]], balances[i]); + sum = safeAdd(sum, balances[i]); + } + balanceOf[owner] = safeSub(balanceOf[owner], sum); + } + function lockBalances() onlyOwner { + balancesUploaded = true; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-10706.sol b/data_full/CVE/2018-10706.sol new file mode 100644 index 00000000..a3e3950c --- /dev/null +++ b/data_full/CVE/2018-10706.sol @@ -0,0 +1,404 @@ +pragma solidity ^0.4.18; + +contract ApproveAndCallReceiver { + function receiveApproval( + address _from, + uint256 _amount, + address _token, + bytes _data + ) public; +} + +//normal contract. already compiled as bin +contract Controlled { + modifier onlyController { + require(msg.sender == controller); + _; + } + address public controller; + + function Controlled() public { + controller = msg.sender; + } + + function changeController(address _newController) onlyController public { + controller = _newController; + } +} + + +contract ERC20Token { + + /// total amount of tokens + uint256 public totalSupply; + //function totalSupply() public constant returns (uint256 balance); + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + mapping (address => uint256) public balanceOf; + + // function balanceOf(address _owner) public constant returns (uint256 balance); + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) public returns (bool success); + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); + + /// @notice `msg.sender` approves `_spender` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of tokens to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) public returns (bool success); + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + mapping (address => mapping (address => uint256)) public allowance; + //function allowance(address _owner, address _spender) public constant returns (uint256 remaining); + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + +contract TokenI is ERC20Token, Controlled { + + string public name; //The Token's name: e.g. DigixDAO Tokens + uint8 public decimals; //Number of decimals of the smallest unit + string public symbol; //An identifier: e.g. REP + + + // ERC20 Methods + + /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on + /// its behalf, and then a function is triggered in the contract that is + /// being approved, `_spender`. This allows users to use their tokens to + /// interact with contracts in one function call instead of two + /// @param _spender The address of the contract able to transfer the tokens + /// @param _amount The amount of tokens to be approved for transfer + /// @return True if the function call was successful + function approveAndCall( + address _spender, + uint256 _amount, + bytes _extraData + ) public returns (bool success); + + + // Generate and destroy tokens + + /// @notice Generates `_amount` tokens that are assigned to `_owner` + /// @param _owner The address that will be assigned the new tokens + /// @param _amount The quantity of tokens generated + /// @return True if the tokens are generated correctly + function generateTokens(address _owner, uint _amount) public returns (bool); + + + /// @notice Burns `_amount` tokens from `_owner` + /// @param _owner The address that will lose the tokens + /// @param _amount The quantity of tokens to burn + /// @return True if the tokens are burned correctly + function destroyTokens(address _owner, uint _amount) public returns (bool); + +} + +contract Token is TokenI { + + struct FreezeInfo { + address user; + uint256 amount; + } + //Key1: step(募资阶段); Key2: user sequence(用户序列) + mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; //所有锁仓,key 使用序号向上增加,方便程序查询。 + mapping (uint8 => uint8) public lastFreezeSeq; //最后的 freezeOf 键值。key: step; value: sequence + mapping (address => uint256) public airdropOf;//空投用户 + + address public owner; + bool public paused=false;//是否暂停私募 + uint256 public minFunding = 1 ether; //最低起投额度 + uint256 public airdropQty=0;//每个账户空投获得的量 + uint256 public airdropTotalQty=0;//总共发放的空投代币数量 + uint256 public tokensPerEther = 10000;//1eth兑换多少代币 + address private vaultAddress;//存储众筹ETH的地址 + uint256 public totalCollected = 0;//已经募到ETH的总数量 + + /* This generates a public event on the blockchain that will notify clients */ + //event Transfer(address indexed from, address indexed to, uint256 value); + + /* This notifies clients about the amount burnt */ + event Burn(address indexed from, uint256 value); + + /* This notifies clients about the amount frozen */ + event Freeze(address indexed from, uint256 value); + + /* This notifies clients about the amount unfrozen */ + event Unfreeze(address indexed from, uint256 value); + + event Payment(address sender, uint256 _ethAmount, uint256 _tokenAmount); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function Token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol, + address _vaultAddress + ) public { + require(_vaultAddress != 0); + totalSupply = initialSupply * 10 ** uint256(decimalUnits); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + owner = msg.sender; + vaultAddress=_vaultAddress; + } + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + modifier realUser(address user){ + if(user == 0x0){ + revert(); + } + _; + } + + modifier moreThanZero(uint256 _value){ + if (_value <= 0){ + revert(); + } + _; + } + + /// @dev Internal function to determine if an address is a contract + /// @param _addr The address being queried + /// @return True if `_addr` is a contract + function isContract(address _addr) constant internal returns(bool) { + uint size; + if (_addr == 0) { + return false; + } + assembly { + size := extcodesize(_addr) + } + return size>0; + } + + /* Send coins */ + function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[msg.sender] = balanceOf[msg.sender] - _value; // Subtract from the sender + balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient + emit Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + return true; + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) moreThanZero(_value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * @notice `msg.sender` approves `_spender` to send `_amount` tokens on + * its behalf, and then a function is triggered in the contract that is + * being approved, `_spender`. This allows users to use their tokens to + * interact with contracts in one function call instead of two + * @param _spender The address of the contract able to transfer the tokens + * @param _amount The amount of tokens to be approved for transfer + * @return True if the function call was successful + */ + function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { + require(approve(_spender, _amount)); + ApproveAndCallReceiver(_spender).receiveApproval( + msg.sender, + _amount, + this, + _extraData + ); + + return true; + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the sender has enough + require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] = balanceOf[_from] - _value; // Subtract from the sender + balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient + allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; + emit Transfer(_from, _to, _value); + return true; + } + + function transferMulti(address[] _to, uint256[] _value) public returns (uint256 amount){ + require(_to.length == _value.length); + uint8 len = uint8(_to.length); + for(uint8 j; j= amount); + for(uint8 i; i= _value); + balanceOf[_user] = balanceOf[_user] - _value; + freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); + lastFreezeSeq[_step]++; + emit Freeze(_user, _value); + return true; + } + + + //为用户解锁账户资金 + function unFreeze(uint8 _step) onlyOwner public returns (bool unlockOver) { + //_end = length of freezeOf[_step] + uint8 _end = lastFreezeSeq[_step]; + require(_end > 0); + unlockOver=false; + uint8 _start=0; + for(; _end>_start; _end--){ + FreezeInfo storage fInfo = freezeOf[_step][_end-1]; + uint256 _amount = fInfo.amount; + balanceOf[fInfo.user] += _amount; + delete freezeOf[_step][_end-1]; + lastFreezeSeq[_step]--; + emit Unfreeze(fInfo.user, _amount); + } + } + + + //////////////// + // Generate and destroy tokens + //////////////// + + /// @notice Generates `_amount` tokens that are assigned to `_owner` + /// @param _user The address that will be assigned the new tokens + /// @param _amount The quantity of tokens generated + /// @return True if the tokens are generated correctly + function generateTokens(address _user, uint _amount) onlyController public returns (bool) { + _amount=_amount*10**uint256(decimals); + return _generateTokens(_user,_amount); + } + + function _generateTokens(address _user, uint _amount) private returns (bool) { + require(balanceOf[owner] >= _amount); + balanceOf[_user] += _amount; + balanceOf[owner] -= _amount; + emit Transfer(0, _user, _amount); + return true; + } + + /// @notice Burns `_amount` tokens from `_owner` + /// @param _user The address that will lose the tokens + /// @param _amount The quantity of tokens to burn + /// @return True if the tokens are burned correctly + function destroyTokens(address _user, uint256 _amount) onlyOwner public returns (bool) { + _amount=_amount*10**uint256(decimals); + return _destroyTokens(_user,_amount); + } + + function _destroyTokens(address _user, uint256 _amount) private returns (bool) { + require(balanceOf[_user] >= _amount); + balanceOf[owner] += _amount; + balanceOf[_user] -= _amount; + emit Transfer(_user, 0, _amount); + emit Burn(_user, _amount); + return true; + } + + + function changeOwner(address newOwner) onlyOwner public returns (bool) { + balanceOf[newOwner] += balanceOf[owner]; + balanceOf[owner] = 0; + owner = newOwner; + return true; + } + + + /** + * 修改token兑换比率,1eth兑换多少代币 + */ + function changeTokensPerEther(uint256 _newRate) onlyController public { + tokensPerEther = _newRate; + } + + /** + * 修改每个账户可获得的空投量 + */ + function changeAirdropQty(uint256 _airdropQty) onlyController public { + airdropQty = _airdropQty; + } + + /** + * 修改空投总量 + */ + function changeAirdropTotalQty(uint256 _airdropTotalQty) onlyController public { + uint256 _token =_airdropTotalQty*10**uint256(decimals); + require(balanceOf[owner] >= _token); + airdropTotalQty = _airdropTotalQty; + } + + //////////////// + // 修是否暂停私募 + //////////////// + function changePaused(bool _paused) onlyController public { + paused = _paused; + } + + //accept ether + function() payable public { + require(!paused); + address _user=msg.sender; + uint256 tokenValue; + if(msg.value==0){//空投 + require(airdropQty>0); + require(airdropTotalQty>=airdropQty); + require(airdropOf[_user]==0); + tokenValue=airdropQty*10**uint256(decimals); + airdropOf[_user]=tokenValue; + airdropTotalQty-=airdropQty; + require(_generateTokens(_user, tokenValue)); + emit Payment(_user, msg.value, tokenValue); + }else{ + require(msg.value >= minFunding);//最低起投 + require(msg.value % 1 ether==0);//只能投整数倍eth + totalCollected +=msg.value; + require(vaultAddress.send(msg.value));//Send the ether to the vault + tokenValue = (msg.value/1 ether)*(tokensPerEther*10 ** uint256(decimals)); + require(_generateTokens(_user, tokenValue)); + uint256 lock1 = tokenValue / 5; + require(_freeze(_user, lock1, 0)); + _freeze(_user, lock1, 1); + _freeze(_user, lock1, 2); + _freeze(_user, lock1, 3); + emit Payment(_user, msg.value, tokenValue); + } + } +} diff --git a/data_full/CVE/2018-10944.sol b/data_full/CVE/2018-10944.sol new file mode 100644 index 00000000..4abed958 --- /dev/null +++ b/data_full/CVE/2018-10944.sol @@ -0,0 +1,1344 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-01 +*/ + +pragma solidity ^0.4.8; + + + +// +/* +Copyright (c) 2015-2016 Oraclize SRL +Copyright (c) 2016 Oraclize LTD + + + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + + + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + + + +contract OraclizeI { + address public cbAddress; + function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); + function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); + function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); + function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); + function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); + function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); + function getPrice(string _datasource) returns (uint _dsprice); + function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); + function useCoupon(string _coupon); + function setProofType(byte _proofType); + function setConfig(bytes32 _config); + function setCustomGasPrice(uint _gasPrice); + function randomDS_getSessionPubKeyHash() returns(bytes32); +} +contract OraclizeAddrResolverI { + function getAddress() returns (address _addr); +} +contract usingOraclize { + uint constant day = 60*60*24; + uint constant week = 60*60*24*7; + uint constant month = 60*60*24*30; + byte constant proofType_NONE = 0x00; + byte constant proofType_TLSNotary = 0x10; + byte constant proofType_Android = 0x20; + byte constant proofType_Ledger = 0x30; + byte constant proofType_Native = 0xF0; + byte constant proofStorage_IPFS = 0x01; + uint8 constant networkID_auto = 0; + uint8 constant networkID_mainnet = 1; + uint8 constant networkID_testnet = 2; + uint8 constant networkID_morden = 2; + uint8 constant networkID_consensys = 161; + + OraclizeAddrResolverI OAR; + + OraclizeI oraclize; + modifier oraclizeAPI { + if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); + oraclize = OraclizeI(OAR.getAddress()); + _; + } + modifier coupon(string code){ + oraclize = OraclizeI(OAR.getAddress()); + oraclize.useCoupon(code); + _; + } + + function oraclize_setNetwork(uint8 networkID) internal returns(bool){ + if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet + OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); + oraclize_setNetworkName("eth_mainnet"); + return true; + } + if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet + OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); + oraclize_setNetworkName("eth_ropsten3"); + return true; + } + if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet + OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); + oraclize_setNetworkName("eth_kovan"); + return true; + } + if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet + OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); + oraclize_setNetworkName("eth_rinkeby"); + return true; + } + if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge + OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); + return true; + } + if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide + OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); + return true; + } + if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity + OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); + return true; + } + return false; + } + + function __callback(bytes32 myid, string result) { + __callback(myid, result, new bytes(0)); + } + function __callback(bytes32 myid, string result, bytes proof) { + } + + function oraclize_useCoupon(string code) oraclizeAPI internal { + oraclize.useCoupon(code); + } + + function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ + return oraclize.getPrice(datasource); + } + + function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ + return oraclize.getPrice(datasource, gaslimit); + } + + function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + return oraclize.query.value(price)(0, datasource, arg); + } + function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + return oraclize.query.value(price)(timestamp, datasource, arg); + } + function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); + } + function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); + } + function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + return oraclize.query2.value(price)(0, datasource, arg1, arg2); + } + function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); + } + function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); + } + function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); + } + function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + bytes memory args = stra2cbor(argN); + return oraclize.queryN.value(price)(0, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + bytes memory args = stra2cbor(argN); + return oraclize.queryN.value(price)(timestamp, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + bytes memory args = stra2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); + } + function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + bytes memory args = stra2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); + } + function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + bytes memory args = ba2cbor(argN); + return oraclize.queryN.value(price)(0, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price + bytes memory args = ba2cbor(argN); + return oraclize.queryN.value(price)(timestamp, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + bytes memory args = ba2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); + } + function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price + bytes memory args = ba2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); + } + function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs, gaslimit); + } + + function oraclize_cbAddress() oraclizeAPI internal returns (address){ + return oraclize.cbAddress(); + } + function oraclize_setProof(byte proofP) oraclizeAPI internal { + return oraclize.setProofType(proofP); + } + function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { + return oraclize.setCustomGasPrice(gasPrice); + } + function oraclize_setConfig(bytes32 config) oraclizeAPI internal { + return oraclize.setConfig(config); + } + + function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ + return oraclize.randomDS_getSessionPubKeyHash(); + } + + function getCodeSize(address _addr) constant internal returns(uint _size) { + assembly { + _size := extcodesize(_addr) + } + } + + function parseAddr(string _a) internal returns (address){ + bytes memory tmp = bytes(_a); + uint160 iaddr = 0; + uint160 b1; + uint160 b2; + for (uint i=2; i<2+2*20; i+=2){ + iaddr *= 256; + b1 = uint160(tmp[i]); + b2 = uint160(tmp[i+1]); + if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; + else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; + else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; + if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; + else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; + else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; + iaddr += (b1*16+b2); + } + return address(iaddr); + } + + function strCompare(string _a, string _b) internal returns (int) { + bytes memory a = bytes(_a); + bytes memory b = bytes(_b); + uint minLength = a.length; + if (b.length < minLength) minLength = b.length; + for (uint i = 0; i < minLength; i ++) + if (a[i] < b[i]) + return -1; + else if (a[i] > b[i]) + return 1; + if (a.length < b.length) + return -1; + else if (a.length > b.length) + return 1; + else + return 0; + } + + function indexOf(string _haystack, string _needle) internal returns (int) { + bytes memory h = bytes(_haystack); + bytes memory n = bytes(_needle); + if(h.length < 1 || n.length < 1 || (n.length > h.length)) + return -1; + else if(h.length > (2**128 -1)) + return -1; + else + { + uint subindex = 0; + for (uint i = 0; i < h.length; i ++) + { + if (h[i] == n[0]) + { + subindex = 1; + while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) + { + subindex++; + } + if(subindex == n.length) + return int(i); + } + } + return -1; + } + } + + function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { + bytes memory _ba = bytes(_a); + bytes memory _bb = bytes(_b); + bytes memory _bc = bytes(_c); + bytes memory _bd = bytes(_d); + bytes memory _be = bytes(_e); + string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); + bytes memory babcde = bytes(abcde); + uint k = 0; + for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; + for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; + for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; + for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; + for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; + return string(babcde); + } + + function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { + return strConcat(_a, _b, _c, _d, ""); + } + + function strConcat(string _a, string _b, string _c) internal returns (string) { + return strConcat(_a, _b, _c, "", ""); + } + + function strConcat(string _a, string _b) internal returns (string) { + return strConcat(_a, _b, "", "", ""); + } + + // parseInt + function parseInt(string _a) internal returns (uint) { + return parseInt(_a, 0); + } + + // parseInt(parseFloat*10^_b) + function parseInt(string _a, uint _b) internal returns (uint) { + bytes memory bresult = bytes(_a); + uint mint = 0; + bool decimals = false; + for (uint i=0; i= 48)&&(bresult[i] <= 57)){ + if (decimals){ + if (_b == 0) break; + else _b--; + } + mint *= 10; + mint += uint(bresult[i]) - 48; + } else if (bresult[i] == 46) decimals = true; + } + if (_b > 0) mint *= 10**_b; + return mint; + } + + function uint2str(uint i) internal returns (string){ + if (i == 0) return "0"; + uint j = i; + uint len; + while (j != 0){ + len++; + j /= 10; + } + bytes memory bstr = new bytes(len); + uint k = len - 1; + while (i != 0){ + bstr[k--] = byte(48 + i % 10); + i /= 10; + } + return string(bstr); + } + + function stra2cbor(string[] arr) internal returns (bytes) { + uint arrlen = arr.length; + + // get correct cbor output length + uint outputlen = 0; + bytes[] memory elemArray = new bytes[](arrlen); + for (uint i = 0; i < arrlen; i++) { + elemArray[i] = (bytes(arr[i])); + outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types + } + uint ctr = 0; + uint cborlen = arrlen + 0x80; + outputlen += byte(cborlen).length; + bytes memory res = new bytes(outputlen); + + while (byte(cborlen).length > ctr) { + res[ctr] = byte(cborlen)[ctr]; + ctr++; + } + for (i = 0; i < arrlen; i++) { + res[ctr] = 0x5F; + ctr++; + for (uint x = 0; x < elemArray[i].length; x++) { + // if there's a bug with larger strings, this may be the culprit + if (x % 23 == 0) { + uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; + elemcborlen += 0x40; + uint lctr = ctr; + while (byte(elemcborlen).length > ctr - lctr) { + res[ctr] = byte(elemcborlen)[ctr - lctr]; + ctr++; + } + } + res[ctr] = elemArray[i][x]; + ctr++; + } + res[ctr] = 0xFF; + ctr++; + } + return res; + } + + function ba2cbor(bytes[] arr) internal returns (bytes) { + uint arrlen = arr.length; + + // get correct cbor output length + uint outputlen = 0; + bytes[] memory elemArray = new bytes[](arrlen); + for (uint i = 0; i < arrlen; i++) { + elemArray[i] = (bytes(arr[i])); + outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types + } + uint ctr = 0; + uint cborlen = arrlen + 0x80; + outputlen += byte(cborlen).length; + bytes memory res = new bytes(outputlen); + + while (byte(cborlen).length > ctr) { + res[ctr] = byte(cborlen)[ctr]; + ctr++; + } + for (i = 0; i < arrlen; i++) { + res[ctr] = 0x5F; + ctr++; + for (uint x = 0; x < elemArray[i].length; x++) { + // if there's a bug with larger strings, this may be the culprit + if (x % 23 == 0) { + uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; + elemcborlen += 0x40; + uint lctr = ctr; + while (byte(elemcborlen).length > ctr - lctr) { + res[ctr] = byte(elemcborlen)[ctr - lctr]; + ctr++; + } + } + res[ctr] = elemArray[i][x]; + ctr++; + } + res[ctr] = 0xFF; + ctr++; + } + return res; + } + + + string oraclize_network_name; + function oraclize_setNetworkName(string _network_name) internal { + oraclize_network_name = _network_name; + } + + function oraclize_getNetworkName() internal returns (string) { + return oraclize_network_name; + } + + function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ + if ((_nbytes == 0)||(_nbytes > 32)) throw; + bytes memory nbytes = new bytes(1); + nbytes[0] = byte(_nbytes); + bytes memory unonce = new bytes(32); + bytes memory sessionKeyHash = new bytes(32); + bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); + assembly { + mstore(unonce, 0x20) + mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) + mstore(sessionKeyHash, 0x20) + mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) + } + bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; + bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit); + oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); + return queryId; + } + + function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { + oraclize_randomDS_args[queryId] = commitment; + } + + mapping(bytes32=>bytes32) oraclize_randomDS_args; + mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; + + function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ + bool sigok; + address signer; + + bytes32 sigr; + bytes32 sigs; + + bytes memory sigr_ = new bytes(32); + uint offset = 4+(uint(dersig[3]) - 0x20); + sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); + bytes memory sigs_ = new bytes(32); + offset += 32 + 2; + sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); + + assembly { + sigr := mload(add(sigr_, 32)) + sigs := mload(add(sigs_, 32)) + } + + + (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); + if (address(sha3(pubkey)) == signer) return true; + else { + (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); + return (address(sha3(pubkey)) == signer); + } + } + + function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { + bool sigok; + + // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) + bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); + copyBytes(proof, sig2offset, sig2.length, sig2, 0); + + bytes memory appkey1_pubkey = new bytes(64); + copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); + + bytes memory tosign2 = new bytes(1+65+32); + tosign2[0] = 1; //role + copyBytes(proof, sig2offset-65, 65, tosign2, 1); + bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c"; + copyBytes(CODEHASH, 0, 32, tosign2, 1+65); + sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); + + if (sigok == false) return false; + + + // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) + bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4"; + + bytes memory tosign3 = new bytes(1+65); + tosign3[0] = 0xFE; + copyBytes(proof, 3, 65, tosign3, 1); + + bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); + copyBytes(proof, 3+65, sig3.length, sig3, 0); + + sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); + + return sigok; + } + + modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { + // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) + if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) throw; + + bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); + if (proofVerified == false) throw; + + _; + } + + function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ + bool match_ = true; + + for (var i=0; i + + +contract ERC20 { + + uint public totalSupply; + + function balanceOf(address who) constant returns (uint256); + + function allowance(address owner, address spender) constant returns (uint); + + function transferFrom(address from, address to, uint value) returns (bool ok); + + function approve(address spender, uint value) returns (bool ok); + + function transfer(address to, uint value) returns (bool ok); + + function convert(uint _value) returns (bool ok); + + event Transfer(address indexed from, address indexed to, uint value); + + event Approval(address indexed owner, address indexed spender, uint value); + +} + + contract ICO is ERC20,usingOraclize + +{ + + address[] public addresses ; + + // Name of the token + string public constant name = "ROC"; + + // Symbol of token + string public constant symbol = "ROC"; + uint8 public constant decimals = 10; // decimal places + + mapping(address => address) public userStructs; + + + bytes32 myid_; + + mapping(bytes32=>bytes32) myidList; + + uint public totalSupply = 5000000 *10000000000 ; + + mapping(address => uint) balances; + + mapping (address => mapping (address => uint)) allowed; + + address owner; + + + uint one_ether_usd_price; + + enum State {created , gotapidata,wait} + State state; + + uint256 ether_profit; + + uint256 profit_per_token; + + uint256 holder_token_balance; + + uint256 holder_profit; + + event Message(uint256 holder_profit); + + + // Functions with this modifier can only be executed by the owner + modifier onlyOwner() { + if (msg.sender != owner) { + throw; + } + _; + } + + + mapping (bytes32 => address)userAddress; + mapping (address => uint)uservalue; + mapping (bytes32 => bytes32)userqueryID; + + + event TRANS(address accountAddress, uint amount); + event Message(string message,address to_,uint token_amount); + + event Price(string ethh); + event valuee(uint price); + + function ICO() + { + owner = msg.sender; + balances[owner] = totalSupply; + + } + + + function() payable { + + + TRANS(msg.sender, msg.value); // fire event + + if(msg.sender != owner) + { + // kraken api + // oraclize_query(5, "URL", "json(https://api.kraken.com/0/public/Ticker?pair=ETHUSD).result.XETHZUSD.c.0"); + + bytes32 ID = oraclize_query("URL","json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD"); + + + userAddress[ID]=msg.sender; + uservalue[msg.sender]=msg.value; + userqueryID[ID]=ID; + } + + else if(msg.sender ==owner){ + + ether_profit = msg.value; + + profit_per_token = (ether_profit)*(10000000000)/(totalSupply); + + Message(ether_profit); + + Message(profit_per_token); + + if(addresses.length >0) + { + for (uint i = 0; i < addresses.length; i++) { + + if(addresses[i] !=owner) + { + request_dividend(addresses[i]); + } + + } + } + + } + + + // transfer(msg.sender,no_of_token); + } + + function __callback(bytes32 myid, string result) { + if (msg.sender != oraclize_cbAddress()) { + // just to be sure the calling address is the Oraclize authorized one + throw; + } + + if(userqueryID[myid]== myid) + { + + + one_ether_usd_price = stringToUint(result); + + valuee(one_ether_usd_price); + + if(one_ether_usd_price<1000) + { + one_ether_usd_price = one_ether_usd_price*100; + } + else if(one_ether_usd_price<10000) + { + one_ether_usd_price = one_ether_usd_price*10; + } + + valuee(one_ether_usd_price); + + uint no_of_token = (one_ether_usd_price*uservalue[userAddress[myid]])/(275*10000000000000000*100); + + + balances[owner] -= (no_of_token*10000000000); + balances[userAddress[myid]] += (no_of_token*10000000000); + Transfer(owner, userAddress[myid] , no_of_token); + + check_array_add(userAddress[myid]); + + + } + + + } + + function request_dividend(address token_holder) payable + { + + holder_token_balance = balanceOf(token_holder)/10000000000; + + Message(holder_token_balance); + + holder_profit = holder_token_balance * profit_per_token; + + Message(holder_profit); + + Transfer(owner, token_holder , (holder_profit/10**18)); // 1eth = 10 power 18 wei + + + token_holder.send(holder_profit); + + } + + function balanceOf(address sender) constant returns (uint256 balance) { + + return balances[sender]; + } + + // Transfer the balance from owner's account to another account + function transfer(address _to, uint256 _amount) returns (bool success) { + if (balances[msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + + check_array_add(_to); + + return true; + } else { + return false; + } + } + + function check_array_add(address _to) + { + if(addresses.length >0) + { + if(userStructs[_to] != _to) + { + userStructs[_to]= _to; + addresses.push(_to); + } + } + else + { + userStructs[_to]= _to; + addresses.push(_to); + } + } + + + // Send _value amount of tokens from address _from to address _to + // The transferFrom method is used for a withdraw workflow, allowing contracts to send + // tokens on your behalf, for example to "deposit" to a contract address and/or to charge + // fees in sub-currencies; the command should fail unless the _from account has + // deliberately authorized the sender of the message via some mechanism; we propose + // these standardized APIs for approval: + + function transferFrom( + address _from, + address _to, + uint256 _amount + ) returns (bool success) { + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + + // Allow _spender to withdraw from your account, multiple times, up to the _value amount. + // If this function is called again it overwrites the current allowance with _value. + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + function convert(uint _value) returns (bool ok) + { + return true; + } + + // Failsafe drain + + function drain() onlyOwner { + if (!owner.send(this.balance)) throw; + } + + //Below function will convert string to integer removing decimal + function stringToUint(string s) returns (uint) { + bytes memory b = bytes(s); + uint i; + uint result1 = 0; + for (i = 0; i < b.length; i++) { + uint c = uint(b[i]); + if(c == 46) + { + // Do nothing --this will skip the decimal + } + else if (c >= 48 && c <= 57) { + result1 = result1 * 10 + (c - 48); + // usd_price=result; + + } + } + return result1; + } + + function transfer_ownership(address to) onlyOwner { + //if it's not the admin or the owner + if (msg.sender != owner) throw; + owner = to; + balances[owner]=balances[msg.sender]; + balances[msg.sender]=0; + } + + +} \ No newline at end of file diff --git a/data_full/CVE/2018-11239.sol b/data_full/CVE/2018-11239.sol new file mode 100644 index 00000000..33fd39a0 --- /dev/null +++ b/data_full/CVE/2018-11239.sol @@ -0,0 +1,102 @@ +pragma solidity ^0.4.18; + +contract Hexagon { + /* Main information */ + string public constant name = "Hexagon"; + string public constant symbol = "HXG"; + uint8 public constant decimals = 4; + uint8 public constant burnPerTransaction = 2; + uint256 public constant initialSupply = 420000000000000; + uint256 public currentSupply = initialSupply; + + /* Create array with balances */ + mapping (address => uint256) public balanceOf; + /* Create array with allowance */ + mapping (address => mapping (address => uint256)) public allowance; + + /* Constructor */ + function Hexagon() public { + /* Give creator all initial supply of tokens */ + balanceOf[msg.sender] = initialSupply; + } + + /* PUBLIC */ + /* Send tokens */ + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + + return true; + } + + /* Return current supply */ + function totalSupply() public constant returns (uint) { + return currentSupply; + } + + /* Burn tokens */ + function burn(uint256 _value) public returns (bool success) { + /* Check if the sender has enough */ + require(balanceOf[msg.sender] >= _value); + /* Subtract from the sender */ + balanceOf[msg.sender] -= _value; + /* Send to the black hole */ + balanceOf[0x0] += _value; + /* Update current supply */ + currentSupply -= _value; + /* Notify network */ + Burn(msg.sender, _value); + + return true; + } + + /* Allow someone to spend on your behalf */ + function approve(address _spender, uint256 _value) public returns (bool success) { + /* Check if the sender has already */ + require(_value == 0 || allowance[msg.sender][_spender] == 0); + /* Add to allowance */ + allowance[msg.sender][_spender] = _value; + /* Notify network */ + Approval(msg.sender, _spender, _value); + + return true; + } + + /* Transfer tokens from allowance */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + /* Prevent transfer of not allowed tokens */ + require(allowance[_from][msg.sender] >= _value); + /* Remove tokens from allowance */ + allowance[_from][msg.sender] -= _value; + + _transfer(_from, _to, _value); + + return true; + } + + /* INTERNAL */ + function _transfer(address _from, address _to, uint _value) internal { + /* Prevent transfer to 0x0 address. Use burn() instead */ + require (_to != 0x0); + /* Check if the sender has enough */ + require (balanceOf[_from] >= _value + burnPerTransaction); + /* Check for overflows */ + require (balanceOf[_to] + _value > balanceOf[_to]); + /* Subtract from the sender */ + balanceOf[_from] -= _value + burnPerTransaction; + /* Add the same to the recipient */ + balanceOf[_to] += _value; + /* Apply transaction fee */ + balanceOf[0x0] += burnPerTransaction; + /* Update current supply */ + currentSupply -= burnPerTransaction; + /* Notify network */ + Burn(_from, burnPerTransaction); + /* Notify network */ + Transfer(_from, _to, _value); + } + + /* Events */ + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} \ No newline at end of file diff --git a/data_full/CVE/2018-11335.sol b/data_full/CVE/2018-11335.sol new file mode 100644 index 00000000..80320b39 --- /dev/null +++ b/data_full/CVE/2018-11335.sol @@ -0,0 +1,280 @@ +/** + *Submitted for verification at Etherscan.io on 2018-02-06 +*/ + +pragma solidity ^0.4.18; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + + // SafeMath.sub will throw if there is not enough balance. + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } + +} + + + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + + /** + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + */ + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + + +// Migration Agent interface +contract MigrationAgent { + function migrateFrom(address _from, uint _value) public; +} + +/** + * @title Spade Token + */ +contract SPXToken is StandardToken { + + string public constant name = "SP8DE Token"; + string public constant symbol = "SPX"; + uint8 public constant decimals = 18; + address public ico; + + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 8888888888 * (1e18); + + // Token migration variables + address public migrationMaster; + address public migrationAgent; + uint public totalMigrated; + + event Migrate(address indexed _from, address indexed _to, uint _value); + + // Constructor + function SPXToken(address _ico, address _migrationMaster) public { + require(_ico != 0); + ico = _ico; + migrationMaster = _migrationMaster; + } + + // Create tokens + function mint(address holder, uint value) public { + require(msg.sender == ico); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + + // Allow token transfer. + function unfreeze() public { + require(msg.sender == ico); + isFrozen = false; + } + + // ERC20 functions + // ========================= + function transfer(address _to, uint _value) public returns (bool) { + require(_to != address(0)); + require(!isFrozen); + return super.transfer(_to, _value); + } + + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } + + // Token migration + function migrate(uint value) external { + require(migrationAgent != 0); + require(value > 0); + require(value <= balances[msg.sender]); + + balances[msg.sender] -= value; + totalSupply -= value; + totalMigrated += value; + MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); + Migrate(msg.sender, migrationAgent, value); + } + + // Set address of migration contract + function setMigrationAgent(address _agent) external { + require(migrationAgent == 0); + require(msg.sender == migrationMaster); + migrationAgent = _agent; + } + + function setMigrationMaster(address _master) external { + require(msg.sender == migrationMaster); + require(_master != 0); + migrationMaster = _master; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-11411.sol b/data_full/CVE/2018-11411.sol new file mode 100644 index 00000000..2727a979 --- /dev/null +++ b/data_full/CVE/2018-11411.sol @@ -0,0 +1,126 @@ +pragma solidity ^0.4.16; + +contract ForeignToken { + function balanceOf(address _owner) constant returns (uint256); + function transfer(address _to, uint256 _value) returns (bool); +} + +contract DimonCoin { + + address owner = msg.sender; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + + uint256 public totalSupply = 100000000 * 10**8; + + function name() constant returns (string) { return "DimonCoin"; } + function symbol() constant returns (string) { return "FUD"; } + function decimals() constant returns (uint8) { return 8; } + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + function DimonCoin() { + owner = msg.sender; + balances[msg.sender] = totalSupply; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + + function getEthBalance(address _addr) constant returns(uint) { + return _addr.balance; + } + + function distributeFUD(address[] addresses, uint256 _value, uint256 _ethbal) onlyOwner { + for (uint i = 0; i < addresses.length; i++) { + if (getEthBalance(addresses[i]) < _ethbal) { + continue; + } + balances[owner] -= _value; + balances[addresses[i]] += _value; + Transfer(owner, addresses[i], _value); + } + } + + function balanceOf(address _owner) constant returns (uint256) { + return balances[_owner]; + } + + // mitigates the ERC20 short address attack + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + + function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { + + if (_value == 0) { return false; } + + uint256 fromBalance = balances[msg.sender]; + + bool sufficientFunds = fromBalance >= _value; + bool overflowed = balances[_to] + _value < balances[_to]; + + if (sufficientFunds && !overflowed) { + balances[msg.sender] -= _value; + balances[_to] += _value; + + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { + + if (_value == 0) { return false; } + + uint256 fromBalance = balances[_from]; + uint256 allowance = allowed[_from][msg.sender]; + + bool sufficientFunds = fromBalance <= _value; + bool sufficientAllowance = allowance <= _value; + bool overflowed = balances[_to] + _value > balances[_to]; + + if (sufficientFunds && sufficientAllowance && !overflowed) { + balances[_to] += _value; + balances[_from] -= _value; + + allowed[_from][msg.sender] -= _value; + + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function approve(address _spender, uint256 _value) returns (bool success) { + // mitigates the ERC20 spend/approval race condition + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + + allowed[msg.sender][_spender] = _value; + + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256) { + return allowed[_owner][_spender]; + } + + + function withdrawForeignTokens(address _tokenContract) returns (bool) { + require(msg.sender == owner); + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } + + +} \ No newline at end of file diff --git a/data_full/CVE/2018-11429.sol b/data_full/CVE/2018-11429.sol new file mode 100644 index 00000000..b10456ab --- /dev/null +++ b/data_full/CVE/2018-11429.sol @@ -0,0 +1,165 @@ +pragma solidity ^0.4.11; + +library SafeMath { + function mul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function sub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function add(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c >= a); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function transfer(address to, uint value); + event Transfer(address indexed from, address indexed to, uint value); +} + +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant returns (uint); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + +contract BasicToken is ERC20Basic { + using SafeMath for uint; + + mapping(address => uint) balances; + + /* + * Fix for the ERC20 short address attack + */ + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + +} + +contract StandardToken is BasicToken, ERC20 { + + mapping (address => mapping (address => uint)) allowed; + + function transferFrom(address _from, address _to, uint _value) { + var _allowance = allowed[_from][msg.sender]; + + // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met + // if (_value > _allowance) throw; + + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + } + + function approve(address _spender, uint _value) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + +contract ATL is StandardToken { + + string public name = "ATLANT Token"; + string public symbol = "ATL"; + uint public decimals = 18; + uint constant TOKEN_LIMIT = 150 * 1e6 * 1e18; + + address public ico; + + bool public tokensAreFrozen = true; + + function ATL(address _ico) { + ico = _ico; + } + + function mint(address _holder, uint _value) external { + require(msg.sender == ico); + require(_value != 0); + require(totalSupply + _value <= TOKEN_LIMIT); + + balances[_holder] += _value; + totalSupply += _value; + Transfer(0x0, _holder, _value); + } + + function unfreeze() external { + require(msg.sender == ico); + tokensAreFrozen = false; + } + + function transfer(address _to, uint _value) public { + require(!tokensAreFrozen); + super.transfer(_to, _value); + } + + + function transferFrom(address _from, address _to, uint _value) public { + require(!tokensAreFrozen); + super.transferFrom(_from, _to, _value); + } + + + function approve(address _spender, uint _value) public { + require(!tokensAreFrozen); + super.approve(_spender, _value); + } +} diff --git a/data_full/CVE/2018-11446.sol b/data_full/CVE/2018-11446.sol new file mode 100644 index 00000000..3170abf3 --- /dev/null +++ b/data_full/CVE/2018-11446.sol @@ -0,0 +1,432 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + mapping (address => bool) public admins; + + function owned() { + owner = msg.sender; + admins[msg.sender]=true; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + modifier onlyAdmin { + require(admins[msg.sender] == true); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + function makeAdmin(address newAdmin, bool isAdmin) onlyOwner { + admins[newAdmin] = isAdmin; + } +} + +interface tokenRecipient { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} + +contract GRX is owned { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + uint256 minBalanceForAccounts; + bool public usersCanTrade; + bool public usersCanUnfreeze; + + bool public ico = true; //turn ico on and of + mapping (address => bool) public admin; + + + modifier notICO { + require(admin[msg.sender] || !ico); + _; + } + + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + + + mapping (address => mapping (address => uint256)) public allowance; + mapping (address => bool) public frozen; + + mapping (address => bool) public canTrade; //user allowed to buy or sell + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + //This generates a public even on the blockhcain when an address is reward + event Reward(address from, address to, uint256 value, string data, uint256 time); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + // This generates a public event on the blockchain that will notify clients + event Frozen(address indexed addr, bool frozen); + + // This generates a public event on the blockchain that will notify clients + event Unlock(address indexed addr, address from, uint256 val); + + // This generates a public event on the blockchain that will notify clients + + + // This generates a public event on the blockchain that will notify clients + // event Unfreeze(address indexed addr); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function GRX() { + uint256 initialSupply = 20000000000000000000000000; + balanceOf[msg.sender] = initialSupply ; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = "Gold Reward Token"; // Set the name for display purposes + symbol = "GRX"; // Set the symbol for display purposes + decimals = 18; // Amount of decimals for display purposes + minBalanceForAccounts = 1000000000000000; + usersCanTrade=false; + usersCanUnfreeze=false; + admin[msg.sender]=true; + canTrade[msg.sender]=true; + + } + + /** + * Increace Total Supply + * + * Increases the total coin supply + */ + function increaseTotalSupply (address target, uint256 increaseBy ) onlyOwner { + balanceOf[target] += increaseBy; + totalSupply += increaseBy; + Transfer(0, owner, increaseBy); + Transfer(owner, target, increaseBy); + } + + function usersCanUnFreeze(bool can) { + usersCanUnfreeze=can; + } + + function setMinBalance(uint minimumBalanceInWei) onlyOwner { + minBalanceForAccounts = minimumBalanceInWei; + } + + /** + * transferAndFreeze + * + * Function to transfer to and freeze and account at the same time + */ + function transferAndFreeze (address target, uint256 amount ) onlyAdmin { + _transfer(msg.sender, target, amount); + freeze(target, true); + } + + /** + * _freeze internal + * + * function to freeze an account + */ + function _freeze (address target, bool froze ) internal { + + frozen[target]=froze; + Frozen(target, froze); + } + + + + /** + * freeze + * + * function to freeze an account + */ + function freeze (address target, bool froze ) { + if(froze || (!froze && !usersCanUnfreeze)) { + require(admin[msg.sender]); + } + + _freeze(target, froze); + } + + + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + + require(!frozen[_from]); //prevent transfer from frozen address + require(balanceOf[_from] >= _value); // Check if the sender has enough + require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) notICO { + require(!frozen[msg.sender]); //prevent transfer from frozen address + if (msg.sender.balance < minBalanceForAccounts) { + sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); + } + _transfer(msg.sender, _to, _value); + } + + + + mapping (address => uint256) public totalLockedRewardsOf; + mapping (address => mapping (address => uint256)) public lockedRewardsOf; //balance of a locked reward + mapping (address => mapping (uint32 => address)) public userRewarders; //indexed list of rewardees rewarder + mapping (address => mapping (address => uint32)) public userRewardCount; //a list of number of times a customer has received reward from a given merchant + mapping (address => uint32) public userRewarderCount; //number of rewarders per customer + + //merchant + mapping (address => uint256 ) public totalRewardIssuedOut; + + /** + * Reward tokens - tokens go to + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function reward(address _to, uint256 _value, bool locked, string data) { + require(_to != 0x0); + require(!frozen[msg.sender]); //prevent transfer from frozen address + if (msg.sender.balance < minBalanceForAccounts) { + sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); + } + if(!locked) { + _transfer(msg.sender, _to, _value); + }else{ + //prevent transfer from frozen address + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + require(totalLockedRewardsOf[_to] + _value > totalLockedRewardsOf[_to]); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalLockedRewardsOf[_to] += _value; // Add the same to the recipient + lockedRewardsOf[_to][msg.sender] += _value; + if(userRewardCount[_to][msg.sender]==0) { + userRewarderCount[_to] += 1; + userRewarders[_to][userRewarderCount[_to]]=msg.sender; + } + userRewardCount[_to][msg.sender]+=1; + totalRewardIssuedOut[msg.sender]+= _value; + Transfer(msg.sender, _to, _value); + } + + Reward(msg.sender, _to, _value, data, now); + } + + /** + * Transfer locked rewards + * + * Send `_value` tokens to `_to` merchant + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferReward(address _to, uint256 _value) { + require(!frozen[msg.sender]); //prevent transfer from frozen address + require(lockedRewardsOf[msg.sender][_to] >= _value ); + require(totalLockedRewardsOf[msg.sender] >= _value); + + if (msg.sender.balance < minBalanceForAccounts) { + sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); + } + totalLockedRewardsOf[msg.sender] -= _value; // Add the same to the recipient + lockedRewardsOf[msg.sender][_to] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + + /** + * Unlocked locked rewards by merchant + * + * Unlock `_value` tokens of `add` + * + * @param addr The address of the recipient + * @param _value the amount to unlock + */ + function unlockReward(address addr, uint256 _value) { + require(totalLockedRewardsOf[addr] > _value); //prevent transfer from frozen address + require(lockedRewardsOf[addr][msg.sender] >= _value ); + if(_value==0) _value=lockedRewardsOf[addr][msg.sender]; + if (msg.sender.balance < minBalanceForAccounts) { + sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); + } + totalLockedRewardsOf[addr] -= _value; // Add the same to the recipient + lockedRewardsOf[addr][msg.sender] -= _value; + balanceOf[addr] += _value; + Unlock(addr, msg.sender, _value); + } + + + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require(!frozen[_from]); //prevent transfer from frozen address + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) onlyOwner + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) onlyOwner returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other ccount + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } + + /* + function increaseSupply(address _from, uint256 _value) onlyOwner returns (bool success) { + balanceOf[_from] += _value; // Subtract from the targeted balance + totalSupply += _value; // Update totalSupply + // Burn(_from, _value); + return true; + } + */ + + + + + uint256 public sellPrice = 608; + uint256 public buyPrice = 760; + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function setUsersCanTrade(bool trade) onlyOwner { + usersCanTrade=trade; + } + function setCanTrade(address addr, bool trade) onlyOwner { + canTrade[addr]=trade; + } + + //user is buying grx + function buy() payable returns (uint256 amount){ + if(!usersCanTrade && !canTrade[msg.sender]) revert(); + amount = msg.value * buyPrice; // calculates the amount + + require(balanceOf[this] >= amount); // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + return amount; // ends function and returns + } + + //user is selling us grx, we are selling eth to the user + function sell(uint256 amount) returns (uint revenue){ + require(!frozen[msg.sender]); + if(!usersCanTrade && !canTrade[msg.sender]) { + require(minBalanceForAccounts > amount/sellPrice); + } + require(balanceOf[msg.sender] >= amount); // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + revenue = amount / sellPrice; + require(msg.sender.send(revenue)); // sends ether to the seller: it's important to do this last to prevent recursion attacks + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + return revenue; // ends function and returns + } + + function() payable { + } + event Withdrawn(address indexed to, uint256 value); + function withdraw(address target, uint256 amount) onlyOwner { + target.transfer(amount); + Withdrawn(target, amount); + } + + function setAdmin(address addr, bool enabled) onlyOwner { + admin[addr]=enabled; + } + + function setICO(bool enabled) onlyOwner { + ico=enabled; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-11561.sol b/data_full/CVE/2018-11561.sol new file mode 100644 index 00000000..9c20264f --- /dev/null +++ b/data_full/CVE/2018-11561.sol @@ -0,0 +1,146 @@ +pragma solidity ^0.4.4; + +contract Token { + + /// @return total amount of tokens + function totalSupply() constant returns (uint256 supply) {} + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) constant returns (uint256 balance) {} + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) returns (bool success) {} + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + + /// @notice `msg.sender` approves `_addr` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of wei to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) returns (bool success) {} + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + +} + + + +contract StandardToken is Token { + + function transfer(address _to, uint256 _value) returns (bool success) { + //Default assumes totalSupply can't be over max (2^256 - 1). + //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. + //Replace the if with this one instead. + //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + //same as above. Replace this line with the following if you want to protect against wrapping uints. + //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function distributeToken(address[] addresses, uint256 _value) { + for (uint i = 0; i < addresses.length; i++) { + balances[msg.sender] -= _value; + balances[addresses[i]] += _value; + Transfer(msg.sender, addresses[i], _value); + } +} + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} + + +//name this contract whatever you'd like +contract ERC20Token is StandardToken { + + function () { + //if ether is sent to this address, send it back. + throw; + } + + /* Public variables of the token */ + + /* + NOTE: + The following variables are OPTIONAL vanities. One does not have to include them. + They allow one to customise the token contract & in no way influences the core functionality. + Some wallets/interfaces might not even bother to look at this information. + */ + string public name; //fancy name: eg Simon Bucks + uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. + string public symbol; //An identifier: eg SBX + string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. + +// +// CHANGE THESE VALUES FOR YOUR TOKEN +// + +//make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token + + function ERC20Token( + ) { + totalSupply = 12 * 10 ** 24; + balances[msg.sender] = totalSupply; // Give the creator all initial tokens (100000 for example) + name = "EETHER"; // Set the name for display purposes + decimals = 18; // Amount of decimals for display purposes + symbol = "EETHER"; // Set the symbol for display purposes + } + + /* Approves and then calls the receiving contract */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. + //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) + //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + + } +} diff --git a/data_full/CVE/2018-11687.sol b/data_full/CVE/2018-11687.sol new file mode 100644 index 00000000..7e0af38a --- /dev/null +++ b/data_full/CVE/2018-11687.sol @@ -0,0 +1,99 @@ +pragma solidity ^0.4.13; + +contract ERC20 { + function totalSupply() constant returns (uint256 totalSupply); + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + } + + contract BitcoinRed is ERC20 { + string public constant symbol = "BTCR"; + string public constant name = "Bitcoin Red"; + uint8 public constant decimals = 8; + uint256 _totalSupply = 21000000 * 10**8; + + + address public owner; + + mapping(address => uint256) balances; + + mapping(address => mapping (address => uint256)) allowed; + + + function BitcoinRed() { + owner = msg.sender; + balances[owner] = 21000000 * 10**8; + } + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + + function distributeBTR(address[] addresses) onlyOwner { + for (uint i = 0; i < addresses.length; i++) { + balances[owner] -= 2000 * 10**8; + balances[addresses[i]] += 2000 * 10**8; + Transfer(owner, addresses[i], 2000 * 10**8); + } + } + + + function totalSupply() constant returns (uint256 totalSupply) { + totalSupply = _totalSupply; + } + + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function transfer(address _to, uint256 _amount) returns (bool success) { + if (balances[msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } else { + return false; + } + } + + + function transferFrom( + address _from, + address _to, + uint256 _amount + ) returns (bool success) { + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} diff --git a/data_full/CVE/2018-12025-1.sol b/data_full/CVE/2018-12025-1.sol new file mode 100644 index 00000000..b00ef0fb --- /dev/null +++ b/data_full/CVE/2018-12025-1.sol @@ -0,0 +1,165 @@ +/** + *Submitted for verification at Etherscan.io on 2017-07-01 +*/ + +pragma solidity ^0.4.2; + +contract ERC20Interface { + + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + + // Triggered when tokens are transferred. + event Transfer(address indexed _from, address indexed _to, uint256 _value); + + // Triggered whenever approve(address _spender, uint256 _value) is called. + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + +} + +contract Owner { + //For storing the owner address + address public owner; + + //Constructor for assign a address for owner property(It will be address who deploy the contract) + function Owner() { + owner = msg.sender; + } + + //This is modifier (a special function) which will execute before the function execution on which it applied + modifier onlyOwner() { + if(msg.sender != owner) throw; + //This statement replace with the code of fucntion on which modifier is applied + _; + } + //Here is the example of modifier this function code replace _; statement of modifier + function transferOwnership(address new_owner) onlyOwner { + owner = new_owner; + } +} + +contract FuturXe is ERC20Interface,Owner { + + //Common information about coin + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + //Balance property which should be always associate with an address + mapping(address => uint256) balances; + //frozenAccount property which should be associate with an address + mapping (address => bool) public frozenAccount; + // Owner of account approves the transfer of an amount to another account + mapping(address => mapping (address => uint256)) allowed; + + //These generates a public event on the blockchain that will notify clients + event FrozenFunds(address target, bool frozen); + + //Construtor for initial supply (The address who deployed the contract will get it) and important information + function FuturXe(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { + balances[msg.sender] = initial_supply; + name = _name; + symbol = _symbol; + decimals = _decimal; + totalSupply = initial_supply; + } + + // What is the balance of a particular account? + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + //Function for transer the coin from one address to another + function transfer(address to, uint value) returns (bool success) { + + //checking account is freeze or not + if (frozenAccount[msg.sender]) return false; + + //checking the sender should have enough coins + if(balances[msg.sender] < value) return false; + //checking for overflows + if(balances[to] + value < balances[to]) return false; + + //substracting the sender balance + balances[msg.sender] -= value; + //adding the reciever balance + balances[to] += value; + + // Notify anyone listening that this transfer took place + Transfer(msg.sender, to, value); + + return true; + } + + + //Function for transer the coin from one address to another + function transferFrom(address from, address to, uint value) returns (bool success) { + + //checking account is freeze or not + if (frozenAccount[msg.sender]) return false; + + //checking the from should have enough coins + if(balances[from] < value) return false; + + //checking for allowance + if( allowed[from][msg.sender] >= value ) return false; + + //checking for overflows + if(balances[to] + value < balances[to]) return false; + + balances[from] -= value; + allowed[from][msg.sender] -= value; + balances[to] += value; + + // Notify anyone listening that this transfer took place + Transfer(from, to, value); + + return true; + } + + // + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + // + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + // + function mintToken(address target, uint256 mintedAmount) onlyOwner{ + balances[target] += mintedAmount; + totalSupply += mintedAmount; + + Transfer(0,owner,mintedAmount); + Transfer(owner,target,mintedAmount); + } + + // + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + // + function changeName(string _name) onlyOwner { + name = _name; + } + + // + function changeSymbol(string _symbol) onlyOwner { + symbol = _symbol; + } + + // + function changeDecimals(uint8 _decimals) onlyOwner { + decimals = _decimals; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12025-2.sol b/data_full/CVE/2018-12025-2.sol new file mode 100644 index 00000000..ac445be7 --- /dev/null +++ b/data_full/CVE/2018-12025-2.sol @@ -0,0 +1,165 @@ +/** + *Submitted for verification at Etherscan.io on 2017-06-14 +*/ + +pragma solidity ^0.4.2; + +contract ERC20Interface { + + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + + // Triggered when tokens are transferred. + event Transfer(address indexed _from, address indexed _to, uint256 _value); + + // Triggered whenever approve(address _spender, uint256 _value) is called. + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + +} + +contract Owner { + //For storing the owner address + address public owner; + + //Constructor for assign a address for owner property(It will be address who deploy the contract) + function Owner() { + owner = msg.sender; + } + + //This is modifier (a special function) which will execute before the function execution on which it applied + modifier onlyOwner() { + if(msg.sender != owner) throw; + //This statement replace with the code of fucntion on which modifier is applied + _; + } + //Here is the example of modifier this function code replace _; statement of modifier + function transferOwnership(address new_owner) onlyOwner { + owner = new_owner; + } +} + +contract RemiCoin is ERC20Interface,Owner { + + //Common information about coin + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + //Balance property which should be always associate with an address + mapping(address => uint256) balances; + //frozenAccount property which should be associate with an address + mapping (address => bool) public frozenAccount; + // Owner of account approves the transfer of an amount to another account + mapping(address => mapping (address => uint256)) allowed; + + //These generates a public event on the blockchain that will notify clients + event FrozenFunds(address target, bool frozen); + + //Construtor for initial supply (The address who deployed the contract will get it) and important information + function RemiCoin(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { + balances[msg.sender] = initial_supply; + name = _name; + symbol = _symbol; + decimals = _decimal; + totalSupply = initial_supply; + } + + // What is the balance of a particular account? + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + //Function for transer the coin from one address to another + function transfer(address to, uint value) returns (bool success) { + + //checking account is freeze or not + if (frozenAccount[msg.sender]) return false; + + //checking the sender should have enough coins + if(balances[msg.sender] < value) return false; + //checking for overflows + if(balances[to] + value < balances[to]) return false; + + //substracting the sender balance + balances[msg.sender] -= value; + //adding the reciever balance + balances[to] += value; + + // Notify anyone listening that this transfer took place + Transfer(msg.sender, to, value); + + return true; + } + + + //Function for transer the coin from one address to another + function transferFrom(address from, address to, uint value) returns (bool success) { + + //checking account is freeze or not + if (frozenAccount[msg.sender]) return false; + + //checking the from should have enough coins + if(balances[from] < value) return false; + + //checking for allowance + if( allowed[from][msg.sender] >= value ) return false; + + //checking for overflows + if(balances[to] + value < balances[to]) return false; + + balances[from] -= value; + allowed[from][msg.sender] -= value; + balances[to] += value; + + // Notify anyone listening that this transfer took place + Transfer(from, to, value); + + return true; + } + + // + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + // + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + // + function mintToken(address target, uint256 mintedAmount) onlyOwner{ + balances[target] += mintedAmount; + totalSupply += mintedAmount; + + Transfer(0,owner,mintedAmount); + Transfer(owner,target,mintedAmount); + } + + // + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + // + function changeName(string _name) onlyOwner { + name = _name; + } + + // + function changeSymbol(string _symbol) onlyOwner { + symbol = _symbol; + } + + // + function changeDecimals(uint8 _decimals) onlyOwner { + decimals = _decimals; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12025-3.sol b/data_full/CVE/2018-12025-3.sol new file mode 100644 index 00000000..492dd5d1 --- /dev/null +++ b/data_full/CVE/2018-12025-3.sol @@ -0,0 +1,150 @@ +/** + *Submitted for verification at Etherscan.io on 2017-06-28 +*/ + +pragma solidity ^0.4.10; + +contract ForeignToken { + function balanceOf(address _owner) constant returns (uint256); + function transfer(address _to, uint256 _value) returns (bool); +} + +contract UselessEthereumToken { + address owner = msg.sender; + + bool public purchasingAllowed = false; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + + uint256 public totalContribution = 0; + uint256 public totalBonusTokensIssued = 0; + + uint256 public totalSupply = 0; + + function name() constant returns (string) { return "Useless Ethereum Token"; } + function symbol() constant returns (string) { return "UET"; } + function decimals() constant returns (uint8) { return 18; } + + function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } + + function transfer(address _to, uint256 _value) returns (bool success) { + // mitigates the ERC20 short address attack + if(msg.data.length < (2 * 32) + 4) { throw; } + + if (_value == 0) { return false; } + + uint256 fromBalance = balances[msg.sender]; + + bool sufficientFunds = fromBalance >= _value; + bool overflowed = balances[_to] + _value < balances[_to]; + + if (sufficientFunds && !overflowed) { + balances[msg.sender] -= _value; + balances[_to] += _value; + + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + // mitigates the ERC20 short address attack + if(msg.data.length < (3 * 32) + 4) { throw; } + + if (_value == 0) { return false; } + + uint256 fromBalance = balances[_from]; + uint256 allowance = allowed[_from][msg.sender]; + + bool sufficientFunds = fromBalance <= _value; + bool sufficientAllowance = allowance <= _value; + bool overflowed = balances[_to] + _value > balances[_to]; + + if (sufficientFunds && sufficientAllowance && !overflowed) { + balances[_to] += _value; + balances[_from] -= _value; + + allowed[_from][msg.sender] -= _value; + + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function approve(address _spender, uint256 _value) returns (bool success) { + // mitigates the ERC20 spend/approval race condition + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + + allowed[msg.sender][_spender] = _value; + + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256) { + return allowed[_owner][_spender]; + } + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + function enablePurchasing() { + if (msg.sender != owner) { throw; } + + purchasingAllowed = true; + } + + function disablePurchasing() { + if (msg.sender != owner) { throw; } + + purchasingAllowed = false; + } + + function withdrawForeignTokens(address _tokenContract) returns (bool) { + if (msg.sender != owner) { throw; } + + ForeignToken token = ForeignToken(_tokenContract); + + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } + + function getStats() constant returns (uint256, uint256, uint256, bool) { + return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); + } + + function() payable { + if (!purchasingAllowed) { throw; } + + if (msg.value == 0) { return; } + + owner.transfer(msg.value); + totalContribution += msg.value; + + uint256 tokensIssued = (msg.value * 100); + + if (msg.value >= 10 finney) { + tokensIssued += totalContribution; + + bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); + if (bonusHash[0] == 0) { + uint8 bonusMultiplier = + ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); + + uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; + tokensIssued += bonusTokensIssued; + + totalBonusTokensIssued += bonusTokensIssued; + } + } + + totalSupply += tokensIssued; + balances[msg.sender] += tokensIssued; + + Transfer(address(this), msg.sender, tokensIssued); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12062.sol b/data_full/CVE/2018-12062.sol new file mode 100644 index 00000000..32f347ce --- /dev/null +++ b/data_full/CVE/2018-12062.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2017-09-09 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract SwftCoin is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function SwftCoin( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12063.sol b/data_full/CVE/2018-12063.sol new file mode 100644 index 00000000..37a4887d --- /dev/null +++ b/data_full/CVE/2018-12063.sol @@ -0,0 +1,184 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-26 +*/ + +pragma solidity ^0.4.13; contract owned { address public owner; + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } +contract token { /*Public variables of the token*/ string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* This notifies clients about the amount burnt */ + event Burn(address indexed from, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Send `_value` tokens to `_to` from your account + /// @param _to The address of the recipient + /// @param _value the amount to send + function transfer(address _to, uint256 _value) { + _transfer(msg.sender, _to, _value); + } + + /// @notice Send `_value` tokens to `_to` in behalf of `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value the amount to send + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require (_value < allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf + /// @param _spender The address authorized to spend + /// @param _value the max amount they can spend + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + /// @param _spender The address authorized to spend + /// @param _value the max amount they can spend + /// @param _extraData some extra information to send to the approved contract + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /// @notice Remove `_value` tokens from the system irreversibly + /// @param _value the amount of money to burn + function burn(uint256 _value) returns (bool success) { + require (balanceOf[msg.sender] > _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} +contract INTToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function INTToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} +contract INT is INTToken(1000000000000000, "Internet Node Token", 6, "INT") {} \ No newline at end of file diff --git a/data_full/CVE/2018-12067.sol b/data_full/CVE/2018-12067.sol new file mode 100644 index 00000000..d652a4ee --- /dev/null +++ b/data_full/CVE/2018-12067.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-07 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MyAdvancedToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12068.sol b/data_full/CVE/2018-12068.sol new file mode 100644 index 00000000..d6bfb553 --- /dev/null +++ b/data_full/CVE/2018-12068.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2017-09-12 +*/ + +pragma solidity ^0.4.11; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MyAdvancedToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12070.sol b/data_full/CVE/2018-12070.sol new file mode 100644 index 00000000..33a7c197 --- /dev/null +++ b/data_full/CVE/2018-12070.sol @@ -0,0 +1,269 @@ +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol +) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract SECToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function SECToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol +) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + + //about lock coins + uint start = 1520956799; + uint256 SECtotalAmount = 1500000000 * 10 ** 18; + address teamaccount = 0xC32b1519A0d4E883FE136AbB3198cbC402b5503F; + + uint256 amount = _value; + address sender = _from; + uint256 balance = balanceOf[_from]; + + + if(teamaccount == sender){ + if (now < start + 365 * 1 days) { + require((balance - amount) >= SECtotalAmount/10 * 3/4); + + } else if (now < start + (2*365+1) * 1 days){ + require((balance - amount) >= SECtotalAmount/10 * 2/4); + + }else if (now < start + (3*365+1) * 1 days){ + require((balance - amount) >= SECtotalAmount/10 * 1/4); + + } + } + + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} +contract SEC is SECToken(1500000000, "SEC", "SEC") {} diff --git a/data_full/CVE/2018-12078.sol b/data_full/CVE/2018-12078.sol new file mode 100644 index 00000000..8dee90eb --- /dev/null +++ b/data_full/CVE/2018-12078.sol @@ -0,0 +1,145 @@ +/** + *Submitted for verification at Etherscan.io on 2017-10-03 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + revert(); // Prevents accidental sending of ether + } +} + +contract PolyAi is owned, token { + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function PolyAi( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12079.sol b/data_full/CVE/2018-12079.sol new file mode 100644 index 00000000..d652a4ee --- /dev/null +++ b/data_full/CVE/2018-12079.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-07 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MyAdvancedToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12080.sol b/data_full/CVE/2018-12080.sol new file mode 100644 index 00000000..37a4887d --- /dev/null +++ b/data_full/CVE/2018-12080.sol @@ -0,0 +1,184 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-26 +*/ + +pragma solidity ^0.4.13; contract owned { address public owner; + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } +contract token { /*Public variables of the token*/ string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* This notifies clients about the amount burnt */ + event Burn(address indexed from, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Send `_value` tokens to `_to` from your account + /// @param _to The address of the recipient + /// @param _value the amount to send + function transfer(address _to, uint256 _value) { + _transfer(msg.sender, _to, _value); + } + + /// @notice Send `_value` tokens to `_to` in behalf of `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value the amount to send + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require (_value < allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf + /// @param _spender The address authorized to spend + /// @param _value the max amount they can spend + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + /// @param _spender The address authorized to spend + /// @param _value the max amount they can spend + /// @param _extraData some extra information to send to the approved contract + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /// @notice Remove `_value` tokens from the system irreversibly + /// @param _value the amount of money to burn + function burn(uint256 _value) returns (bool success) { + require (balanceOf[msg.sender] > _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} +contract INTToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function INTToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} +contract INT is INTToken(1000000000000000, "Internet Node Token", 6, "INT") {} \ No newline at end of file diff --git a/data_full/CVE/2018-12081.sol b/data_full/CVE/2018-12081.sol new file mode 100644 index 00000000..d6bfb553 --- /dev/null +++ b/data_full/CVE/2018-12081.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2017-09-12 +*/ + +pragma solidity ^0.4.11; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MyAdvancedToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12082.sol b/data_full/CVE/2018-12082.sol new file mode 100644 index 00000000..9a175780 --- /dev/null +++ b/data_full/CVE/2018-12082.sol @@ -0,0 +1,168 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-04 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + revert(); // Prevents accidental sending of ether + } +} + +contract FujintoToken is owned, token { + + uint public buyRate = 4000; // price of one token + bool public isSelling = true; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function FujintoToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + + function buy() payable { + if(isSelling == false) revert(); + uint amount = msg.value * buyRate; // calculates the amount + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[owner] -= amount; // subtracts amount from seller's balance + Transfer(owner, msg.sender, amount); // execute an event reflecting the change + } + + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12083.sol b/data_full/CVE/2018-12083.sol new file mode 100644 index 00000000..49a3fab6 --- /dev/null +++ b/data_full/CVE/2018-12083.sol @@ -0,0 +1,117 @@ +/** + *Submitted for verification at Etherscan.io on 2017-11-14 +*/ + +pragma solidity ^0.4.18; + +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + function changeOwner(address newOwner) onlyOwner { + owner = newOwner; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract GoalToken is owned { + /* Public variables of the token */ + string public name = "GOAL Bonanza"; + string public symbol = "GOAL"; + uint8 public decimals = 18; + uint256 public totalSupply = 0; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + event Burn(address indexed from, uint256 value); + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Send `_value` tokens to `_to` from your account + /// @param _to The address of the recipient + /// @param _value the amount to send + function transfer(address _to, uint256 _value) { + _transfer(msg.sender, _to, _value); + } + + /// @notice Send `_value` tokens to `_to` in behalf of `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value the amount to send + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require (_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf + /// @param _spender The address authorized to spend + /// @param _value the max amount they can spend + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + /// @param _spender The address authorized to spend + /// @param _value the max amount they can spend + /// @param _extraData some extra information to send to the approved contract + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /// @notice Remove `_value` tokens from the system irreversibly + /// @param _value the amount of money to burn + function burn(uint256 _value) returns (bool success) { + require (balanceOf[msg.sender] > _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(this, target, mintedAmount); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12084.sol b/data_full/CVE/2018-12084.sol new file mode 100644 index 00000000..f0b1c78f --- /dev/null +++ b/data_full/CVE/2018-12084.sol @@ -0,0 +1,153 @@ +/** + *Submitted for verification at Etherscan.io on 2017-07-25 +*/ + +pragma solidity ^0.4.13; + +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + +} + +contract tokenRecipient { + + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); + +} + +contract token { + + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins e.g. exchange transfer our token */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + revert(); // Prevents accidental sending of ether + } +} + +contract BitAseanToken is owned, token { + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function BitAseanToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + +} \ No newline at end of file diff --git a/data_full/CVE/2018-12230.sol b/data_full/CVE/2018-12230.sol new file mode 100644 index 00000000..08f46699 --- /dev/null +++ b/data_full/CVE/2018-12230.sol @@ -0,0 +1,161 @@ +pragma solidity ^0.4.2; + +contract ERC20Interface { + + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + + // Triggered when tokens are transferred. + event Transfer(address indexed _from, address indexed _to, uint256 _value); + + // Triggered whenever approve(address _spender, uint256 _value) is called. + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + +} + +contract Owner { + //For storing the owner address + address public owner; + + //Constructor for assign a address for owner property(It will be address who deploy the contract) + function Owner() { + owner = msg.sender; + } + + //This is modifier (a special function) which will execute before the function execution on which it applied + modifier onlyOwner() { + if(msg.sender != owner) throw; + //This statement replace with the code of fucntion on which modifier is applied + _; + } + //Here is the example of modifier this function code replace _; statement of modifier + function transferOwnership(address new_owner) onlyOwner { + owner = new_owner; + } +} + +contract RemiCoin is ERC20Interface,Owner { + + //Common information about coin + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + //Balance property which should be always associate with an address + mapping(address => uint256) balances; + //frozenAccount property which should be associate with an address + mapping (address => bool) public frozenAccount; + // Owner of account approves the transfer of an amount to another account + mapping(address => mapping (address => uint256)) allowed; + + //These generates a public event on the blockchain that will notify clients + event FrozenFunds(address target, bool frozen); + + //Construtor for initial supply (The address who deployed the contract will get it) and important information + function RemiCoin(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { + balances[msg.sender] = initial_supply; + name = _name; + symbol = _symbol; + decimals = _decimal; + totalSupply = initial_supply; + } + + // What is the balance of a particular account? + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + //Function for transer the coin from one address to another + function transfer(address to, uint value) returns (bool success) { + + //checking account is freeze or not + if (frozenAccount[msg.sender]) return false; + + //checking the sender should have enough coins + if(balances[msg.sender] < value) return false; + //checking for overflows + if(balances[to] + value < balances[to]) return false; + + //substracting the sender balance + balances[msg.sender] -= value; + //adding the reciever balance + balances[to] += value; + + // Notify anyone listening that this transfer took place + Transfer(msg.sender, to, value); + + return true; + } + + + //Function for transer the coin from one address to another + function transferFrom(address from, address to, uint value) returns (bool success) { + + //checking account is freeze or not + if (frozenAccount[msg.sender]) return false; + + //checking the from should have enough coins + if(balances[from] < value) return false; + + //checking for allowance + if( allowed[from][msg.sender] >= value ) return false; + + //checking for overflows + if(balances[to] + value < balances[to]) return false; + + balances[from] -= value; + allowed[from][msg.sender] -= value; + balances[to] += value; + + // Notify anyone listening that this transfer took place + Transfer(from, to, value); + + return true; + } + + // + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + // + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + // + function mintToken(address target, uint256 mintedAmount) onlyOwner{ + balances[target] += mintedAmount; + totalSupply += mintedAmount; + + Transfer(0,owner,mintedAmount); + Transfer(owner,target,mintedAmount); + } + + // + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + // + function changeName(string _name) onlyOwner { + name = _name; + } + + // + function changeSymbol(string _symbol) onlyOwner { + symbol = _symbol; + } + + // + function changeDecimals(uint8 _decimals) onlyOwner { + decimals = _decimals; + } +} diff --git a/data_full/CVE/2018-12454.sol b/data_full/CVE/2018-12454.sol new file mode 100644 index 00000000..a403a01e --- /dev/null +++ b/data_full/CVE/2018-12454.sol @@ -0,0 +1,148 @@ +/** + *Submitted for verification at Etherscan.io on 2017-11-25 +*/ + +pragma solidity ^0.4.11; +contract simplelottery { + enum State { Started, Locked } + State public state = State.Started; + struct Guess{ + address addr; + //uint guess; + } + uint arraysize=1000; + uint constant maxguess=1000000; + uint bettingprice = 1 ether; + Guess[1000] guesses; + uint numguesses = 0; + bytes32 curhash = ''; + uint _gameindex = 1; + uint _starttime = 0; + modifier inState(State _state) { + require(state == _state); + _; + } + address developer = 0x0; + address _winner = 0x0; + event SentPrizeToWinner(address winner, uint money, uint gameindex, uint lotterynumber, uint starttime, uint finishtime); + event SentDeveloperFee(uint amount, uint balance); + + function simplelottery() + { + if(developer==address(0)){ + developer = msg.sender; + state = State.Started; + _starttime = block.timestamp; + } + } + + function setBettingCondition(uint _contenders, uint _bettingprice) + { + if(msg.sender != developer) + return; + arraysize = _contenders; + if(arraysize>1000) + arraysize = 1000; + bettingprice = _bettingprice; + } + + function findWinner(uint value) + { + uint i = value % numguesses; + _winner = guesses[i].addr; + } + + function getMaxContenders() constant returns(uint){ + return arraysize; + } + + function getBettingPrice() constant returns(uint){ + return bettingprice; + } + + function getDeveloperAddress() constant returns(address) + { + return developer; + } + + function getDeveloperFee() constant returns(uint) + { + uint developerfee = this.balance/100; + return developerfee; + } + + function getBalance() constant returns(uint) + { + return this.balance; + } + + function getLotteryMoney() constant returns(uint) + { + uint developerfee = getDeveloperFee(); + uint prize = (this.balance - developerfee); + return prize; + } + + function getBettingStatus() + constant + returns (uint, uint, uint, uint, uint, uint, uint) + { + return ((uint)(state), _gameindex, _starttime, numguesses, getLotteryMoney(), this.balance, bettingprice); + } + + + + function finish() + { + if(msg.sender != developer) + return; + _finish(); + } + + function _finish() private + { + state = State.Locked; + uint block_timestamp = block.timestamp; + uint lotterynumber = (uint(curhash)+block_timestamp)%(maxguess+1); + findWinner(lotterynumber); + uint prize = getLotteryMoney(); + uint numwinners = 1; + uint remain = this.balance - (prize*numwinners); + + _winner.transfer(prize); + SentPrizeToWinner(_winner, prize, _gameindex, lotterynumber, _starttime, block_timestamp); + + // give delveoper the money left behind + developer.transfer(remain); + SentDeveloperFee(remain, this.balance); + numguesses = 0; + _gameindex++; + state = State.Started; + _starttime = block.timestamp; + } + + function () payable + { + _addguess(); + } + + function addguess() + inState(State.Started) + payable + { + _addguess(); + } + + function _addguess() private + inState(State.Started) + { + require(msg.value >= bettingprice); + curhash = sha256(block.timestamp, block.coinbase, block.difficulty, curhash); + if((uint)(numguesses+1)<=arraysize) { + guesses[numguesses++].addr = msg.sender; + if((uint)(numguesses)>=arraysize){ + _finish(); + } + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12511.sol b/data_full/CVE/2018-12511.sol new file mode 100644 index 00000000..c8b0de47 --- /dev/null +++ b/data_full/CVE/2018-12511.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-07 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MyAdvancedToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12702.sol b/data_full/CVE/2018-12702.sol new file mode 100644 index 00000000..13826eb0 --- /dev/null +++ b/data_full/CVE/2018-12702.sol @@ -0,0 +1,142 @@ +/** + *Submitted for verification at Etherscan.io on 2017-12-26 +*/ + +// Abstract contract for the full ERC 20 Token standard +// https://github.com/ethereum/EIPs/issues/20 +pragma solidity ^0.4.16; + +contract Token { + /* This is a slight change to the ERC20 base standard. + function totalSupply() constant returns (uint256 supply); + is replaced with: + uint256 public totalSupply; + This automatically creates a getter function for the totalSupply. + This is moved to the base contract since public getter functions are not + currently recognised as an implementation of the matching abstract + function by the compiler. + */ + /// total amount of tokens + uint256 public totalSupply; + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) constant returns (uint256 balance); + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) returns (bool success); + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + + /// @notice `msg.sender` approves `_spender` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of tokens to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) returns (bool success); + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + + +contract StandardToken is Token { + + function transfer(address _to, uint256 _value) returns (bool success) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + //Default assumes totalSupply can't be over max (2^256 - 1). + //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. + //Replace the if with this one instead. + require(balances[_to] + _value > balances[_to]); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + //same as above. Replace this line with the following if you want to protect against wrapping uints. + require(balances[_to] + _value > balances[_to]); + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} + +contract GVE is StandardToken { + + function () { + //if ether is sent to this address, send it back. + revert(); + } + + string public name = "Globalvillage ecosystem"; //fancy name: eg Simon Bucks + uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. + string public symbol = "GVE"; //An identifier: eg SBX + string public version = 'v0.1'; //gve 0.1 standard. Just an arbitrary versioning scheme. + + address public founder; // The address of the founder + + function GVE() { + founder = msg.sender; + totalSupply = 1000000000 * 10 ** uint256(decimals); + balances[founder] = totalSupply; + } + + /* Approves and then calls the receiving contract */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. + //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) + //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } + return true; + } + + /* Approves and then calls the contract code*/ + function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //Call the contract code + if(!_spender.call(_extraData)) { revert(); } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12703.sol b/data_full/CVE/2018-12703.sol new file mode 100644 index 00000000..ead0510c --- /dev/null +++ b/data_full/CVE/2018-12703.sol @@ -0,0 +1,142 @@ +/** + *Submitted for verification at Etherscan.io on 2018-01-04 +*/ + +// Abstract contract for the full ERC 20 Token standard +// https://github.com/ethereum/EIPs/issues/20 +pragma solidity ^0.4.16; + +contract Token { + /* This is a slight change to the ERC20 base standard. + function totalSupply() constant returns (uint256 supply); + is replaced with: + uint256 public totalSupply; + This automatically creates a getter function for the totalSupply. + This is moved to the base contract since public getter functions are not + currently recognised as an implementation of the matching abstract + function by the compiler. + */ + /// total amount of tokens + uint256 public totalSupply; + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) constant returns (uint256 balance); + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) returns (bool success); + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + + /// @notice `msg.sender` approves `_spender` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of tokens to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) returns (bool success); + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + + +contract StandardToken is Token { + + function transfer(address _to, uint256 _value) returns (bool success) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + //Default assumes totalSupply can't be over max (2^256 - 1). + //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. + //Replace the if with this one instead. + require(balances[_to] + _value > balances[_to]); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + //same as above. Replace this line with the following if you want to protect against wrapping uints. + require(balances[_to] + _value > balances[_to]); + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} + +contract EightteenToken is StandardToken { + + function () { + //if ether is sent to this address, send it back. + revert(); + } + + string public name = "Block 18"; //fancy name: eg Simon Bucks + uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. + string public symbol = "18T"; //An identifier: eg SBX + string public version = 'v0.1'; //18t 0.1 standard. Just an arbitrary versioning scheme. + + address public founder; // The address of the founder + + function EightteenToken() { + founder = msg.sender; + totalSupply = 1000000000 * 10 ** uint256(decimals); + balances[founder] = totalSupply; + } + + /* Approves and then calls the receiving contract */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. + //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) + //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } + return true; + } + + /* Approves and then calls the contract code*/ + function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //Call the contract code + if(!_spender.call(_extraData)) { revert(); } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12885.sol b/data_full/CVE/2018-12885.sol new file mode 100644 index 00000000..124b5f2f --- /dev/null +++ b/data_full/CVE/2018-12885.sol @@ -0,0 +1,1149 @@ +/** + *Submitted for verification at Etherscan.io on 2018-05-14 +*/ + +pragma solidity 0.4.23; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + /** + * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + /** + * @dev Adds two numbers, throws on overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { + address internal contractOwner; + + constructor () internal { + if(contractOwner == address(0)){ + contractOwner = msg.sender; + } + } + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == contractOwner); + _; + } + + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) public onlyOwner { + require(newOwner != address(0)); + contractOwner = newOwner; + } + +} + + +/** + * @title Pausable + * @dev Base contract which allows children to implement an emergency stop mechanism. + */ +contract Pausable is Ownable { + bool private paused = false; + + /** + * @dev Modifier to allow actions only when the contract IS paused + @dev If is paused msg.value is send back + */ + modifier whenNotPaused() { + if(paused == true && msg.value > 0){ + msg.sender.transfer(msg.value); + } + require(!paused); + _; + } + + + /** + * @dev Called by the owner to pause, triggers stopped state + */ + function triggerPause() onlyOwner external { + paused = !paused; + } + +} + + +/// @title A contract for creating new champs and making withdrawals +contract ChampFactory is Pausable{ + + event NewChamp(uint256 champID, address owner); + + using SafeMath for uint; //SafeMath for overflow prevention + + /* + * Variables + */ + struct Champ { + uint256 id; //same as position in Champ[] + uint256 attackPower; + uint256 defencePower; + uint256 cooldownTime; //how long does it take to be ready attack again + uint256 readyTime; //if is smaller than block.timestamp champ is ready to fight + uint256 winCount; + uint256 lossCount; + uint256 position; //position in leaderboard. subtract 1 and you got position in leaderboard[] + uint256 price; //selling price + uint256 withdrawCooldown; //if you one of the 800 best champs and withdrawCooldown is less as block.timestamp then you get ETH reward + uint256 eq_sword; + uint256 eq_shield; + uint256 eq_helmet; + bool forSale; //is champ for sale? + } + + struct AddressInfo { + uint256 withdrawal; + uint256 champsCount; + uint256 itemsCount; + string name; + } + + //Item struct + struct Item { + uint8 itemType; // 1 - Sword | 2 - Shield | 3 - Helmet + uint8 itemRarity; // 1 - Common | 2 - Uncommon | 3 - Rare | 4 - Epic | 5 - Legendery | 6 - Forged + uint256 attackPower; + uint256 defencePower; + uint256 cooldownReduction; + uint256 price; + uint256 onChampId; //can not be used to decide if item is on champ, because champ's id can be 0, 'bool onChamp' solves it. + bool onChamp; + bool forSale; //is item for sale? + } + + mapping (address => AddressInfo) public addressInfo; + mapping (uint256 => address) public champToOwner; + mapping (uint256 => address) public itemToOwner; + mapping (uint256 => string) public champToName; + + Champ[] public champs; + Item[] public items; + uint256[] public leaderboard; + + uint256 internal createChampFee = 5 finney; + uint256 internal lootboxFee = 5 finney; + uint256 internal pendingWithdrawal = 0; + uint256 private randNonce = 0; //being used in generating random numbers + uint256 public champsForSaleCount; + uint256 public itemsForSaleCount; + + + /* + * Modifiers + */ + /// @dev Checks if msg.sender is owner of champ + modifier onlyOwnerOfChamp(uint256 _champId) { + require(msg.sender == champToOwner[_champId]); + _; + } + + + /// @dev Checks if msg.sender is NOT owner of champ + modifier onlyNotOwnerOfChamp(uint256 _champId) { + require(msg.sender != champToOwner[_champId]); + _; + } + + + /// @notice Checks if amount was sent + modifier isPaid(uint256 _price){ + require(msg.value >= _price); + _; + } + + + /// @notice People are allowed to withdraw only if min. balance (0.01 gwei) is reached + modifier contractMinBalanceReached(){ + require( (address(this).balance).sub(pendingWithdrawal) > 1000000 ); + _; + } + + + /// @notice Checks if withdraw cooldown passed + modifier isChampWithdrawReady(uint256 _id){ + require(champs[_id].withdrawCooldown < block.timestamp); + _; + } + + + /// @notice Distribute input funds between contract owner and players + modifier distributeInput(address _affiliateAddress){ + + //contract owner + uint256 contractOwnerWithdrawal = (msg.value / 100) * 50; // 50% + addressInfo[contractOwner].withdrawal += contractOwnerWithdrawal; + pendingWithdrawal += contractOwnerWithdrawal; + + //affiliate + //checks if _affiliateAddress is set & if affiliate address is not buying player + if(_affiliateAddress != address(0) && _affiliateAddress != msg.sender){ + uint256 affiliateBonus = (msg.value / 100) * 25; //provision is 25% + addressInfo[_affiliateAddress].withdrawal += affiliateBonus; + pendingWithdrawal += affiliateBonus; + } + + _; + } + + + + /* + * View + */ + /// @notice Gets champs by address + /// @param _owner Owner address + function getChampsByOwner(address _owner) external view returns(uint256[]) { + uint256[] memory result = new uint256[](addressInfo[_owner].champsCount); + uint256 counter = 0; + for (uint256 i = 0; i < champs.length; i++) { + if (champToOwner[i] == _owner) { + result[counter] = i; + counter++; + } + } + return result; + } + + + /// @notice Gets total champs count + function getChampsCount() external view returns(uint256){ + return champs.length; + } + + + /// @notice Gets champ's reward in wei + function getChampReward(uint256 _position) public view returns(uint256) { + if(_position <= 800){ + //percentageMultipier = 10,000 + //maxReward = 2000 = .2% * percentageMultipier + //subtractPerPosition = 2 = .0002% * percentageMultipier + //2000 - (2 * (_position - 1)) + uint256 rewardPercentage = uint256(2000).sub(2 * (_position - 1)); + + //available funds are all funds - already pending + uint256 availableWithdrawal = address(this).balance.sub(pendingWithdrawal); + + //calculate reward for champ's position + //1000000 = percentageMultipier * 100 + return availableWithdrawal / 1000000 * rewardPercentage; + }else{ + return uint256(0); + } + } + + + /* + * Internal + */ + /// @notice Generates random modulus + /// @param _modulus Max random modulus + function randMod(uint256 _modulus) internal returns(uint256) { + randNonce++; + return uint256(keccak256(randNonce, blockhash(block.number - 1))) % _modulus; + } + + + + /* + * External + */ + /// @notice Creates new champ + /// @param _affiliateAddress Affiliate address (optional) + function createChamp(address _affiliateAddress) external payable + whenNotPaused + isPaid(createChampFee) + distributeInput(_affiliateAddress) + { + + /* + Champ memory champ = Champ({ + id: 0, + attackPower: 2 + randMod(4), + defencePower: 1 + randMod(4), + cooldownTime: uint256(1 days) - uint256(randMod(9) * 1 hours), + readyTime: 0, + winCount: 0, + lossCount: 0, + position: leaderboard.length + 1, //Last place in leaderboard is new champ's position. Used in new champ struct bellow. +1 to avoid zero position. + price: 0, + withdrawCooldown: uint256(block.timestamp), + eq_sword: 0, + eq_shield: 0, + eq_helmet: 0, + forSale: false + }); + */ + + // This line bellow is about 30k gas cheaper than lines above. They are the same. Lines above are just more readable. + uint256 id = champs.push(Champ(0, 2 + randMod(4), 1 + randMod(4), uint256(1 days) - uint256(randMod(9) * 1 hours), 0, 0, 0, leaderboard.length + 1, 0, uint256(block.timestamp), 0,0,0, false)) - 1; + + + champs[id].id = id; //sets id in Champ struct + leaderboard.push(id); //push champ on the last place in leaderboard + champToOwner[id] = msg.sender; //sets owner of this champ - msg.sender + addressInfo[msg.sender].champsCount++; + + emit NewChamp(id, msg.sender); + + } + + + /// @notice Change "CreateChampFee". If ETH price will grow up it can expensive to create new champ. + /// @param _fee New "CreateChampFee" + /// @dev Only owner of contract can change "CreateChampFee" + function setCreateChampFee(uint256 _fee) external onlyOwner { + createChampFee = _fee; + } + + + /// @notice Change champ's name + function changeChampsName(uint _champId, string _name) external + onlyOwnerOfChamp(_champId){ + champToName[_champId] = _name; + } + + + /// @notice Change players's name + function changePlayersName(string _name) external { + addressInfo[msg.sender].name = _name; + } + + + /// @notice Withdraw champ's reward + /// @param _id Champ id + /// @dev Move champ reward to pending withdrawal to his wallet. + function withdrawChamp(uint _id) external + onlyOwnerOfChamp(_id) + contractMinBalanceReached + isChampWithdrawReady(_id) + whenNotPaused { + Champ storage champ = champs[_id]; + require(champ.position <= 800); + + champ.withdrawCooldown = block.timestamp + 1 days; //one withdrawal 1 per day + + uint256 withdrawal = getChampReward(champ.position); + addressInfo[msg.sender].withdrawal += withdrawal; + pendingWithdrawal += withdrawal; + } + + + /// @dev Send all pending funds of caller's address + function withdrawToAddress(address _address) external + whenNotPaused { + address playerAddress = _address; + if(playerAddress == address(0)){ playerAddress = msg.sender; } + uint256 share = addressInfo[playerAddress].withdrawal; //gets pending funds + require(share > 0); //is it more than 0? + + //first sets players withdrawal pending to 0 and subtract amount from playerWithdrawals then transfer funds to avoid reentrancy + addressInfo[playerAddress].withdrawal = 0; //set player's withdrawal pendings to 0 + pendingWithdrawal = pendingWithdrawal.sub(share); //subtract share from total pendings + + playerAddress.transfer(share); //transfer + } + +} + + + +/// @title Moderates items and creates new ones +contract Items is ChampFactory { + + event NewItem(uint256 itemID, address owner); + + constructor () internal { + //item -> nothing + items.push(Item(0, 0, 0, 0, 0, 0, 0, false, false)); + } + + /* + * Modifiers + */ + /// @notice Checks if sender is owner of item + modifier onlyOwnerOfItem(uint256 _itemId) { + require(_itemId != 0); + require(msg.sender == itemToOwner[_itemId]); + _; + } + + + /// @notice Checks if sender is NOT owner of item + modifier onlyNotOwnerOfItem(uint256 _itemId) { + require(msg.sender != itemToOwner[_itemId]); + _; + } + + + /* + * View + */ + ///@notice Check if champ has something on + ///@param _type Sword, shield or helmet + function hasChampSomethingOn(uint _champId, uint8 _type) internal view returns(bool){ + Champ storage champ = champs[_champId]; + if(_type == 1){ + return (champ.eq_sword == 0) ? false : true; + } + if(_type == 2){ + return (champ.eq_shield == 0) ? false : true; + } + if(_type == 3){ + return (champ.eq_helmet == 0) ? false : true; + } + } + + + /// @notice Gets items by address + /// @param _owner Owner address + function getItemsByOwner(address _owner) external view returns(uint256[]) { + uint256[] memory result = new uint256[](addressInfo[_owner].itemsCount); + uint256 counter = 0; + for (uint256 i = 0; i < items.length; i++) { + if (itemToOwner[i] == _owner) { + result[counter] = i; + counter++; + } + } + return result; + } + + + /* + * Public + */ + ///@notice Takes item off champ + function takeOffItem(uint _champId, uint8 _type) public + onlyOwnerOfChamp(_champId) { + uint256 itemId; + Champ storage champ = champs[_champId]; + if(_type == 1){ + itemId = champ.eq_sword; //Get item ID + if (itemId > 0) { //0 = nothing + champ.eq_sword = 0; //take off sword + } + } + if(_type == 2){ + itemId = champ.eq_shield; //Get item ID + if(itemId > 0) {//0 = nothing + champ.eq_shield = 0; //take off shield + } + } + if(_type == 3){ + itemId = champ.eq_helmet; //Get item ID + if(itemId > 0) { //0 = nothing + champ.eq_helmet = 0; //take off + } + } + if(itemId > 0){ + items[itemId].onChamp = false; //item is free to use, is not on champ + } + } + + + + /* + * External + */ + ///@notice Puts item on champ + function putOn(uint256 _champId, uint256 _itemId) external + onlyOwnerOfChamp(_champId) + onlyOwnerOfItem(_itemId) { + Champ storage champ = champs[_champId]; + Item storage item = items[_itemId]; + + //checks if items is on some other champ + if(item.onChamp){ + takeOffItem(item.onChampId, item.itemType); //take off from champ + } + + item.onChamp = true; //item is on champ + item.onChampId = _champId; //champ's id + + //put on + if(item.itemType == 1){ + //take off actual sword + if(champ.eq_sword > 0){ + takeOffItem(champ.id, 1); + } + champ.eq_sword = _itemId; //put on sword + } + if(item.itemType == 2){ + //take off actual shield + if(champ.eq_shield > 0){ + takeOffItem(champ.id, 2); + } + champ.eq_shield = _itemId; //put on shield + } + if(item.itemType == 3){ + //take off actual helmet + if(champ.eq_helmet > 0){ + takeOffItem(champ.id, 3); + } + champ.eq_helmet = _itemId; //put on helmet + } + } + + + + /// @notice Opens loot box and generates new item + function openLootbox(address _affiliateAddress) external payable + whenNotPaused + isPaid(lootboxFee) + distributeInput(_affiliateAddress) { + + uint256 pointToCooldownReduction; + uint256 randNum = randMod(1001); //random number <= 1000 + uint256 pointsToShare; //total points given + uint256 itemID; + + //sets up item + Item memory item = Item({ + itemType: uint8(uint256(randMod(3) + 1)), //generates item type - max num is 2 -> 0 + 1 SWORD | 1 + 1 SHIELD | 2 + 1 HELMET; + itemRarity: uint8(0), + attackPower: 0, + defencePower: 0, + cooldownReduction: 0, + price: 0, + onChampId: 0, + onChamp: false, + forSale: false + }); + + // Gets Rarity of item + // 45% common + // 27% uncommon + // 19% rare + // 7% epic + // 2% legendary + if(450 > randNum){ + pointsToShare = 25 + randMod(9); //25 basic + random number max to 8 + item.itemRarity = uint8(1); + }else if(720 > randNum){ + pointsToShare = 42 + randMod(17); //42 basic + random number max to 16 + item.itemRarity = uint8(2); + }else if(910 > randNum){ + pointsToShare = 71 + randMod(25); //71 basic + random number max to 24 + item.itemRarity = uint8(3); + }else if(980 > randNum){ + pointsToShare = 119 + randMod(33); //119 basic + random number max to 32 + item.itemRarity = uint8(4); + }else{ + pointsToShare = 235 + randMod(41); //235 basic + random number max to 40 + item.itemRarity = uint8(5); + } + + + //Gets type of item + if(item.itemType == uint8(1)){ //ITEM IS SWORDS + item.attackPower = pointsToShare / 10 * 7; //70% attackPower + pointsToShare -= item.attackPower; //points left; + + item.defencePower = pointsToShare / 10 * randMod(6); //up to 15% defencePower + pointsToShare -= item.defencePower; //points left; + + item.cooldownReduction = pointsToShare * uint256(1 minutes); //rest of points is cooldown reduction + item.itemType = uint8(1); + } + + if(item.itemType == uint8(2)){ //ITEM IS SHIELD + item.defencePower = pointsToShare / 10 * 7; //70% defencePower + pointsToShare -= item.defencePower; //points left; + + item.attackPower = pointsToShare / 10 * randMod(6); //up to 15% attackPowerPower + pointsToShare -= item.attackPower; //points left; + + item.cooldownReduction = pointsToShare * uint256(1 minutes); //rest of points is cooldown reduction + item.itemType = uint8(2); + } + + if(item.itemType == uint8(3)){ //ITEM IS HELMET + pointToCooldownReduction = pointsToShare / 10 * 7; //70% cooldown reduction + item.cooldownReduction = pointToCooldownReduction * uint256(1 minutes); //points to time + pointsToShare -= pointToCooldownReduction; //points left; + + item.attackPower = pointsToShare / 10 * randMod(6); //up to 15% attackPower + pointsToShare -= item.attackPower; //points left; + + item.defencePower = pointsToShare; //rest of points is defencePower + item.itemType = uint8(3); + } + + itemID = items.push(item) - 1; + + itemToOwner[itemID] = msg.sender; //sets owner of this item - msg.sender + addressInfo[msg.sender].itemsCount++; //every address has count of items + + emit NewItem(itemID, msg.sender); + + } + + /// @notice Change "lootboxFee". + /// @param _fee New "lootboxFee" + /// @dev Only owner of contract can change "lootboxFee" + function setLootboxFee(uint _fee) external onlyOwner { + lootboxFee = _fee; + } +} + + + +/// @title Moderates buying and selling items +contract ItemMarket is Items { + + event TransferItem(address from, address to, uint256 itemID); + + /* + * Modifiers + */ + ///@notice Checks if item is for sale + modifier itemIsForSale(uint256 _id){ + require(items[_id].forSale); + _; + } + + ///@notice Checks if item is NOT for sale + modifier itemIsNotForSale(uint256 _id){ + require(items[_id].forSale == false); + _; + } + + ///@notice If item is for sale then cancel sale + modifier ifItemForSaleThenCancelSale(uint256 _itemID){ + Item storage item = items[_itemID]; + if(item.forSale){ + _cancelItemSale(item); + } + _; + } + + + ///@notice Distribute sale eth input + modifier distributeSaleInput(address _owner) { + uint256 contractOwnerCommision; //1% + uint256 playerShare; //99% + + if(msg.value > 100){ + contractOwnerCommision = (msg.value / 100); + playerShare = msg.value - contractOwnerCommision; + }else{ + contractOwnerCommision = 0; + playerShare = msg.value; + } + + addressInfo[_owner].withdrawal += playerShare; + addressInfo[contractOwner].withdrawal += contractOwnerCommision; + pendingWithdrawal += playerShare + contractOwnerCommision; + _; + } + + + + /* + * View + */ + function getItemsForSale() view external returns(uint256[]){ + uint256[] memory result = new uint256[](itemsForSaleCount); + if(itemsForSaleCount > 0){ + uint256 counter = 0; + for (uint256 i = 0; i < items.length; i++) { + if (items[i].forSale == true) { + result[counter]=i; + counter++; + } + } + } + return result; + } + + /* + * Private + */ + ///@notice Cancel sale. Should not be called without checking if item is really for sale. + function _cancelItemSale(Item storage item) private { + //No need to overwrite item's price + item.forSale = false; + itemsForSaleCount--; + } + + + /* + * Internal + */ + /// @notice Transfer item + function transferItem(address _from, address _to, uint256 _itemID) internal + ifItemForSaleThenCancelSale(_itemID) { + Item storage item = items[_itemID]; + + //take off + if(item.onChamp && _to != champToOwner[item.onChampId]){ + takeOffItem(item.onChampId, item.itemType); + } + + addressInfo[_to].itemsCount++; + addressInfo[_from].itemsCount--; + itemToOwner[_itemID] = _to; + + emit TransferItem(_from, _to, _itemID); + } + + + + /* + * Public + */ + /// @notice Calls transfer item + /// @notice Address _from is msg.sender. Cannot be used is market, bc msg.sender is buyer + function giveItem(address _to, uint256 _itemID) public + onlyOwnerOfItem(_itemID) { + transferItem(msg.sender, _to, _itemID); + } + + + /// @notice Calcels item's sale + function cancelItemSale(uint256 _id) public + itemIsForSale(_id) + onlyOwnerOfItem(_id){ + Item storage item = items[_id]; + _cancelItemSale(item); + } + + + /* + * External + */ + /// @notice Sets item for sale + function setItemForSale(uint256 _id, uint256 _price) external + onlyOwnerOfItem(_id) + itemIsNotForSale(_id) { + Item storage item = items[_id]; + item.forSale = true; + item.price = _price; + itemsForSaleCount++; + } + + + /// @notice Buys item + function buyItem(uint256 _id) external payable + whenNotPaused + onlyNotOwnerOfItem(_id) + itemIsForSale(_id) + isPaid(items[_id].price) + distributeSaleInput(itemToOwner[_id]) + { + transferItem(itemToOwner[_id], msg.sender, _id); + } + +} + + + +/// @title Manages forging +contract ItemForge is ItemMarket { + + event Forge(uint256 forgedItemID); + + ///@notice Forge items together + function forgeItems(uint256 _parentItemID, uint256 _childItemID) external + onlyOwnerOfItem(_parentItemID) + onlyOwnerOfItem(_childItemID) + ifItemForSaleThenCancelSale(_parentItemID) + ifItemForSaleThenCancelSale(_childItemID) { + + //checks if items are not the same + require(_parentItemID != _childItemID); + + Item storage parentItem = items[_parentItemID]; + Item storage childItem = items[_childItemID]; + + //take child item off, because child item will be burned + if(childItem.onChamp){ + takeOffItem(childItem.onChampId, childItem.itemType); + } + + //update parent item + parentItem.attackPower = (parentItem.attackPower > childItem.attackPower) ? parentItem.attackPower : childItem.attackPower; + parentItem.defencePower = (parentItem.defencePower > childItem.defencePower) ? parentItem.defencePower : childItem.defencePower; + parentItem.cooldownReduction = (parentItem.cooldownReduction > childItem.cooldownReduction) ? parentItem.cooldownReduction : childItem.cooldownReduction; + parentItem.itemRarity = uint8(6); + + //burn child item + transferItem(msg.sender, address(0), _childItemID); + + emit Forge(_parentItemID); + } + +} + + +/// @title Manages attacks in game +contract ChampAttack is ItemForge { + + event Attack(uint256 winnerChampID, uint256 defeatedChampID, bool didAttackerWin); + + /* + * Modifiers + */ + /// @notice Is champ ready to fight again? + modifier isChampReady(uint256 _champId) { + require (champs[_champId].readyTime <= block.timestamp); + _; + } + + + /// @notice Prevents from self-attack + modifier notSelfAttack(uint256 _champId, uint256 _targetId) { + require(_champId != _targetId); + _; + } + + + /// @notice Checks if champ does exist + modifier targetExists(uint256 _targetId){ + require(champToOwner[_targetId] != address(0)); + _; + } + + + /* + * View + */ + /// @notice Gets champ's attack power, defence power and cooldown reduction with items on + function getChampStats(uint256 _champId) public view returns(uint256,uint256,uint256){ + Champ storage champ = champs[_champId]; + Item storage sword = items[champ.eq_sword]; + Item storage shield = items[champ.eq_shield]; + Item storage helmet = items[champ.eq_helmet]; + + //AP + uint256 totalAttackPower = champ.attackPower + sword.attackPower + shield.attackPower + helmet.attackPower; //Gets champs AP + + //DP + uint256 totalDefencePower = champ.defencePower + sword.defencePower + shield.defencePower + helmet.defencePower; //Gets champs DP + + //CR + uint256 totalCooldownReduction = sword.cooldownReduction + shield.cooldownReduction + helmet.cooldownReduction; //Gets CR + + return (totalAttackPower, totalDefencePower, totalCooldownReduction); + } + + + /* + * Pure + */ + /// @notice Subtracts ability points. Helps to not cross minimal attack ability points -> 2 + /// @param _playerAttackPoints Actual player's attack points + /// @param _x Amount to subtract + function subAttack(uint256 _playerAttackPoints, uint256 _x) internal pure returns (uint256) { + return (_playerAttackPoints <= _x + 2) ? 2 : _playerAttackPoints - _x; + } + + + /// @notice Subtracts ability points. Helps to not cross minimal defence ability points -> 1 + /// @param _playerDefencePoints Actual player's defence points + /// @param _x Amount to subtract + function subDefence(uint256 _playerDefencePoints, uint256 _x) internal pure returns (uint256) { + return (_playerDefencePoints <= _x) ? 1 : _playerDefencePoints - _x; + } + + + /* + * Private + */ + /// @dev Is called from from Attack function after the winner is already chosen + /// @dev Updates abilities, champ's stats and swaps positions + function _attackCompleted(Champ storage _winnerChamp, Champ storage _defeatedChamp, uint256 _pointsGiven, uint256 _pointsToAttackPower) private { + /* + * Updates abilities after fight + */ + //winner abilities update + _winnerChamp.attackPower += _pointsToAttackPower; //increase attack power + _winnerChamp.defencePower += _pointsGiven - _pointsToAttackPower; //max point that was given - already given to AP + + //defeated champ's abilities update + //checks for not cross minimal AP & DP points + _defeatedChamp.attackPower = subAttack(_defeatedChamp.attackPower, _pointsToAttackPower); //decrease attack power + _defeatedChamp.defencePower = subDefence(_defeatedChamp.defencePower, _pointsGiven - _pointsToAttackPower); // decrease defence power + + + + /* + * Update champs' wins and losses + */ + _winnerChamp.winCount++; + _defeatedChamp.lossCount++; + + + + /* + * Swap positions + */ + if(_winnerChamp.position > _defeatedChamp.position) { //require loser to has better (lower) postion than attacker + uint256 winnerPosition = _winnerChamp.position; + uint256 loserPosition = _defeatedChamp.position; + + _defeatedChamp.position = winnerPosition; + _winnerChamp.position = loserPosition; + + //position in champ struct is always one point bigger than in leaderboard array + leaderboard[winnerPosition - 1] = _defeatedChamp.id; + leaderboard[loserPosition - 1] = _winnerChamp.id; + } + } + + + /// @dev Gets pointsGiven and pointsToAttackPower + function _getPoints(uint256 _pointsGiven) private returns (uint256 pointsGiven, uint256 pointsToAttackPower){ + return (_pointsGiven, randMod(_pointsGiven+1)); + } + + + + /* + * External + */ + /// @notice Attack function + /// @param _champId Attacker champ + /// @param _targetId Target champ + function attack(uint256 _champId, uint256 _targetId) external + onlyOwnerOfChamp(_champId) + isChampReady(_champId) + notSelfAttack(_champId, _targetId) + targetExists(_targetId) { + Champ storage myChamp = champs[_champId]; + Champ storage enemyChamp = champs[_targetId]; + uint256 pointsGiven; //total points that will be divided between AP and DP + uint256 pointsToAttackPower; //part of points that will be added to attack power, the rest of points go to defence power + uint256 myChampAttackPower; + uint256 enemyChampDefencePower; + uint256 myChampCooldownReduction; + + (myChampAttackPower,,myChampCooldownReduction) = getChampStats(_champId); + (,enemyChampDefencePower,) = getChampStats(_targetId); + + + //if attacker's AP is more than target's DP then attacker wins + if (myChampAttackPower > enemyChampDefencePower) { + + //this should demotivate players from farming on way weaker champs than they are + //the bigger difference between AP & DP is, the reward is smaller + if(myChampAttackPower - enemyChampDefencePower < 5){ + + //big experience - 3 ability points + (pointsGiven, pointsToAttackPower) = _getPoints(3); + + + }else if(myChampAttackPower - enemyChampDefencePower < 10){ + + //medium experience - 2 ability points + (pointsGiven, pointsToAttackPower) = _getPoints(2); + + }else{ + + //small experience - 1 ability point to random ability (attack power or defence power) + (pointsGiven, pointsToAttackPower) = _getPoints(1); + + } + + _attackCompleted(myChamp, enemyChamp, pointsGiven, pointsToAttackPower); + + emit Attack(myChamp.id, enemyChamp.id, true); + + } else { + + //1 ability point to random ability (attack power or defence power) + (pointsGiven, pointsToAttackPower) = _getPoints(1); + + _attackCompleted(enemyChamp, myChamp, pointsGiven, pointsToAttackPower); + + emit Attack(enemyChamp.id, myChamp.id, false); + + } + + //Trigger cooldown for attacker + myChamp.readyTime = uint256(block.timestamp + myChamp.cooldownTime - myChampCooldownReduction); + + } + +} + + +/// @title Moderates buying and selling champs +contract ChampMarket is ChampAttack { + + event TransferChamp(address from, address to, uint256 champID); + + /* + * Modifiers + */ + ///@notice Require champ to be sale + modifier champIsForSale(uint256 _id){ + require(champs[_id].forSale); + _; + } + + + ///@notice Require champ NOT to be for sale + modifier champIsNotForSale(uint256 _id){ + require(champs[_id].forSale == false); + _; + } + + + ///@notice If champ is for sale then cancel sale + modifier ifChampForSaleThenCancelSale(uint256 _champID){ + Champ storage champ = champs[_champID]; + if(champ.forSale){ + _cancelChampSale(champ); + } + _; + } + + + /* + * View + */ + ///@notice Gets all champs for sale + function getChampsForSale() view external returns(uint256[]){ + uint256[] memory result = new uint256[](champsForSaleCount); + if(champsForSaleCount > 0){ + uint256 counter = 0; + for (uint256 i = 0; i < champs.length; i++) { + if (champs[i].forSale == true) { + result[counter]=i; + counter++; + } + } + } + return result; + } + + + /* + * Private + */ + ///@dev Cancel sale. Should not be called without checking if champ is really for sale. + function _cancelChampSale(Champ storage champ) private { + //cancel champ's sale + //no need waste gas to overwrite his price. + champ.forSale = false; + champsForSaleCount--; + } + + + /* + * Internal + */ + /// @notice Transfer champ + function transferChamp(address _from, address _to, uint256 _champId) internal ifChampForSaleThenCancelSale(_champId){ + Champ storage champ = champs[_champId]; + + //transfer champ + addressInfo[_to].champsCount++; + addressInfo[_from].champsCount--; + champToOwner[_champId] = _to; + + //transfer items + if(champ.eq_sword != 0) { transferItem(_from, _to, champ.eq_sword); } + if(champ.eq_shield != 0) { transferItem(_from, _to, champ.eq_shield); } + if(champ.eq_helmet != 0) { transferItem(_from, _to, champ.eq_helmet); } + + emit TransferChamp(_from, _to, _champId); + } + + + + /* + * Public + */ + /// @notice Champ is no more for sale + function cancelChampSale(uint256 _id) public + champIsForSale(_id) + onlyOwnerOfChamp(_id) { + Champ storage champ = champs[_id]; + _cancelChampSale(champ); + } + + + /* + * External + */ + /// @notice Gift champ + /// @dev Address _from is msg.sender + function giveChamp(address _to, uint256 _champId) external + onlyOwnerOfChamp(_champId) { + transferChamp(msg.sender, _to, _champId); + } + + + /// @notice Sets champ for sale + function setChampForSale(uint256 _id, uint256 _price) external + onlyOwnerOfChamp(_id) + champIsNotForSale(_id) { + Champ storage champ = champs[_id]; + champ.forSale = true; + champ.price = _price; + champsForSaleCount++; + } + + + /// @notice Buys champ + function buyChamp(uint256 _id) external payable + whenNotPaused + onlyNotOwnerOfChamp(_id) + champIsForSale(_id) + isPaid(champs[_id].price) + distributeSaleInput(champToOwner[_id]) { + transferChamp(champToOwner[_id], msg.sender, _id); + } + +} + + + +/// @title Only used for deploying all contracts +contract MyCryptoChampCore is ChampMarket { + /* + © Copyright 2018 - Patrik Mojzis + Redistributing and modifying is prohibited. + + https://mycryptochamp.io/ + + What is MyCryptoChamp? + - Blockchain game about upgrading champs by fighting, getting better items, + trading them and the best 800 champs are daily rewarded by real Ether. + + Feel free to ask any questions + hello@mycryptochamp.io + */ +} \ No newline at end of file diff --git a/data_full/CVE/2018-12959.sol b/data_full/CVE/2018-12959.sol new file mode 100644 index 00000000..ed00627b --- /dev/null +++ b/data_full/CVE/2018-12959.sol @@ -0,0 +1,127 @@ +/** + *Submitted for verification at Etherscan.io on 2017-12-27 +*/ + +pragma solidity ^0.4.4; + +contract Token { + + /// @return total amount of tokens + function totalSupply() constant returns (uint256 supply) {} + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) constant returns (uint256 balance) {} + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) returns (bool success) {} + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + + /// @notice `msg.sender` approves `_addr` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of wei to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) returns (bool success) {} + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + +} + + + +contract StandardToken is Token { + + function transfer(address _to, uint256 _value) returns (bool success) { + //Default assumes totalSupply can't be over max (2^256 - 1). + //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. + //Replace the if with this one instead. + //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + //same as above. Replace this line with the following if you want to protect against wrapping uints. + //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} + +contract AditusToken is StandardToken { + + function () { + //if ether is sent to this address, send it back. + throw; + } + + /* Public variables of the token */ + + string public name; + uint8 public decimals; + string public symbol; + string public version = 'A1.0'; + + function AditusToken( + ) { + balances[msg.sender] = 1000000000000000000000000000; // Give the creator all initial tokens (100000 for example) + totalSupply = 1000000000000000000000000000; // Update total supply (100000 for example) + name = "Aditus"; // Set the name for display purposes + decimals = 18; // Amount of decimals for display purposes + symbol = "ADI"; // Set the symbol for display purposes + } + + /* Approves and then calls the receiving contract */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. + //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) + //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-12975.sol b/data_full/CVE/2018-12975.sol new file mode 100644 index 00000000..2ade75bc --- /dev/null +++ b/data_full/CVE/2018-12975.sol @@ -0,0 +1,1234 @@ +/** + *Submitted for verification at Etherscan.io on 2018-02-14 +*/ + +pragma solidity ^0.4.18; + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { + address public owner; + + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Ownable() public { + owner = msg.sender; + } + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) public onlyOwner { + require(newOwner != address(0)); + OwnershipTransferred(owner, newOwner); + owner = newOwner; + } + +} + + +/** + * @title Claimable + * @dev Extension for the Ownable contract, where the ownership needs to be claimed. + * This allows the new owner to accept the transfer. + */ +contract Claimable is Ownable { + address public pendingOwner; + + /** + * @dev Modifier throws if called by any account other than the pendingOwner. + */ + modifier onlyPendingOwner() { + require(msg.sender == pendingOwner); + _; + } + + /** + * @dev Allows the current owner to set the pendingOwner address. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) onlyOwner public { + pendingOwner = newOwner; + } + + /** + * @dev Allows the pendingOwner address to finalize the transfer. + */ + function claimOwnership() onlyPendingOwner public { + OwnershipTransferred(owner, pendingOwner); + owner = pendingOwner; + pendingOwner = address(0); + } +} + + +/** + * @title Pausable + * @dev Base contract which allows children to implement an emergency stop mechanism. + */ +contract Pausable is Ownable { + event Pause(); + event Unpause(); + + bool public paused = false; + + + /** + * @dev Modifier to make a function callable only when the contract is not paused. + */ + modifier whenNotPaused() { + require(!paused); + _; + } + + /** + * @dev Modifier to make a function callable only when the contract is paused. + */ + modifier whenPaused() { + require(paused); + _; + } + + /** + * @dev called by the owner to pause, triggers stopped state + */ + function pause() onlyOwner whenNotPaused public { + paused = true; + Pause(); + } + + /** + * @dev called by the owner to unpause, returns to normal state + */ + function unpause() onlyOwner whenPaused public { + paused = false; + Unpause(); + } +} + + +/** + * @title AccessDeploy + * @dev Adds grant/revoke functions to the contract. + */ +contract AccessDeploy is Claimable { + + // Access for deploying heroes. + mapping(address => bool) private deployAccess; + + // Modifier for accessibility to deploy a hero on a location. + modifier onlyAccessDeploy { + require(msg.sender == owner || deployAccess[msg.sender] == true); + _; + } + + // @dev Grant acess to deploy heroes. + function grantAccessDeploy(address _address) + onlyOwner + public + { + deployAccess[_address] = true; + } + + // @dev Revoke acess to deploy heroes. + function revokeAccessDeploy(address _address) + onlyOwner + public + { + deployAccess[_address] = false; + } + +} + + +/** + * @title AccessDeposit + * @dev Adds grant/revoke functions to the contract. + */ +contract AccessDeposit is Claimable { + + // Access for adding deposit. + mapping(address => bool) private depositAccess; + + // Modifier for accessibility to add deposit. + modifier onlyAccessDeposit { + require(msg.sender == owner || depositAccess[msg.sender] == true); + _; + } + + // @dev Grant acess to deposit heroes. + function grantAccessDeposit(address _address) + onlyOwner + public + { + depositAccess[_address] = true; + } + + // @dev Revoke acess to deposit heroes. + function revokeAccessDeposit(address _address) + onlyOwner + public + { + depositAccess[_address] = false; + } + +} + + +/** + * @title AccessMint + * @dev Adds grant/revoke functions to the contract. + */ +contract AccessMint is Claimable { + + // Access for minting new tokens. + mapping(address => bool) private mintAccess; + + // Modifier for accessibility to define new hero types. + modifier onlyAccessMint { + require(msg.sender == owner || mintAccess[msg.sender] == true); + _; + } + + // @dev Grant acess to mint heroes. + function grantAccessMint(address _address) + onlyOwner + public + { + mintAccess[_address] = true; + } + + // @dev Revoke acess to mint heroes. + function revokeAccessMint(address _address) + onlyOwner + public + { + mintAccess[_address] = false; + } + +} + + +/** + * @title ERC721 interface + * @dev see https://github.com/ethereum/eips/issues/721 + */ +contract ERC721 { + event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); + event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); + + function balanceOf(address _owner) public view returns (uint256 _balance); + function ownerOf(uint256 _tokenId) public view returns (address _owner); + function transfer(address _to, uint256 _tokenId) public; + function approve(address _to, uint256 _tokenId) public; + function takeOwnership(uint256 _tokenId) public; +} + + +/** + * @title ERC721Token + * Generic implementation for the required functionality of the ERC721 standard + */ +contract ERC721Token is ERC721 { + using SafeMath for uint256; + + // Total amount of tokens + uint256 private totalTokens; + + // Mapping from token ID to owner + mapping (uint256 => address) private tokenOwner; + + // Mapping from token ID to approved address + mapping (uint256 => address) private tokenApprovals; + + // Mapping from owner to list of owned token IDs + mapping (address => uint256[]) private ownedTokens; + + // Mapping from token ID to index of the owner tokens list + mapping(uint256 => uint256) private ownedTokensIndex; + + /** + * @dev Guarantees msg.sender is owner of the given token + * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender + */ + modifier onlyOwnerOf(uint256 _tokenId) { + require(ownerOf(_tokenId) == msg.sender); + _; + } + + /** + * @dev Gets the total amount of tokens stored by the contract + * @return uint256 representing the total amount of tokens + */ + function totalSupply() public view returns (uint256) { + return totalTokens; + } + + /** + * @dev Gets the balance of the specified address + * @param _owner address to query the balance of + * @return uint256 representing the amount owned by the passed address + */ + function balanceOf(address _owner) public view returns (uint256) { + return ownedTokens[_owner].length; + } + + /** + * @dev Gets the list of tokens owned by a given address + * @param _owner address to query the tokens of + * @return uint256[] representing the list of tokens owned by the passed address + */ + function tokensOf(address _owner) public view returns (uint256[]) { + return ownedTokens[_owner]; + } + + /** + * @dev Gets the owner of the specified token ID + * @param _tokenId uint256 ID of the token to query the owner of + * @return owner address currently marked as the owner of the given token ID + */ + function ownerOf(uint256 _tokenId) public view returns (address) { + address owner = tokenOwner[_tokenId]; + require(owner != address(0)); + return owner; + } + + /** + * @dev Gets the approved address to take ownership of a given token ID + * @param _tokenId uint256 ID of the token to query the approval of + * @return address currently approved to take ownership of the given token ID + */ + function approvedFor(uint256 _tokenId) public view returns (address) { + return tokenApprovals[_tokenId]; + } + + /** + * @dev Transfers the ownership of a given token ID to another address + * @param _to address to receive the ownership of the given token ID + * @param _tokenId uint256 ID of the token to be transferred + */ + function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { + clearApprovalAndTransfer(msg.sender, _to, _tokenId); + } + + /** + * @dev Approves another address to claim for the ownership of the given token ID + * @param _to address to be approved for the given token ID + * @param _tokenId uint256 ID of the token to be approved + */ + function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { + address owner = ownerOf(_tokenId); + require(_to != owner); + if (approvedFor(_tokenId) != 0 || _to != 0) { + tokenApprovals[_tokenId] = _to; + Approval(owner, _to, _tokenId); + } + } + + /** + * @dev Claims the ownership of a given token ID + * @param _tokenId uint256 ID of the token being claimed by the msg.sender + */ + function takeOwnership(uint256 _tokenId) public { + require(isApprovedFor(msg.sender, _tokenId)); + clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId); + } + + /** + * @dev Mint token function + * @param _to The address that will own the minted token + * @param _tokenId uint256 ID of the token to be minted by the msg.sender + */ + function _mint(address _to, uint256 _tokenId) internal { + require(_to != address(0)); + addToken(_to, _tokenId); + Transfer(0x0, _to, _tokenId); + } + + /** + * @dev Burns a specific token + * @param _tokenId uint256 ID of the token being burned by the msg.sender + */ + function _burn(uint256 _tokenId) onlyOwnerOf(_tokenId) internal { + if (approvedFor(_tokenId) != 0) { + clearApproval(msg.sender, _tokenId); + } + removeToken(msg.sender, _tokenId); + Transfer(msg.sender, 0x0, _tokenId); + } + + /** + * @dev Tells whether the msg.sender is approved for the given token ID or not + * This function is not private so it can be extended in further implementations like the operatable ERC721 + * @param _owner address of the owner to query the approval of + * @param _tokenId uint256 ID of the token to query the approval of + * @return bool whether the msg.sender is approved for the given token ID or not + */ + function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) { + return approvedFor(_tokenId) == _owner; + } + + /** + * @dev Internal function to clear current approval and transfer the ownership of a given token ID + * @param _from address which you want to send tokens from + * @param _to address which you want to transfer the token to + * @param _tokenId uint256 ID of the token to be transferred + */ + function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal { + require(_to != address(0)); + require(_to != ownerOf(_tokenId)); + require(ownerOf(_tokenId) == _from); + + clearApproval(_from, _tokenId); + removeToken(_from, _tokenId); + addToken(_to, _tokenId); + Transfer(_from, _to, _tokenId); + } + + /** + * @dev Internal function to clear current approval of a given token ID + * @param _tokenId uint256 ID of the token to be transferred + */ + function clearApproval(address _owner, uint256 _tokenId) private { + require(ownerOf(_tokenId) == _owner); + tokenApprovals[_tokenId] = 0; + Approval(_owner, 0, _tokenId); + } + + /** + * @dev Internal function to add a token ID to the list of a given address + * @param _to address representing the new owner of the given token ID + * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address + */ + function addToken(address _to, uint256 _tokenId) private { + require(tokenOwner[_tokenId] == address(0)); + tokenOwner[_tokenId] = _to; + uint256 length = balanceOf(_to); + ownedTokens[_to].push(_tokenId); + ownedTokensIndex[_tokenId] = length; + totalTokens = totalTokens.add(1); + } + + /** + * @dev Internal function to remove a token ID from the list of a given address + * @param _from address representing the previous owner of the given token ID + * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address + */ + function removeToken(address _from, uint256 _tokenId) private { + require(ownerOf(_tokenId) == _from); + + uint256 tokenIndex = ownedTokensIndex[_tokenId]; + uint256 lastTokenIndex = balanceOf(_from).sub(1); + uint256 lastToken = ownedTokens[_from][lastTokenIndex]; + + tokenOwner[_tokenId] = 0; + ownedTokens[_from][tokenIndex] = lastToken; + ownedTokens[_from][lastTokenIndex] = 0; + // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to + // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping + // the lastToken to the first position, and then dropping the element placed in the last position of the list + + ownedTokens[_from].length--; + ownedTokensIndex[_tokenId] = 0; + ownedTokensIndex[lastToken] = tokenIndex; + totalTokens = totalTokens.sub(1); + } +} + + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + function totalSupply() public view returns (uint256); + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + + /** + * @dev Multiplies two numbers, throws on overflow. + */ + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + /** + * @dev Integer division of two numbers, truncating the quotient. + */ + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + /** + * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + /** + * @dev Adds two numbers, throws on overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + uint256 totalSupply_; + + /** + * @dev total number of tokens in existence + */ + function totalSupply() public view returns (uint256) { + return totalSupply_; + } + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + + // SafeMath.sub will throw if there is not enough balance. + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } + +} + + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + + /** + * @dev Increase the amount of tokens that an owner allowed to a spender. + * + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + * @param _spender The address which will spend the funds. + * @param _addedValue The amount of tokens to increase the allowance by. + */ + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + /** + * @dev Decrease the amount of tokens that an owner allowed to a spender. + * + * approve should be called when allowed[_spender] == 0. To decrement + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + * @param _spender The address which will spend the funds. + * @param _subtractedValue The amount of tokens to decrease the allowance by. + */ + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + + +/** + * @title Gold + * @dev ERC20 Token that can be minted. + */ +contract Gold is StandardToken, Claimable, AccessMint { + + string public constant name = "Gold"; + string public constant symbol = "G"; + uint8 public constant decimals = 18; + + // Event that is fired when minted. + event Mint( + address indexed _to, + uint256 indexed _tokenId + ); + + // @dev Mint tokens with _amount to the address. + function mint(address _to, uint256 _amount) + onlyAccessMint + public + returns (bool) + { + totalSupply_ = totalSupply_.add(_amount); + balances[_to] = balances[_to].add(_amount); + Mint(_to, _amount); + Transfer(address(0), _to, _amount); + return true; + } + +} + + +/** + * @title CryptoSagaHero + * @dev The token contract for the hero. + * Also a superset of the ERC721 standard that allows for the minting + * of the non-fungible tokens. + */ +contract CryptoSagaHero is ERC721Token, Claimable, Pausable, AccessMint, AccessDeploy, AccessDeposit { + + string public constant name = "CryptoSaga Hero"; + string public constant symbol = "HERO"; + + struct HeroClass { + // ex) Soldier, Knight, Fighter... + string className; + // 0: Common, 1: Uncommon, 2: Rare, 3: Heroic, 4: Legendary. + uint8 classRank; + // 0: Human, 1: Celestial, 2: Demon, 3: Elf, 4: Dark Elf, 5: Yogoe, 6: Furry, 7: Dragonborn, 8: Undead, 9: Goblin, 10: Troll, 11: Slime, and more to come. + uint8 classRace; + // How old is this hero class? + uint32 classAge; + // 0: Fighter, 1: Rogue, 2: Mage. + uint8 classType; + + // Possible max level of this class. + uint32 maxLevel; + // 0: Water, 1: Fire, 2: Nature, 3: Light, 4: Darkness. + uint8 aura; + + // Base stats of this hero type. + // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. + uint32[5] baseStats; + // Minimum IVs for stats. + // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. + uint32[5] minIVForStats; + // Maximum IVs for stats. + // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. + uint32[5] maxIVForStats; + + // Number of currently instanced heroes. + uint32 currentNumberOfInstancedHeroes; + } + + struct HeroInstance { + // What is this hero's type? ex) John, Sally, Mark... + uint32 heroClassId; + + // Individual hero's name. + string heroName; + + // Current level of this hero. + uint32 currentLevel; + // Current exp of this hero. + uint32 currentExp; + + // Where has this hero been deployed? (0: Never depolyed ever.) ex) Dungeon Floor #1, Arena #5... + uint32 lastLocationId; + // When a hero is deployed, it takes time for the hero to return to the base. This is in Unix epoch. + uint256 availableAt; + + // Current stats of this hero. + // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. + uint32[5] currentStats; + // The individual value for this hero's stats. + // This will affect the current stats of heroes. + // 0: ATK 1: DEF 2: AGL 3: LUK 4: HP. + uint32[5] ivForStats; + } + + // Required exp for level up will increase when heroes level up. + // This defines how the value will increase. + uint32 public requiredExpIncreaseFactor = 100; + + // Required Gold for level up will increase when heroes level up. + // This defines how the value will increase. + uint256 public requiredGoldIncreaseFactor = 1000000000000000000; + + // Existing hero classes. + mapping(uint32 => HeroClass) public heroClasses; + // The number of hero classes ever defined. + uint32 public numberOfHeroClasses; + + // Existing hero instances. + // The key is _tokenId. + mapping(uint256 => HeroInstance) public tokenIdToHeroInstance; + // The number of tokens ever minted. This works as the serial number. + uint256 public numberOfTokenIds; + + // Gold contract. + Gold public goldContract; + + // Deposit of players (in Gold). + mapping(address => uint256) public addressToGoldDeposit; + + // Random seed. + uint32 private seed = 0; + + // Event that is fired when a hero type defined. + event DefineType( + address indexed _by, + uint32 indexed _typeId, + string _className + ); + + // Event that is fired when a hero is upgraded. + event LevelUp( + address indexed _by, + uint256 indexed _tokenId, + uint32 _newLevel + ); + + // Event that is fired when a hero is deployed. + event Deploy( + address indexed _by, + uint256 indexed _tokenId, + uint32 _locationId, + uint256 _duration + ); + + // @dev Get the class's entire infomation. + function getClassInfo(uint32 _classId) + external view + returns (string className, uint8 classRank, uint8 classRace, uint32 classAge, uint8 classType, uint32 maxLevel, uint8 aura, uint32[5] baseStats, uint32[5] minIVs, uint32[5] maxIVs) + { + var _cl = heroClasses[_classId]; + return (_cl.className, _cl.classRank, _cl.classRace, _cl.classAge, _cl.classType, _cl.maxLevel, _cl.aura, _cl.baseStats, _cl.minIVForStats, _cl.maxIVForStats); + } + + // @dev Get the class's name. + function getClassName(uint32 _classId) + external view + returns (string) + { + return heroClasses[_classId].className; + } + + // @dev Get the class's rank. + function getClassRank(uint32 _classId) + external view + returns (uint8) + { + return heroClasses[_classId].classRank; + } + + // @dev Get the heroes ever minted for the class. + function getClassMintCount(uint32 _classId) + external view + returns (uint32) + { + return heroClasses[_classId].currentNumberOfInstancedHeroes; + } + + // @dev Get the hero's entire infomation. + function getHeroInfo(uint256 _tokenId) + external view + returns (uint32 classId, string heroName, uint32 currentLevel, uint32 currentExp, uint32 lastLocationId, uint256 availableAt, uint32[5] currentStats, uint32[5] ivs, uint32 bp) + { + HeroInstance memory _h = tokenIdToHeroInstance[_tokenId]; + var _bp = _h.currentStats[0] + _h.currentStats[1] + _h.currentStats[2] + _h.currentStats[3] + _h.currentStats[4]; + return (_h.heroClassId, _h.heroName, _h.currentLevel, _h.currentExp, _h.lastLocationId, _h.availableAt, _h.currentStats, _h.ivForStats, _bp); + } + + // @dev Get the hero's class id. + function getHeroClassId(uint256 _tokenId) + external view + returns (uint32) + { + return tokenIdToHeroInstance[_tokenId].heroClassId; + } + + // @dev Get the hero's name. + function getHeroName(uint256 _tokenId) + external view + returns (string) + { + return tokenIdToHeroInstance[_tokenId].heroName; + } + + // @dev Get the hero's level. + function getHeroLevel(uint256 _tokenId) + external view + returns (uint32) + { + return tokenIdToHeroInstance[_tokenId].currentLevel; + } + + // @dev Get the hero's location. + function getHeroLocation(uint256 _tokenId) + external view + returns (uint32) + { + return tokenIdToHeroInstance[_tokenId].lastLocationId; + } + + // @dev Get the time when the hero become available. + function getHeroAvailableAt(uint256 _tokenId) + external view + returns (uint256) + { + return tokenIdToHeroInstance[_tokenId].availableAt; + } + + // @dev Get the hero's BP. + function getHeroBP(uint256 _tokenId) + public view + returns (uint32) + { + var _tmp = tokenIdToHeroInstance[_tokenId].currentStats; + return (_tmp[0] + _tmp[1] + _tmp[2] + _tmp[3] + _tmp[4]); + } + + // @dev Get the hero's required gold for level up. + function getHeroRequiredGoldForLevelUp(uint256 _tokenId) + public view + returns (uint256) + { + return (uint256(2) ** (tokenIdToHeroInstance[_tokenId].currentLevel / 10)) * requiredGoldIncreaseFactor; + } + + // @dev Get the hero's required exp for level up. + function getHeroRequiredExpForLevelUp(uint256 _tokenId) + public view + returns (uint32) + { + return ((tokenIdToHeroInstance[_tokenId].currentLevel + 2) * requiredExpIncreaseFactor); + } + + // @dev Get the deposit of gold of the player. + function getGoldDepositOfAddress(address _address) + external view + returns (uint256) + { + return addressToGoldDeposit[_address]; + } + + // @dev Get the token id of the player's #th token. + function getTokenIdOfAddressAndIndex(address _address, uint256 _index) + external view + returns (uint256) + { + return tokensOf(_address)[_index]; + } + + // @dev Get the total BP of the player. + function getTotalBPOfAddress(address _address) + external view + returns (uint32) + { + var _tokens = tokensOf(_address); + uint32 _totalBP = 0; + for (uint256 i = 0; i < _tokens.length; i ++) { + _totalBP += getHeroBP(_tokens[i]); + } + return _totalBP; + } + + // @dev Set the hero's name. + function setHeroName(uint256 _tokenId, string _name) + onlyOwnerOf(_tokenId) + public + { + tokenIdToHeroInstance[_tokenId].heroName = _name; + } + + // @dev Set the address of the contract that represents ERC20 Gold. + function setGoldContract(address _contractAddress) + onlyOwner + public + { + goldContract = Gold(_contractAddress); + } + + // @dev Set the required golds to level up a hero. + function setRequiredExpIncreaseFactor(uint32 _value) + onlyOwner + public + { + requiredExpIncreaseFactor = _value; + } + + // @dev Set the required golds to level up a hero. + function setRequiredGoldIncreaseFactor(uint256 _value) + onlyOwner + public + { + requiredGoldIncreaseFactor = _value; + } + + // @dev Contructor. + function CryptoSagaHero(address _goldAddress) + public + { + require(_goldAddress != address(0)); + + // Assign Gold contract. + setGoldContract(_goldAddress); + + // Initial heroes. + // Name, Rank, Race, Age, Type, Max Level, Aura, Stats. + defineType("Archangel", 4, 1, 13540, 0, 99, 3, [uint32(74), 75, 57, 99, 95], [uint32(8), 6, 8, 5, 5], [uint32(8), 10, 10, 6, 6]); + defineType("Shadowalker", 3, 4, 134, 1, 75, 4, [uint32(45), 35, 60, 80, 40], [uint32(3), 2, 10, 4, 5], [uint32(5), 5, 10, 7, 5]); + defineType("Pyromancer", 2, 0, 14, 2, 50, 1, [uint32(50), 28, 17, 40, 35], [uint32(5), 3, 2, 3, 3], [uint32(8), 4, 3, 4, 5]); + defineType("Magician", 1, 3, 224, 2, 30, 0, [uint32(35), 15, 25, 25, 30], [uint32(3), 1, 2, 2, 2], [uint32(5), 2, 3, 3, 3]); + defineType("Farmer", 0, 0, 59, 0, 15, 2, [uint32(10), 22, 8, 15, 25], [uint32(1), 2, 1, 1, 2], [uint32(1), 3, 1, 2, 3]); + } + + // @dev Define a new hero type (class). + function defineType(string _className, uint8 _classRank, uint8 _classRace, uint32 _classAge, uint8 _classType, uint32 _maxLevel, uint8 _aura, uint32[5] _baseStats, uint32[5] _minIVForStats, uint32[5] _maxIVForStats) + onlyOwner + public + { + require(_classRank < 5); + require(_classType < 3); + require(_aura < 5); + require(_minIVForStats[0] <= _maxIVForStats[0] && _minIVForStats[1] <= _maxIVForStats[1] && _minIVForStats[2] <= _maxIVForStats[2] && _minIVForStats[3] <= _maxIVForStats[3] && _minIVForStats[4] <= _maxIVForStats[4]); + + HeroClass memory _heroType = HeroClass({ + className: _className, + classRank: _classRank, + classRace: _classRace, + classAge: _classAge, + classType: _classType, + maxLevel: _maxLevel, + aura: _aura, + baseStats: _baseStats, + minIVForStats: _minIVForStats, + maxIVForStats: _maxIVForStats, + currentNumberOfInstancedHeroes: 0 + }); + + // Save the hero class. + heroClasses[numberOfHeroClasses] = _heroType; + + // Fire event. + DefineType(msg.sender, numberOfHeroClasses, _heroType.className); + + // Increment number of hero classes. + numberOfHeroClasses ++; + + } + + // @dev Mint a new hero, with _heroClassId. + function mint(address _owner, uint32 _heroClassId) + onlyAccessMint + public + returns (uint256) + { + require(_owner != address(0)); + require(_heroClassId < numberOfHeroClasses); + + // The information of the hero's class. + var _heroClassInfo = heroClasses[_heroClassId]; + + // Mint ERC721 token. + _mint(_owner, numberOfTokenIds); + + // Build random IVs for this hero instance. + uint32[5] memory _ivForStats; + uint32[5] memory _initialStats; + for (uint8 i = 0; i < 5; i++) { + _ivForStats[i] = (random(_heroClassInfo.maxIVForStats[i] + 1, _heroClassInfo.minIVForStats[i])); + _initialStats[i] = _heroClassInfo.baseStats[i] + _ivForStats[i]; + } + + // Temporary hero instance. + HeroInstance memory _heroInstance = HeroInstance({ + heroClassId: _heroClassId, + heroName: "", + currentLevel: 1, + currentExp: 0, + lastLocationId: 0, + availableAt: now, + currentStats: _initialStats, + ivForStats: _ivForStats + }); + + // Save the hero instance. + tokenIdToHeroInstance[numberOfTokenIds] = _heroInstance; + + // Increment number of token ids. + // This will only increment when new token is minted, and will never be decemented when the token is burned. + numberOfTokenIds ++; + + // Increment instanced number of heroes. + _heroClassInfo.currentNumberOfInstancedHeroes ++; + + return numberOfTokenIds - 1; + } + + // @dev Set where the heroes are deployed, and when they will return. + // This is intended to be called by Dungeon, Arena, Guild contracts. + function deploy(uint256 _tokenId, uint32 _locationId, uint256 _duration) + onlyAccessDeploy + public + returns (bool) + { + // The hero should be possessed by anybody. + require(ownerOf(_tokenId) != address(0)); + + var _heroInstance = tokenIdToHeroInstance[_tokenId]; + + // The character should be avaiable. + require(_heroInstance.availableAt <= now); + + _heroInstance.lastLocationId = _locationId; + _heroInstance.availableAt = now + _duration; + + // As the hero has been deployed to another place, fire event. + Deploy(msg.sender, _tokenId, _locationId, _duration); + } + + // @dev Add exp. + // This is intended to be called by Dungeon, Arena, Guild contracts. + function addExp(uint256 _tokenId, uint32 _exp) + onlyAccessDeploy + public + returns (bool) + { + // The hero should be possessed by anybody. + require(ownerOf(_tokenId) != address(0)); + + var _heroInstance = tokenIdToHeroInstance[_tokenId]; + + var _newExp = _heroInstance.currentExp + _exp; + + // Sanity check to ensure we don't overflow. + require(_newExp == uint256(uint128(_newExp))); + + _heroInstance.currentExp += _newExp; + + } + + // @dev Add deposit. + // This is intended to be called by Dungeon, Arena, Guild contracts. + function addDeposit(address _to, uint256 _amount) + onlyAccessDeposit + public + { + // Increment deposit. + addressToGoldDeposit[_to] += _amount; + } + + // @dev Level up the hero with _tokenId. + // This function is called by the owner of the hero. + function levelUp(uint256 _tokenId) + onlyOwnerOf(_tokenId) whenNotPaused + public + { + + // Hero instance. + var _heroInstance = tokenIdToHeroInstance[_tokenId]; + + // The character should be avaiable. (Should have already returned from the dungeons, arenas, etc.) + require(_heroInstance.availableAt <= now); + + // The information of the hero's class. + var _heroClassInfo = heroClasses[_heroInstance.heroClassId]; + + // Hero shouldn't level up exceed its max level. + require(_heroInstance.currentLevel < _heroClassInfo.maxLevel); + + // Required Exp. + var requiredExp = getHeroRequiredExpForLevelUp(_tokenId); + + // Need to have enough exp. + require(_heroInstance.currentExp >= requiredExp); + + // Required Gold. + var requiredGold = getHeroRequiredGoldForLevelUp(_tokenId); + + // Owner of token. + var _ownerOfToken = ownerOf(_tokenId); + + // Need to have enough Gold balance. + require(addressToGoldDeposit[_ownerOfToken] >= requiredGold); + + // Increase Level. + _heroInstance.currentLevel += 1; + + // Increase Stats. + for (uint8 i = 0; i < 5; i++) { + _heroInstance.currentStats[i] = _heroClassInfo.baseStats[i] + (_heroInstance.currentLevel - 1) * _heroInstance.ivForStats[i]; + } + + // Deduct exp. + _heroInstance.currentExp -= requiredExp; + + // Deduct gold. + addressToGoldDeposit[_ownerOfToken] -= requiredGold; + + // Fire event. + LevelUp(msg.sender, _tokenId, _heroInstance.currentLevel); + } + + // @dev Transfer deposit (with the allowance pattern.) + function transferDeposit(uint256 _amount) + whenNotPaused + public + { + require(goldContract.allowance(msg.sender, this) >= _amount); + + // Send msg.sender's Gold to this contract. + if (goldContract.transferFrom(msg.sender, this, _amount)) { + // Increment deposit. + addressToGoldDeposit[msg.sender] += _amount; + } + } + + // @dev Withdraw deposit. + function withdrawDeposit(uint256 _amount) + public + { + require(addressToGoldDeposit[msg.sender] >= _amount); + + // Send deposit of Golds to msg.sender. (Rather minting...) + if (goldContract.transfer(msg.sender, _amount)) { + // Decrement deposit. + addressToGoldDeposit[msg.sender] -= _amount; + } + } + + // @dev return a pseudo random number between lower and upper bounds + function random(uint32 _upper, uint32 _lower) + private + returns (uint32) + { + require(_upper > _lower); + + seed = uint32(keccak256(keccak256(block.blockhash(block.number), seed), now)); + return seed % (_upper - _lower) + _lower; + } + +} \ No newline at end of file diff --git a/data_full/CVE/2018-13041.sol b/data_full/CVE/2018-13041.sol new file mode 100644 index 00000000..e2713b92 --- /dev/null +++ b/data_full/CVE/2018-13041.sol @@ -0,0 +1,194 @@ +/** + *Submitted for verification at Etherscan.io on 2017-06-29 +*/ + +pragma solidity ^0.4.8; + +/// @title Link Token. This Token will remain the cornerstone of the entire organization. It will have an Ethereum address and from the moment that address is publish until the end, it will remain the same, and should. The Token should be as simple as it possibly can be and should not be able to terminate. It's state remains so that those who control their Tokens will continue to do so. +/// @author Riaan F Venter~ RFVenter~ + + +/* + * ERC20Basic + * Simpler version of ERC20 interface + * see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function transfer(address to, uint value); + event Transfer(address indexed from, address indexed to, uint value); +} + +/** + * Math operations with safety checks + */ +library SafeMath { + function mul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function sub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function add(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c >= a); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + + +/* + * Basic token + * Basic version of StandardToken, with no allowances + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint; + + mapping(address => uint) balances; + + /* + * Fix for the ERC20 short address attack + */ + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + +} + + +/* + * ERC20 interface + * see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant returns (uint); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + + +/** + * Standard ERC20 token + * + * https://github.com/ethereum/EIPs/issues/20 + * Based on code by FirstBlood: + * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is BasicToken, ERC20 { + + mapping (address => mapping (address => uint)) allowed; + + function transferFrom(address _from, address _to, uint _value) { + var _allowance = allowed[_from][msg.sender]; + + // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met + // if (_value > _allowance) throw; + + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + } + + function approve(address _spender, uint _value) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } +} + +/* + * Ownable + * + * Base contract with an owner. + * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner. + */ +contract Ownable { + address public owner; + + function Ownable() { + owner = msg.sender; + } + + modifier onlyOwner() { + if (msg.sender != owner) { + throw; + } + _; + } + + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } + +} + + +contract LinkToken is StandardToken, Ownable { + + string public name = "Link Platform"; // Name of the Token + string public symbol = "LNK"; // ERC20 compliant Token code + uint public decimals = 18; // Token has 18 digit precision + uint public totalSupply; // Total supply + + function mint(address _spender, uint _value) + onlyOwner { + + balances[_spender] += _value; + totalSupply += _value; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13068.sol b/data_full/CVE/2018-13068.sol new file mode 100644 index 00000000..f2246fdd --- /dev/null +++ b/data_full/CVE/2018-13068.sol @@ -0,0 +1,166 @@ +/** + *Submitted for verification at Etherscan.io on 2017-10-30 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract AzurionToken is owned { + mapping (address => uint256) public balanceOf; + mapping (address => bool) public frozenAccount; + mapping (address => mapping (address => uint256)) public allowance; + + uint256 public totalSupply; + string public constant name = "Azurion"; + string public constant symbol = "AZU"; + uint8 public constant decimals = 18; + + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + event FrozenFunds(address target, bool frozen); + + function AzurionToken(uint256 initialSupply, address centralMinter) { + if(centralMinter != 0 ) owner = centralMinter; + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + } + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) onlyOwner public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other ccount + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } + + function () { + revert(); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13069.sol b/data_full/CVE/2018-13069.sol new file mode 100644 index 00000000..a9aefe6d --- /dev/null +++ b/data_full/CVE/2018-13069.sol @@ -0,0 +1,248 @@ +/** + *Submitted for verification at Etherscan.io on 2018-04-03 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract DYC is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function DYC( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13070.sol b/data_full/CVE/2018-13070.sol new file mode 100644 index 00000000..2747c71f --- /dev/null +++ b/data_full/CVE/2018-13070.sol @@ -0,0 +1,169 @@ +/** + *Submitted for verification at Etherscan.io on 2018-06-29 +*/ + +pragma solidity ^0.4.24; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + + + mapping (address => uint256) public balanceOf; + + + mapping (address => mapping (address => uint256)) public allowance; + + + event Transfer(address indexed from, address indexed to, uint256 value); + + event Burn(address indexed from, uint256 value); + + + function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + + + function _transfer(address _from, address _to, uint _value) internal { + + require(_to != 0x0); + + require(balanceOf[_from] >= _value); + + require(balanceOf[_to] + _value > balanceOf[_to]); + + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + + + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +contract EncryptedToken is owned, TokenERC20 { + uint256 INITIAL_SUPPLY = 100000000; + uint256 public buyPrice = 1; + mapping (address => bool) public frozenAccount; + + event FrozenFunds(address target, bool frozen); + + function EncryptedToken() TokenERC20(INITIAL_SUPPLY, 'ECC', 'ECC') payable public {} + + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + emit Transfer(_from, _to, _value); + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newBuyPrice) onlyOwner public { + buyPrice = newBuyPrice; + } + + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + function () payable public { + owner.send(msg.value);// + uint amount = msg.value * buyPrice; // calculates the amount + _transfer(owner, msg.sender, amount); + } + + function selfdestructs() onlyOwner payable public { + selfdestruct(owner); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13071.sol b/data_full/CVE/2018-13071.sol new file mode 100644 index 00000000..66840e87 --- /dev/null +++ b/data_full/CVE/2018-13071.sol @@ -0,0 +1,231 @@ +/** + *Submitted for verification at Etherscan.io on 2017-11-18 +*/ + +//ERC20 Token +pragma solidity ^0.4.17; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "T10 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /*************************************************/ + mapping(address=>uint256) public indexes; + mapping(uint256=>address) public addresses; + uint256 public lastIndex = 0; + /*************************************************/ + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + /*****************************************/ + addresses[1] = msg.sender; + indexes[msg.sender] = 1; + lastIndex = 1; + /*****************************************/ + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract CCindexToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 40000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "CCindex10"; + string public tokenSymbol = "T10"; + function CCindexToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + // if(!canHolderTransfer()) throw; + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + if(_value > 0){ + if(balanceOf[msg.sender] == 0){ + addresses[indexes[msg.sender]] = addresses[lastIndex]; + indexes[addresses[lastIndex]] = indexes[msg.sender]; + indexes[msg.sender] = 0; + delete addresses[lastIndex]; + lastIndex--; + } + if(indexes[_to]==0){ + lastIndex++; + addresses[lastIndex] = _to; + indexes[_to] = lastIndex; + } + } + } + + function getAddresses() constant returns (address[]){ + address[] memory addrs = new address[](lastIndex); + for(uint i = 0; i < lastIndex; i++){ + addrs[i] = addresses[i+1]; + } + return addrs; + } + + function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { + // if(balanceOf[owner] < _amount) throw; + uint distributed = 0; + require(startIndex < endIndex); + + for(uint i = startIndex; i < lastIndex; i++){ + address holder = addresses[i+1]; + uint reward = balanceOf[holder] * 3 / 100; + balanceOf[holder] += reward; + distributed += reward; + Transfer(0, holder, reward); + } + + // balanceOf[owner] -= distributed; + totalSupply += distributed; + return distributed; + } + + /************************************************************************/ + + /************************************************************************/ + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13072.sol b/data_full/CVE/2018-13072.sol new file mode 100644 index 00000000..c19de863 --- /dev/null +++ b/data_full/CVE/2018-13072.sol @@ -0,0 +1,168 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-16 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + revert(); // Prevents accidental sending of ether + } +} + +contract Coffeecoin is owned, token { + + uint public buyRate = 4000; // price of one token + bool public isSelling = true; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function Coffeecoin( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + + function buy() payable { + if(isSelling == false) revert(); + uint amount = msg.value * buyRate; // calculates the amount + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[owner] -= amount; // subtracts amount from seller's balance + Transfer(owner, msg.sender, amount); // execute an event reflecting the change + } + + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13073.sol b/data_full/CVE/2018-13073.sol new file mode 100644 index 00000000..58a0f14c --- /dev/null +++ b/data_full/CVE/2018-13073.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2017-10-30 +*/ + +//ERC20 Token +pragma solidity ^0.4.17; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "ETHEREUMBLACK"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract ETHEREUMBLACK is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 200000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "ETHEREUMBLACK"; + string public tokenSymbol = "ETCBK"; + function ETHEREUMBLACK() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13074.sol b/data_full/CVE/2018-13074.sol new file mode 100644 index 00000000..e63dfe32 --- /dev/null +++ b/data_full/CVE/2018-13074.sol @@ -0,0 +1,227 @@ +/** + *Submitted for verification at Etherscan.io on 2018-06-29 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + uint256 initialSupply=5000000000; + string tokenName='FIB'; + string tokenSymbol='FIB'; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + emit Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + emit Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract FIBToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function FIBToken( + + ) TokenERC20() public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + emit Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + + +} \ No newline at end of file diff --git a/data_full/CVE/2018-13075.sol b/data_full/CVE/2018-13075.sol new file mode 100644 index 00000000..0a2079f8 --- /dev/null +++ b/data_full/CVE/2018-13075.sol @@ -0,0 +1,275 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-22 +*/ + +/** 官方高級token */ + + +pragma solidity ^0.4.18; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } + + function destruct() public onlyOwner { + selfdestruct(owner); + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20() public { + totalSupply = 500000000000 * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = "Carbon Exchange Coin Token"; // Set the name for display purposes + symbol = "CEC"; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract CarbonExchangeCoinToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + uint256 public decimals = 18; + string public tokenName; + string public tokenSymbol; + uint minBalanceForAccounts ; //threshold amount + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + + + function CarbonExchangeCoinToken() public { + owner = msg.sender; + totalSupply = 50000000000000000000000000000; + balanceOf[owner]=totalSupply; + tokenName="Carbon Exchange Coin Token"; + tokenSymbol="CEC"; + } + + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + ///@param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } + + + /* 设置自动补充gas的阈值信息 201803202232 james */ + function setMinBalance(uint minimumBalanceInFinney) public onlyOwner { + minBalanceForAccounts = minimumBalanceInFinney * 1 finney; + } + + /* 设置tokenname */ + function setTokenName(string newTokenName) public onlyOwner{ + tokenName = newTokenName; + } + /* 设置tokenSymbol */ + function setTokenSymbol(string newTokenSymbol) public onlyOwner{ + tokenSymbol = newTokenSymbol; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13076.sol b/data_full/CVE/2018-13076.sol new file mode 100644 index 00000000..8de04730 --- /dev/null +++ b/data_full/CVE/2018-13076.sol @@ -0,0 +1,168 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-16 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + revert(); // Prevents accidental sending of ether + } +} + +contract Betcash is owned, token { + + uint public buyRate = 4000; // price of one token + bool public isSelling = true; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function Betcash( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + + function buy() payable { + if(isSelling == false) revert(); + uint amount = msg.value * buyRate; // calculates the amount + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[owner] -= amount; // subtracts amount from seller's balance + Transfer(owner, msg.sender, amount); // execute an event reflecting the change + } + + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13077.sol b/data_full/CVE/2018-13077.sol new file mode 100644 index 00000000..1cc56b0e --- /dev/null +++ b/data_full/CVE/2018-13077.sol @@ -0,0 +1,199 @@ +/** + *Submitted for verification at Etherscan.io on 2017-10-23 +*/ + +pragma solidity ^0.4.13; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + +} + +contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } + +contract token { + // Public variables of the token / + string public name = 'CTB'; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* This notifies clients about the amount burnt */ + event Burn(address indexed from, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Send `_value` tokens to `_to` from your account + /// @param _to The address of the recipient + /// @param _value the amount to send + function transfer(address _to, uint256 _value) { + _transfer(msg.sender, _to, _value); + } + + /// @notice Send `_value` tokens to `_to` in behalf of `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value the amount to send + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require (_value < allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf + /// @param _spender The address authorized to spend + /// @param _value the max amount they can spend + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /// @notice Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + /// @param _spender The address authorized to spend + /// @param _value the max amount they can spend + /// @param _extraData some extra information to send to the approved contract + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /// @notice Remove `_value` tokens from the system irreversibly + /// @param _value the amount of money to burn + function burn(uint256 _value) returns (bool success) { + require (balanceOf[msg.sender] > _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } + +} + +contract CTB is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function CTB( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } + +} \ No newline at end of file diff --git a/data_full/CVE/2018-13078.sol b/data_full/CVE/2018-13078.sol new file mode 100644 index 00000000..ae9bfa15 --- /dev/null +++ b/data_full/CVE/2018-13078.sol @@ -0,0 +1,145 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-19 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() public{ + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract token { + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) public { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) public { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () public { + revert(); // Prevents accidental sending of ether + } +} + +contract Jitech is owned, token { + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function Jitech( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) public token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) public { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) public onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) public onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13079.sol b/data_full/CVE/2018-13079.sol new file mode 100644 index 00000000..4120de00 --- /dev/null +++ b/data_full/CVE/2018-13079.sol @@ -0,0 +1,161 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-19 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract GoodTo { + + string public name; + string public symbol; + uint8 public decimals = 18; + + uint256 public totalSupply; + + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + + function GoodTo( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} + +contract StandardToken is owned, GoodTo { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + event FrozenFunds(address target, bool frozen); + + function StandardToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) GoodTo(initialSupply, tokenName, tokenSymbol) public {} + + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13080.sol b/data_full/CVE/2018-13080.sol new file mode 100644 index 00000000..31356bc1 --- /dev/null +++ b/data_full/CVE/2018-13080.sol @@ -0,0 +1,145 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-19 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() public{ + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract token { + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) public { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) public { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () public { + revert(); // Prevents accidental sending of ether + } +} + +contract Goutex is owned, token { + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function Goutex( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) public token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) public { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) public onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) public onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13081.sol b/data_full/CVE/2018-13081.sol new file mode 100644 index 00000000..81d8ec16 --- /dev/null +++ b/data_full/CVE/2018-13081.sol @@ -0,0 +1,171 @@ +/** + *Submitted for verification at Etherscan.io on 2017-07-19 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract GZSToken is owned, token { + + uint public buyRate = 46000; // price one token per ether + bool public isSelling = true; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function GZSToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + + function buy() payable { + if(isSelling == false) throw; + uint amount = msg.value * buyRate; // calculates the amount + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13082.sol b/data_full/CVE/2018-13082.sol new file mode 100644 index 00000000..10bee82d --- /dev/null +++ b/data_full/CVE/2018-13082.sol @@ -0,0 +1,255 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-19 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract ModiTokenERC20 { + string public constant _myTokeName = 'MODI Token';//change here + string public constant _mySymbol = 'MODI';//change here + uint public constant _myinitialSupply = 10000;//leave it + uint8 public constant _myDecimal = 18;//leave it + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function ModiTokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + decimals = _myDecimal; + totalSupply = _myinitialSupply * (10 ** uint256(_myDecimal)); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = _myTokeName; // Set the name for display purposes + symbol = _mySymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract MyAdvancedToken is owned, ModiTokenERC20 { + + + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) ModiTokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13083.sol b/data_full/CVE/2018-13083.sol new file mode 100644 index 00000000..0ec1cc2d --- /dev/null +++ b/data_full/CVE/2018-13083.sol @@ -0,0 +1,219 @@ +/** + *Submitted for verification at Etherscan.io on 2018-05-25 +*/ + +pragma solidity ^0.4.21; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + emit Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + emit Burn(_from, _value); + return true; + } +} + +contract PlazaToken is owned, TokenERC20 { + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function PlazaToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + emit Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13084.sol b/data_full/CVE/2018-13084.sol new file mode 100644 index 00000000..d9cab28a --- /dev/null +++ b/data_full/CVE/2018-13084.sol @@ -0,0 +1,155 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-28 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient +{ +function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; +} + +contract StandardToken { + + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + event Transfer(address indexed from, address indexed to, uint256 value); + + event Burn(address indexed from, uint256 value); + + function StandardToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + + function _transfer(address _from, address _to, uint _value) { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + function transfer(address _to, uint256 _value) public returns (bool success) + { + _transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} + +contract GoodTimeCoin is owned, StandardToken { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + event FrozenFunds(address target, bool frozen); + + function GoodTimeCoin( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) StandardToken(initialSupply, tokenName, tokenSymbol) public {} + + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13085.sol b/data_full/CVE/2018-13085.sol new file mode 100644 index 00000000..3c2f97a7 --- /dev/null +++ b/data_full/CVE/2018-13085.sol @@ -0,0 +1,295 @@ +/** + *Submitted for verification at Etherscan.io on 2018-04-06 +*/ + +/** +---------------------------------------------------------------------------------------------- +FreeCoin Token Contract, version 3.01 + +Interwave Global +www.iw-global.com +---------------------------------------------------------------------------------------------- +**/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + uint public free = 100 * 10 ** uint256(decimals); + + // This creates an array with all balances + mapping (address => uint256) public balances; + mapping (address => mapping (address => uint256)) public allowance; + mapping (address => bool) public created; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + + function changeFree(uint newFree) public { + free = newFree; + } + + + function balanceOf(address _owner) public constant returns (uint balance) { + //if (!created[_owner] ) { + if (!created[_owner] && balances[_owner] == 0) { + return free; + } + else + { + return balances[_owner]; + } + } + + + + /** + * Constructor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balances[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + created[msg.sender] = true; + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + + if (!created[_from]) { + balances[_from] = free; + created[_from] = true; + } + + if (!created[_to]) { + created[_to] = true; + } + + + // Check if the sender has enough + require(balances[_from] >= _value); + // Check for overflows + require(balances[_to] + _value >= balances[_to]); + // Save this for an assertion in the future + uint previousBalances = balances[_from] + balances[_to]; + // Subtract from the sender + balances[_from] -= _value; + // Add the same to the recipient + balances[_to] += _value; + + emit Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balances[_from] + balances[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` on behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens on your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balances[msg.sender] >= _value); // Check if the sender has enough + balances[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + emit Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balances[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balances[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + emit Burn(_from, _value); + return true; + } +} + + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract FreeCoin is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function FreeCoin( + uint256 initialSupply, + string tokenName , + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + /** + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balances[_from] >= _value); // Check if the sender has enough + require (balances[_to] + _value >= balances[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balances[_from] -= _value; // Subtract from the sender + balances[_to] += _value; // Add the same to the recipient + emit Transfer(_from, _to, _value); + } + **/ + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balances[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(address(this).balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13086.sol b/data_full/CVE/2018-13086.sol new file mode 100644 index 00000000..bcf5798b --- /dev/null +++ b/data_full/CVE/2018-13086.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2018-04-16 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract Token { + + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + event Transfer(address indexed from, address indexed to, uint256 value); + + event Burn(address indexed from, uint256 value); + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + + + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} + +contract IADOWR is owned, Token { + string public name = "IADOWR Coin"; + string public symbol = "IAD"; + address public IADAddress = this; + uint8 public decimals = 18; + uint256 public initialSupply = 2000000000000000000000000000; + uint256 public totalSupply = 2000000000000000000000000000; + uint256 public unitsOneEthCanBuy = 5000; + uint256 public buyPriceEth = 0.2 finney; + uint256 public sellPriceEth = 0.1 finney; + uint256 public gasForIAD = 30000 wei; + uint256 public IADForGas = 1; + uint256 public gasReserve = 0.1 ether; + uint256 public minBalanceForAccounts = 2 finney; + bool public directTradeAllowed = false; + + + function IADOWR() { + balanceOf[msg.sender] = totalSupply; + } + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + event FrozenFunds(address target, bool frozen); + + + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + + + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13087.sol b/data_full/CVE/2018-13087.sol new file mode 100644 index 00000000..9e979ac3 --- /dev/null +++ b/data_full/CVE/2018-13087.sol @@ -0,0 +1,233 @@ +/** + *Submitted for verification at Etherscan.io on 2018-07-02 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; // decimals 可以有的小数点个数,最小的代币单位。18 是建议的默认值 + uint256 public totalSupply; + + // 用mapping保存每个地址对应的余额 + mapping (address => uint256) public balanceOf; + // 存储对账号的控制 + mapping (address => mapping (address => uint256)) public allowance; + + // 事件,用来通知客户端交易发生 + event Transfer(address indexed from, address indexed to, uint256 value); + + // 事件,用来通知客户端代币被消费 + event Burn(address indexed from, uint256 value); + + /** + * 初始化构造 + */ + function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // 供应的份额,份额跟最小的代币单位有关,份额 = 币数 * 10 ** decimals。 + balanceOf[msg.sender] = totalSupply; // 创建者拥有所有的代币 + name = tokenName; // 代币名称 + symbol = tokenSymbol; // 代币符号 + } + + /** + * 代币交易转移的内部实现 + */ + function _transfer(address _from, address _to, uint _value) internal { + // 确保目标地址不为0x0,因为0x0地址代表销毁 + require(_to != 0x0); + // 检查发送者余额 + require(balanceOf[_from] >= _value); + // 确保转移为正数个 + require(balanceOf[_to] + _value > balanceOf[_to]); + + // 以下用来检查交易, + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + + // 用assert来检查代码逻辑。 + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * 代币交易转移 + * 从创建交易者账号发送`_value`个代币到 `_to`账号 + * + * @param _to 接收者地址 + * @param _value 转移数额 + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * 账号之间代币交易转移 + * @param _from 发送者地址 + * @param _to 接收者地址 + * @param _value 转移数额 + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * 设置某个地址(合约)可以交易者名义花费的代币数。 + * + * 允许发送者`_spender` 花费不多于 `_value` 个代币 + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * 设置允许一个地址(合约)以交易者名义可最多花费的代币数。 + * + * @param _spender 被授权的地址(合约) + * @param _value 最大可花费代币数 + * @param _extraData 发送给合约的附加数据 + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * 销毁创建者账户中指定个代币 + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * 销毁用户账户中指定个代币 + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract MyAdvancedToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) payable public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13088.sol b/data_full/CVE/2018-13088.sol new file mode 100644 index 00000000..59e8bad7 --- /dev/null +++ b/data_full/CVE/2018-13088.sol @@ -0,0 +1,248 @@ +/** + *Submitted for verification at Etherscan.io on 2018-06-23 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract MyAdvancedToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13089.sol b/data_full/CVE/2018-13089.sol new file mode 100644 index 00000000..e5ce56e8 --- /dev/null +++ b/data_full/CVE/2018-13089.sol @@ -0,0 +1,254 @@ +/** + *Submitted for verification at Etherscan.io on 2017-11-10 +*/ + +pragma solidity ^0.4.16; + + // ---------------------------------------------------------------------------------------------- + // UCoin Token Contract, version 2.00 + // UNIVERSAL COIN INTERNATIONAL INC + // OMC Chambers, Wickhams Cay 1, Road Town, Tortola, British Virgin Islands + // ---------------------------------------------------------------------------------------------- + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + string public name ; + string public symbol ; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply ; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract UCoinToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function UCoinToken( + + ) + + TokenERC20(5000000000, "Universal Coin", "UCOIN") public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13090.sol b/data_full/CVE/2018-13090.sol new file mode 100644 index 00000000..c09670f9 --- /dev/null +++ b/data_full/CVE/2018-13090.sol @@ -0,0 +1,248 @@ +/** + *Submitted for verification at Etherscan.io on 2018-02-08 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract YiTongCoin is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function YiTongCoin( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13091.sol b/data_full/CVE/2018-13091.sol new file mode 100644 index 00000000..689ae361 --- /dev/null +++ b/data_full/CVE/2018-13091.sol @@ -0,0 +1,206 @@ +/** + *Submitted for verification at Etherscan.io on 2017-11-18 +*/ + +pragma solidity ^0.4.16; + +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal constant returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + } + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract sumocoin is owned { + + using SafeMath for uint256; + + // Public variables of the token + string public name = "sumocoin"; + string public symbol = "SUMO"; + uint8 public decimals = 18; + uint256 public totalSupply = 10**25; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + + function sumocoin(){ + balanceOf[msg.sender] = totalSupply; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } + + function distributeToken(address[] addresses, uint256 _value) onlyOwner { + for (uint i = 0; i < addresses.length; i++) { + balanceOf[owner] -= _value; + balanceOf[addresses[i]] += _value; + Transfer(owner, addresses[i], _value); + } +} +} \ No newline at end of file diff --git a/data_full/CVE/2018-13092.sol b/data_full/CVE/2018-13092.sol new file mode 100644 index 00000000..d52ebf4e --- /dev/null +++ b/data_full/CVE/2018-13092.sol @@ -0,0 +1,178 @@ +/** + *Submitted for verification at Etherscan.io on 2018-01-23 +*/ + +pragma solidity ^0.4.18; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract ReimburseToken is owned{ + // Public variables + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + + // Balances array + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + //ERC20 events + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function ReimburseToken( + uint256 initialSupply + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = "Reimburse Token"; + symbol = "REIM"; + decimals = 18; + } + + /** + * ERC20 balance function + */ + function balanceOf(address _owner) public constant returns (uint256 balance) { + return balanceOf[_owner]; + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + // Failsafe logic that should never be false + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens on your behalf + * + * @param _spender the address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public returns (bool success) { + + allowance[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it + * + * @param _spender the address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + +} + +contract AdvReimburseToken is owned, ReimburseToken { + + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function AdvReimburseToken( + uint256 initialSupply + ) ReimburseToken(initialSupply) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + +} \ No newline at end of file diff --git a/data_full/CVE/2018-13113.sol b/data_full/CVE/2018-13113.sol new file mode 100644 index 00000000..bfb0b89b --- /dev/null +++ b/data_full/CVE/2018-13113.sol @@ -0,0 +1,142 @@ +pragma solidity ^0.4.4; + +contract Token { + + /// @return total amount of tokens + function totalSupply() constant returns (uint256 supply) {} + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) constant returns (uint256 balance) {} + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) returns (bool success) {} + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + + /// @notice `msg.sender` approves `_addr` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of wei to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) returns (bool success) {} + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + +} + +contract StandardToken is Token { + + function transfer(address _to, uint256 _value) returns (bool success) { + //Default assumes totalSupply can't be over max (2^256 - 1). + //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. + //Replace the if with this one instead. + //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + //same as above. Replace this line with the following if you want to protect against wrapping uints. + //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} + +contract HashnodeTestCoin is StandardToken { // CHANGE THIS. Update the contract name. + + /* Public variables of the token */ + + /* + NOTE: + The following variables are OPTIONAL vanities. One does not have to include them. + They allow one to customise the token contract & in no way influences the core functionality. + Some wallets/interfaces might not even bother to look at this information. + */ + string public name; // Token Name + uint8 public decimals; // How many decimals to show. To be standard complicant keep it 18 + string public symbol; // An identifier: eg SBX, XPR etc.. + string public version = 'H1.0'; + uint256 public unitsOneEthCanBuy; // How many units of your coin can be bought by 1 ETH? + uint256 public totalEthInWei; // WEI is the smallest unit of ETH (the equivalent of cent in USD or satoshi in BTC). We'll store the total ETH raised via our ICO here. + address public fundsWallet; // Where should the raised ETH go? + + // This is a constructor function + // which means the following function name has to match the contract name declared above + function HashnodeTestCoin() { + balances[msg.sender] = 100000000000000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS) + totalSupply = 100000000000000000000000000; // Update total supply (1000 for example) (CHANGE THIS) + name = "Easy Trading Token"; // Set the name for display purposes (CHANGE THIS) + decimals = 18; // Amount of decimals for display purposes (CHANGE THIS) + symbol = "ETT"; // Set the symbol for display purposes (CHANGE THIS) + unitsOneEthCanBuy = 40000; // Set the price of your token for the ICO (CHANGE THIS) + fundsWallet = msg.sender; // The owner of the contract gets ETH + } + + function() payable{ + totalEthInWei = totalEthInWei + msg.value; + uint256 amount = msg.value * unitsOneEthCanBuy; + require(balances[fundsWallet] >= amount); + + balances[fundsWallet] = balances[fundsWallet] - amount; + balances[msg.sender] = balances[msg.sender] + amount; + + Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain + + //Transfer ether to fundsWallet + fundsWallet.transfer(msg.value); + } + + /* Approves and then calls the receiving contract */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. + //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) + //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} diff --git a/data_full/CVE/2018-13126.sol b/data_full/CVE/2018-13126.sol new file mode 100644 index 00000000..5e8ba7b5 --- /dev/null +++ b/data_full/CVE/2018-13126.sol @@ -0,0 +1,301 @@ +pragma solidity ^0.4.18; + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + uint256 public totalSupply; + + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + + event Transfer(address indexed from, address indexed to, uint256 value); +} + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + + Transfer(msg.sender, _to, _value); + + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } +} + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + + Transfer(_from, _to, _value); + + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + + Approval(msg.sender, _spender, _value); + + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } +} + +/** + * @title Spend Token + */ +contract SpendToken is StandardToken { + string public constant name = "Spend Token"; + string public constant symbol = "SPEND"; + uint8 public constant decimals = 18; + + address public presale; + address public team; + + uint public constant TOKEN_LIMIT = 50000000; + + /** + * @dev Create our actual token + */ + function SpendToken(address _presale, address _team) public { + require(_presale != address(0)); + require(_team != address(0)); + + presale = _presale; + team = _team; + } + + /** + * @dev Mint new tokens to the specified address, only callable by the + * presale contract itself + */ + function mint(address _holder, uint _value) external { + require(msg.sender == presale); + require(_value > 0); + require(totalSupply + _value <= TOKEN_LIMIT); + + balances[_holder] += _value; + totalSupply += _value; + + Transfer(0x0, _holder, _value); + } +} + +/** + * @title MoxyOne Presale + */ +contract MoxyOnePresale { + enum PreSaleState { + PreSaleStarted, + PreSaleFinished + } + + SpendToken public token; + PreSaleState public preSaleState = PreSaleState.PreSaleStarted; + address public team; + bool public isPaused = false; + uint256 public pricePerToken = 1 ether / 1000; + + event PreSaleStarted(); + event PreSaleFinished(); + event PreSalePaused(); + event PreSaleResumed(); + event TokenBuy(address indexed buyer, uint256 tokens); + + /** + * @dev Only allow the team to execute these commands + */ + modifier teamOnly { + require(msg.sender == team); + + _; + } + + /** + * @dev Create the presale contract and the token contract alongside + */ + function MoxyOnePresale() public { + team = msg.sender; + token = new SpendToken(this, team); + } + + /** + * @dev Pause the presale in the event of an emergency + */ + function pausePreSale() external teamOnly { + require(!isPaused); + require(preSaleState == PreSaleState.PreSaleStarted); + + isPaused = true; + + PreSalePaused(); + } + + /** + * @dev Resume the presale if necessary + */ + function resumePreSale() external teamOnly { + require(isPaused); + require(preSaleState == PreSaleState.PreSaleStarted); + + isPaused = false; + + PreSaleResumed(); + } + + /** + * @dev End the presale event, preventing any further token purchases + */ + function finishPreSale() external teamOnly { + require(preSaleState == PreSaleState.PreSaleStarted); + + preSaleState = PreSaleState.PreSaleFinished; + + PreSaleFinished(); + } + + /** + * @dev Withdraw the funds from this contract to the specified address + */ + function withdrawFunds(address _target, uint256 _amount) external teamOnly { + _target.transfer(_amount); + } + + /** + * @dev Buy tokens, called internally from the catcher + */ + function buyTokens(address _buyer, uint256 _value) internal returns (uint) { + require(_buyer != address(0)); + require(_value > 0); + require(preSaleState == PreSaleState.PreSaleStarted); + require(!isPaused); + + uint256 boughtTokens = _value / pricePerToken; + + require(boughtTokens > 0); + + token.mint(_buyer, boughtTokens); + + TokenBuy(_buyer, boughtTokens); + } + + /** + * @dev Catch any incoming payments to the contract and convert the ETH to tokens + */ + function () external payable { + buyTokens(msg.sender, msg.value); + } +} diff --git a/data_full/CVE/2018-13127.sol b/data_full/CVE/2018-13127.sol new file mode 100644 index 00000000..565cd731 --- /dev/null +++ b/data_full/CVE/2018-13127.sol @@ -0,0 +1,238 @@ +pragma solidity ^0.4.19; + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + + // SafeMath.sub will throw if there is not enough balance. + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } + +} + + + + + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + + /** + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + */ + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + +/** + * @title Spade PreSale Token + */ +contract DSPXToken is StandardToken { + + string public constant name = "SP8DE PreSale Token"; + string public constant symbol = "DSPX"; + uint8 public constant decimals = 18; + address public preSale; + address public team; + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 888888888 * (1e18); + + // Constructor + function DSPXToken(address _preSale, address _team) { + require(_preSale != address(0)); + require(_team != address(0)); + preSale = _preSale; + team = _team; + } + + // Create tokens + function mint(address holder, uint value) { + require(msg.sender == preSale); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + + // Allow token transfer + function unfreeze() external { + require(msg.sender == team); + isFrozen = false; + } + + // ERC20 functions + // ========================= + function transfer(address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transfer(_to, _value); + } + + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } +} diff --git a/data_full/CVE/2018-13128.sol b/data_full/CVE/2018-13128.sol new file mode 100644 index 00000000..6a85b5c0 --- /dev/null +++ b/data_full/CVE/2018-13128.sol @@ -0,0 +1,193 @@ +pragma solidity ^0.4.21; + +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { + if (a == 0) { + return 0; + } + c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + return a / b; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256 c) { + c = a + b; + assert(c >= a); + return c; + } +} + +/** +* @title Contract that will work with ERC223 tokens. +*/ + +contract ERC223ReceivingContract{ + /** + * @dev Standard ERC223 function that will handle incoming token transfers. + * + * @param _from Token sender address. + * @param _value Amount of tokens. + * @param _data Transaction metadata. + */ + function tokenFallback(address _from, uint _value, bytes _data) public; +} + +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) public constant returns (uint); + function transfer(address to, uint value) public; + event Transfer(address indexed from, address indexed to, uint value); +} + +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint); + function transferFrom(address from, address to, uint value) public; + function approve(address spender, uint value) public; + event Approval(address indexed owner, address indexed spender, uint value); +} + +contract BasicToken is ERC20Basic { + using SafeMath for uint; + + mapping(address => uint) balances; + + modifier onlyPayloadSize(uint size) { + require(msg.data.length >= size + 4); + _; + } + + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) public { + uint codeLength; + bytes memory empty; + + assembly { + codeLength := extcodesize(_to) + } + + + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + + if(codeLength > 0) { + ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); + receiver.tokenFallback(msg.sender, _value, empty); + } + + emit Transfer(msg.sender, _to, _value); + } + + function balanceOf(address _owner) public constant returns (uint balance) { + return balances[_owner]; + } + +} + +contract StandardToken is BasicToken, ERC20 { + + mapping (address => mapping (address => uint)) allowed; + + function transferFrom(address _from, address _to, uint _value) public { + uint256 _allowance = allowed[_from][msg.sender]; + uint codeLength; + bytes memory empty; + + assembly { + codeLength := extcodesize(_to) + } + + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + + if(codeLength>0) { + ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); + receiver.tokenFallback(msg.sender, _value, empty); + } + + emit Transfer(_from, _to, _value); + } + + function approve(address _spender, uint _value) public { + allowed[msg.sender][_spender] = _value; + emit Approval(msg.sender, _spender, _value); + } + + function allowance(address _owner, address _spender) public constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + +contract BurnableToken is StandardToken { + + function burn(uint _value) public { + require(_value > 0); + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + emit Burn(burner, _value); + } + + event Burn(address indexed burner, uint indexed value); + +} + +contract ETY is BurnableToken { + + string public name = "Etherty Token"; + string public symbol = "ETY"; + uint public decimals = 18; + uint constant TOKEN_LIMIT = 240 * 1e6 * 1e18; + + address public ico; + + bool public tokensAreFrozen = true; + + function ETY(address _ico) public { + ico = _ico; + } + + function mint(address _holder, uint _value) external { + require(msg.sender == ico); + require(_value != 0); + require(totalSupply + _value <= TOKEN_LIMIT); + + balances[_holder] += _value; + totalSupply += _value; + emit Transfer(0x0, _holder, _value); + } + + function burn(uint _value) public { + require(msg.sender == ico); + super.burn(_value); + } + + function unfreeze() external { + require(msg.sender == ico); + tokensAreFrozen = false; + } + + function transfer(address _to, uint _value) public { + require(!tokensAreFrozen); + super.transfer(_to, _value); + } + + function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) public { + require(!tokensAreFrozen); + super.transferFrom(_from, _to, _value); + } + + function approve(address _spender, uint _value) public { + require(!tokensAreFrozen); + super.approve(_spender, _value); + } +} diff --git a/data_full/CVE/2018-13129.sol b/data_full/CVE/2018-13129.sol new file mode 100644 index 00000000..b951fb59 --- /dev/null +++ b/data_full/CVE/2018-13129.sol @@ -0,0 +1,276 @@ +pragma solidity ^0.4.18; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + + // SafeMath.sub will throw if there is not enough balance. + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } + +} + + + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + + /** + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + */ + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + + +// Migration Agent interface +contract MigrationAgent { + function migrateFrom(address _from, uint _value) public; +} + +/** + * @title Spade Token + */ +contract SPXToken is StandardToken { + + string public constant name = "SP8DE Token"; + string public constant symbol = "SPX"; + uint8 public constant decimals = 18; + address public ico; + + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 8888888888 * (1e18); + + // Token migration variables + address public migrationMaster; + address public migrationAgent; + uint public totalMigrated; + + event Migrate(address indexed _from, address indexed _to, uint _value); + + // Constructor + function SPXToken(address _ico, address _migrationMaster) public { + require(_ico != 0); + ico = _ico; + migrationMaster = _migrationMaster; + } + + // Create tokens + function mint(address holder, uint value) public { + require(msg.sender == ico); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + + // Allow token transfer. + function unfreeze() public { + require(msg.sender == ico); + isFrozen = false; + } + + // ERC20 functions + // ========================= + function transfer(address _to, uint _value) public returns (bool) { + require(_to != address(0)); + require(!isFrozen); + return super.transfer(_to, _value); + } + + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } + + // Token migration + function migrate(uint value) external { + require(migrationAgent != 0); + require(value > 0); + require(value <= balances[msg.sender]); + + balances[msg.sender] -= value; + totalSupply -= value; + totalMigrated += value; + MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); + Migrate(msg.sender, migrationAgent, value); + } + + // Set address of migration contract + function setMigrationAgent(address _agent) external { + require(migrationAgent == 0); + require(msg.sender == migrationMaster); + migrationAgent = _agent; + } + + function setMigrationMaster(address _master) external { + require(msg.sender == migrationMaster); + require(_master != 0); + migrationMaster = _master; + } +} diff --git a/data_full/CVE/2018-13131.sol b/data_full/CVE/2018-13131.sol new file mode 100644 index 00000000..2697be56 --- /dev/null +++ b/data_full/CVE/2018-13131.sol @@ -0,0 +1,312 @@ +pragma solidity ^0.4.19; + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + + // SafeMath.sub will throw if there is not enough balance. + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } + +} + + + + + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + + /** + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + */ + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + +/** + * @title Spade PreSale Token + */ +contract DSPXToken is StandardToken { + + string public constant name = "SP8DE PreSale Token"; + string public constant symbol = "DSPX"; + uint8 public constant decimals = 18; + address public preSale; + address public team; + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 888888888 * (1e18); + + // Constructor + function DSPXToken(address _preSale, address _team) { + require(_preSale != address(0)); + require(_team != address(0)); + preSale = _preSale; + team = _team; + } + + // Create tokens + function mint(address holder, uint value) { + require(msg.sender == preSale); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + + // Allow token transfer + function unfreeze() external { + require(msg.sender == team); + isFrozen = false; + } + + // ERC20 functions + // ========================= + function transfer(address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transfer(_to, _value); + } + + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } +} + +/** + * @title Spade PreSale +*/ +contract SpadePreSale { + + // The token being sold + DSPXToken public token; + + address public team; + address public icoAgent; + + // Modifiers + modifier teamOnly {require(msg.sender == team); _;} + modifier icoAgentOnly {require(msg.sender == icoAgent); _;} + + bool public isPaused = false; + enum PreSaleState { Created, PreSaleStarted, PreSaleFinished } + PreSaleState public preSaleState = PreSaleState.Created; + + // Events + event PreSaleStarted(); + event PreSaleFinished(); + + event PreSalePaused(); + event PreSaleResumed(); + + event TokenBuy(address indexed buyer, uint256 tokens, uint factor, string tx); + + function SpadePreSale(address _team, address _icoAgent) public { + require(_team != address(0)); + require(_icoAgent != address(0)); + team = _team; + icoAgent = _icoAgent; + token = new DSPXToken(this, team); + } + + function startPreSale() external teamOnly { + require(preSaleState == PreSaleState.Created); + preSaleState = PreSaleState.PreSaleStarted; + PreSaleStarted(); + } + + function pausePreSale() external teamOnly { + require(!isPaused); + require(preSaleState == PreSaleState.PreSaleStarted); + isPaused = true; + PreSalePaused(); + } + + function resumePreSale() external teamOnly { + require(isPaused); + require(preSaleState == PreSaleState.PreSaleStarted); + isPaused = false; + PreSaleResumed(); + } + + function finishPreSale() external teamOnly { + require(preSaleState == PreSaleState.PreSaleStarted); + preSaleState = PreSaleState.PreSaleFinished; + PreSaleFinished(); + } + + function buyPreSaleTokens(address buyer, uint256 tokens, uint factor, string txHash) external icoAgentOnly returns (uint) { + require(buyer != address(0)); + require(tokens > 0); + require(preSaleState == PreSaleState.PreSaleStarted); + require(!isPaused); + + token.mint(buyer, tokens); + + TokenBuy(buyer, tokens, factor, txHash); + } +} diff --git a/data_full/CVE/2018-13132.sol b/data_full/CVE/2018-13132.sol new file mode 100644 index 00000000..9d9e20f8 --- /dev/null +++ b/data_full/CVE/2018-13132.sol @@ -0,0 +1,403 @@ +pragma solidity ^0.4.18; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + + // SafeMath.sub will throw if there is not enough balance. + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } + +} + + + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + + /** + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + */ + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + + +// Migration Agent interface +contract MigrationAgent { + function migrateFrom(address _from, uint _value) public; +} + +/** + * @title Spade Token + */ +contract SPXToken is StandardToken { + + string public constant name = "SP8DE Token"; + string public constant symbol = "SPX"; + uint8 public constant decimals = 18; + address public ico; + + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 8888888888 * (1e18); + + // Token migration variables + address public migrationMaster; + address public migrationAgent; + uint public totalMigrated; + + event Migrate(address indexed _from, address indexed _to, uint _value); + + // Constructor + function SPXToken(address _ico, address _migrationMaster) public { + require(_ico != 0); + ico = _ico; + migrationMaster = _migrationMaster; + } + + // Create tokens + function mint(address holder, uint value) public { + require(msg.sender == ico); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + + // Allow token transfer. + function unfreeze() public { + require(msg.sender == ico); + isFrozen = false; + } + + // ERC20 functions + // ========================= + function transfer(address _to, uint _value) public returns (bool) { + require(_to != address(0)); + require(!isFrozen); + return super.transfer(_to, _value); + } + + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } + + // Token migration + function migrate(uint value) external { + require(migrationAgent != 0); + require(value > 0); + require(value <= balances[msg.sender]); + + balances[msg.sender] -= value; + totalSupply -= value; + totalMigrated += value; + MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); + Migrate(msg.sender, migrationAgent, value); + } + + // Set address of migration contract + function setMigrationAgent(address _agent) external { + require(migrationAgent == 0); + require(msg.sender == migrationMaster); + migrationAgent = _agent; + } + + function setMigrationMaster(address _master) external { + require(msg.sender == migrationMaster); + require(_master != 0); + migrationMaster = _master; + } +} + +/** + * @title Spade SpadeIco + */ +contract SpadeIco { + + uint public constant TOKENS_FOR_SALE = 3655555558 * 1e18; + uint public constant TOKENS_FOUNDATION = 1777777778 * 1e18; + + uint tokensSold = 0; + + // Ico token + SPXToken public token; + address public team; + address public icoAgent; + address public migrationMaster; + // Modifiers + modifier teamOnly {require(msg.sender == team); _;} + modifier icoAgentOnly {require(msg.sender == icoAgent); _;} + + bool public isPaused = false; + enum IcoState { Created, IcoStarted, IcoFinished } + IcoState public icoState = IcoState.Created; + + event IcoStarted(); + event IcoFinished(); + event IcoPaused(); + event IcoResumed(); + event TokenBuy(address indexed buyer, uint256 tokens, uint256 factor, string tx); + event TokenBuyPresale(address indexed buyer, uint256 tokens, uint256 factor, string tx); + event TokenWin(address indexed buyer, uint256 tokens, uint256 jackpot); + + function SpadeIco(address _team, address _icoAgent, address _migrationMaster) public { + require(_team != address(0) && _icoAgent != address(0) && _migrationMaster != address(0)); + migrationMaster = _migrationMaster; + team = _team; + icoAgent = _icoAgent; + token = new SPXToken(this, migrationMaster); + } + + function startIco() external teamOnly { + require(icoState == IcoState.Created); + icoState = IcoState.IcoStarted; + IcoStarted(); + } + + function finishIco(address foundation, address other) external teamOnly { + require(foundation != address(0)); + require(other != address(0)); + + require(icoState == IcoState.IcoStarted); + icoState = IcoState.IcoFinished; + + uint256 amountWithFoundation = SafeMath.add(token.totalSupply(), TOKENS_FOUNDATION); + if (amountWithFoundation > token.TOKEN_LIMIT()) { + uint256 foundationToMint = token.TOKEN_LIMIT() - token.totalSupply(); + if (foundationToMint > 0) { + token.mint(foundation, foundationToMint); + } + } else { + token.mint(foundation, TOKENS_FOUNDATION); + + uint mintedTokens = token.totalSupply(); + + uint remaining = token.TOKEN_LIMIT() - mintedTokens; + if (remaining > 0) { + token.mint(other, remaining); + } + } + + token.unfreeze(); + IcoFinished(); + } + + function pauseIco() external teamOnly { + require(!isPaused); + require(icoState == IcoState.IcoStarted); + isPaused = true; + IcoPaused(); + } + + function resumeIco() external teamOnly { + require(isPaused); + require(icoState == IcoState.IcoStarted); + isPaused = false; + IcoResumed(); + } + + function convertPresaleTokens(address buyer, uint256 tokens, uint256 factor, string txHash) external icoAgentOnly returns (uint) { + require(buyer != address(0)); + require(tokens > 0); + require(validState()); + + uint256 tokensToSell = SafeMath.add(tokensSold, tokens); + require(tokensToSell <= TOKENS_FOR_SALE); + tokensSold = tokensToSell; + + token.mint(buyer, tokens); + TokenBuyPresale(buyer, tokens, factor, txHash); + } + + function creditJackpotTokens(address buyer, uint256 tokens, uint256 jackpot) external icoAgentOnly returns (uint) { + require(buyer != address(0)); + require(tokens > 0); + require(validState()); + + token.mint(buyer, tokens); + TokenWin(buyer, tokens, jackpot); + } + + function buyTokens(address buyer, uint256 tokens, uint256 factor, string txHash) external icoAgentOnly returns (uint) { + require(buyer != address(0)); + require(tokens > 0); + require(validState()); + + uint256 tokensToSell = SafeMath.add(tokensSold, tokens); + require(tokensToSell <= TOKENS_FOR_SALE); + tokensSold = tokensToSell; + + token.mint(buyer, tokens); + TokenBuy(buyer, tokens, factor, txHash); + } + + function validState() internal view returns (bool) { + return icoState == IcoState.IcoStarted && !isPaused; + } +} diff --git a/data_full/CVE/2018-13144.sol b/data_full/CVE/2018-13144.sol new file mode 100644 index 00000000..0dadf164 --- /dev/null +++ b/data_full/CVE/2018-13144.sol @@ -0,0 +1,103 @@ +pragma solidity ^0.4.8; +contract Token{ + // token总量,默认会为public变量生成一个getter函数接口,名称为totalSupply(). + uint256 public totalSupply; + + /// 获取账户_owner拥有token的数量 + function balanceOf(address _owner) constant returns (uint256 balance); + + //从消息发送者账户中往_to账户转数量为_value的token + function transfer(address _to, uint256 _value) returns (bool success); + + //从账户_from中往账户_to转数量为_value的token,与approve方法配合使用 + function transferFrom(address _from, address _to, uint256 _value) returns + (bool success); + + //消息发送账户设置账户_spender能从发送账户中转出数量为_value的token + function approve(address _spender, uint256 _value) returns (bool success); + + //获取账户_spender可以从账户_owner中转出token的数量 + function allowance(address _owner, address _spender) constant returns + (uint256 remaining); + + //发生转账时必须要触发的事件 + event Transfer(address indexed _from, address indexed _to, uint256 _value); + + //当函数approve(address _spender, uint256 _value)成功执行时必须触发的事件 + event Approval(address indexed _owner, address indexed _spender, uint256 + _value); +} + +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + //默认totalSupply 不会超过最大值 (2^256 - 1). + //如果随着时间的推移将会有新的token生成,则可以用下面这句避免溢出的异常 + //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value;//从消息发送者账户中减去token数量_value + balances[_to] += _value;//往接收账户增加token数量_value + Transfer(msg.sender, _to, _value);//触发转币交易事件 + return true; + } + + + function transferFrom(address _from, address _to, uint256 _value) returns + (bool success) { + //require(balances[_from] >= _value && allowed[_from][msg.sender] >= + // _value && balances[_to] + _value > balances[_to]); + require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); + balances[_to] += _value;//接收账户增加token数量_value + balances[_from] -= _value; //支出账户_from减去token数量_value + allowed[_from][msg.sender] -= _value;//消息发送者可以从账户_from中转出的数量减少_value + Transfer(_from, _to, _value);//触发转币交易事件 + return true; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + + function approve(address _spender, uint256 _value) returns (bool success) + { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender];//允许_spender从_owner中转出的token数 + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} + +contract HumanStandardToken is StandardToken { + + /* Public variables of the token */ + string public name; //名称: eg Simon Bucks + uint8 public decimals; //最多的小数位数,How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. + string public symbol; //token简称: eg SBX + string public version = 'H0.1'; //版本 + + function HumanStandardToken(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) { + balances[msg.sender] = _initialAmount; // 初始token数量给予消息发送者 + totalSupply = _initialAmount; // 设置初始总量 + name = _tokenName; // token名称 + decimals = _decimalUnits; // 小数位数 + symbol = _tokenSymbol; // token简称 + } + + /* Approves and then calls the receiving contract */ + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. + //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) + //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. + require(_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)); + return true; + } + +} diff --git a/data_full/CVE/2018-13189.sol b/data_full/CVE/2018-13189.sol new file mode 100644 index 00000000..8cf0aef7 --- /dev/null +++ b/data_full/CVE/2018-13189.sol @@ -0,0 +1,335 @@ +pragma solidity ^0.4.18; + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal constant returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title ERC20Basic + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) constant returns (uint256); + function transfer(address to, uint256 value) returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant returns (uint256); + function transferFrom(address from, address to, uint256 value) returns (bool); + function approve(address spender, uint256 value) returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) returns (bool) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } +} + + +/** + * @title Standard ERC20 token + * + * @dev Implementation of the basic standard token. + * @dev https://github.com/ethereum/EIPs/issues/20 + * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amout of tokens to be transfered + */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool) { + var _allowance = allowed[_from][msg.sender]; + + // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met + // require (_value <= _allowance); + + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) returns (bool) { + + // To change the approve amount you first have to reduce the addresses` + // allowance to zero by calling `approve(_spender, 0)` if it is not + // already 0 to mitigate the race condition described here: + // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + require((_value == 0) || (allowed[msg.sender][_spender] == 0)); + + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifing the amount of tokens still avaible for the spender. + */ + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} + + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { + address public owner; + + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Ownable() { + owner = msg.sender; + } + + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } +} + + + +/** + * @title Pausable + * @dev Base contract which allows children to implement an emergency stop mechanism. + */ +contract Pausable is Ownable { + event Pause(); + event Unpause(); + + bool public paused = false; + + + /** + * @dev modifier to allow actions only when the contract IS paused + */ + modifier whenNotPaused() { + require(!paused); + _; + } + + /** + * @dev modifier to allow actions only when the contract IS NOT paused + */ + modifier whenPaused { + require(paused); + _; + } + + /** + * @dev called by the owner to pause, triggers stopped state + */ + function pause() onlyOwner whenNotPaused returns (bool) { + paused = true; + Pause(); + return true; + } + + /** + * @dev called by the owner to unpause, returns to normal state + */ + function unpause() onlyOwner whenPaused returns (bool) { + paused = false; + Unpause(); + return true; + } +} + + +/** + * Pausable token + * + * Simple ERC20 Token example, with pausable token creation + **/ + +contract PausableToken is StandardToken, Pausable { + + function transfer(address _to, uint _value) whenNotPaused returns (bool) { + return super.transfer(_to, _value); + } + + function transferFrom(address _from, address _to, uint _value) whenNotPaused returns (bool) { + return super.transferFrom(_from, _to, _value); + } +} + + + +contract UNLB is PausableToken { + + string public constant name = "UnolaboToken"; + string public constant symbol = "UNLB"; + uint256 public constant decimals = 18; + + function UNLB() { + owner = msg.sender; + } + + function mint(address _x, uint _v) public onlyOwner { + balances[_x] += _v; + totalSupply += _v; + Transfer(0x0, _x, _v); + } +} + + + +contract ICO is Pausable { + + uint public constant ICO_START_DATE = /*2017-11-27 17:00:00+8*/ 1511773200; + uint public constant ICO_END_DATE = /*2018-04-30 00:17:00+8*/ 1525018620; + + address public constant admin = 0xFeC0714C2eE71a486B679d4A3539FA875715e7d8; + address public constant teamWallet = 0xf16d5733A31D54e828460AFbf7D60aA803a61C51; + + UNLB public unlb; + bool public isFinished = false; + + event ForeignBuy(address investor, uint unlbValue, string txHash); + + function ICO() { + owner = admin; + unlb = new UNLB(); + unlb.pause(); + } + + function pricePerWei() public constant returns(uint) { + if (now < /*2017-11-28 00:17:00+8*/ 1511799420) return 800.0 * 1 ether; + else if(now < /*2017-11-29 00:17:00+8*/ 1511885820) return 750.0 * 1 ether; + else if(now < /*2017-12-14 00:17:00+8*/ 1513181820) return 675.0 * 1 ether; + else if(now < /*2018-01-10 00:17:00+8*/ 1515514620) return 575.0 * 1 ether; + else if(now < /*2018-01-18 00:17:00+8*/ 1516205820) return 537.5 * 1 ether; + else return 500.0 * 1 ether; + } + + + function() public payable { + require(!paused && now >= ICO_START_DATE && now < ICO_END_DATE); + uint _tokenVal = (msg.value * pricePerWei()) / 1 ether; + unlb.mint(msg.sender, _tokenVal); + } + + function foreignBuy(address _investor, uint _unlbValue, string _txHash) external onlyOwner { + require(!paused && now >= ICO_START_DATE && now < ICO_END_DATE); + require(_unlbValue > 0); + unlb.mint(_investor, _unlbValue); + ForeignBuy(_investor, _unlbValue, _txHash); + } + + function finish(address _team, address _fund, address _bounty, address _backers) external onlyOwner { + require(now >= ICO_END_DATE && !isFinished); + unlb.unpause(); + isFinished = true; + + uint _total = unlb.totalSupply() * 100 / (100 - 12 - 15 - 5 - 3); + unlb.mint(_team, (_total * 12) / 100); + unlb.mint(_fund, (_total * 15) / 100); + unlb.mint(_bounty, (_total * 5) / 100); + unlb.mint(_backers, (_total * 3) / 100); + } + + + function withdraw() external onlyOwner { + teamWallet.transfer(this.balance); + } +} diff --git a/data_full/CVE/2018-13202.sol b/data_full/CVE/2018-13202.sol new file mode 100644 index 00000000..9d32d1c1 --- /dev/null +++ b/data_full/CVE/2018-13202.sol @@ -0,0 +1,183 @@ +pragma solidity ^0.4.11; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MyBoToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* This notifies clients about the amount burnt */ + event Burn(address indexed from, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyBoToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } + + function burn(uint256 amount) onlyOwner returns (bool success) { + if (balanceOf[msg.sender] < amount) throw; // Check if the sender has enough + balanceOf[msg.sender] -= amount; // Subtract from the sender + totalSupply -= amount; // Updates totalSupply + Burn(msg.sender, amount); + return true; + } + +} diff --git a/data_full/CVE/2018-13208.sol b/data_full/CVE/2018-13208.sol new file mode 100644 index 00000000..7c3179d7 --- /dev/null +++ b/data_full/CVE/2018-13208.sol @@ -0,0 +1,171 @@ +//ERC20 Token +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "MoneyTree 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MoneyTreeToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 95000000 * 10**8; + uint8 public constant decimalUnits = 8; + string public tokenName = "MoneyTree"; + string public tokenSymbol = "TREE"; + function MoneyTreeToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} diff --git a/data_full/CVE/2018-13220.sol b/data_full/CVE/2018-13220.sol new file mode 100644 index 00000000..64469724 --- /dev/null +++ b/data_full/CVE/2018-13220.sol @@ -0,0 +1,171 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MAVCash is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MAVCash( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} diff --git a/data_full/CVE/2018-13221.sol b/data_full/CVE/2018-13221.sol new file mode 100644 index 00000000..8dc7fa9f --- /dev/null +++ b/data_full/CVE/2018-13221.sol @@ -0,0 +1,186 @@ +pragma solidity ^0.4.14; + +/* ©The Extreme Coin (XT) SWAP for Yobit.net contract + +35796229192 + ©RomanLanskoj 2017 +There is no law stronger than the code +*/ +library SafeMath { + function mul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + function sub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + function add(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c >= a); + return c; + } + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + +contract Ownable { + address public owner; + function Ownable() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } +} + +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function transfer(address to, uint value); + event Transfer(address indexed from, address indexed to, uint value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant returns (uint); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + +contract newToken is ERC20Basic { + + using SafeMath for uint; + + mapping(address => uint) balances; + + + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + } + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } +} + +contract StandardToken is newToken, ERC20 { + mapping (address => mapping (address => uint)) allowed; + function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) { + var _allowance = allowed[_from][msg.sender]; + // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met + // if (_value > _allowance) throw; + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + } + function approve(address _spender, uint _value) { + // To change the approve amount you first have to reduce the addresses` + // allowance to zero by calling approve(_spender, 0) if it is not + // already 0 to mitigate the race condition described here: + // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + } + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } +} + +contract Extreme is StandardToken, Ownable { + string public constant name = "Extreme Coin"; + string public constant symbol = "XT"; + uint public constant decimals = 2; + uint256 public initialSupply; + + // Constructor + function Extreme () { + totalSupply = 59347950076; + balances[msg.sender] = totalSupply; + initialSupply = totalSupply; + Transfer(0, this, totalSupply); + Transfer(this, msg.sender, totalSupply); + } +} + +contract ExtremeToken is Ownable, Extreme { + +uint256 public sellPrice; +uint256 public buyPrice; + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable returns (uint amount) + { + amount = msg.value / buyPrice; + if (balances[this] < amount) throw; + balances[msg.sender] += amount; + balances[this] -= amount; + Transfer(this, msg.sender, amount); + } + + function sell(uint256 amount) { + if (balances[msg.sender] < amount ) throw; + balances[this] += amount; + balances[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } + + function transfer(address _to, uint256 _value) { + require(balances[msg.sender] > _value); + require(balances[_to] + _value > balances[_to]); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balances[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + +} diff --git a/data_full/CVE/2018-13225.sol b/data_full/CVE/2018-13225.sol new file mode 100644 index 00000000..9a31acb4 --- /dev/null +++ b/data_full/CVE/2018-13225.sol @@ -0,0 +1,181 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + assert(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + assert (balanceOf[msg.sender] >= _value); // Check if the sender has enough + assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + assert (balanceOf[_from] >= _value); // Check if the sender has enough + assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + assert (_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + assert(false); // Prevents accidental sending of ether + } +} + +contract MyYLCToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* This notifies clients about the amount burnt */ + event Burn(address indexed from, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyYLCToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + assert (balanceOf[msg.sender] >= _value); // Check if the sender has enough + assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + assert (!frozenAccount[msg.sender]); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + assert (!frozenAccount[_from]); // Check if frozen + assert (balanceOf[_from] >= _value); // Check if the sender has enough + assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + assert (_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + assert (balanceOf[this] >= amount); // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + assert (balanceOf[msg.sender] >= amount ); // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + assert (msg.sender.send(amount * sellPrice)); // sends ether to the seller. It's important + // to do this last to avoid recursion attacks + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + + function burn(uint256 amount) onlyOwner returns (bool success) { + assert (balanceOf[msg.sender] >= amount); // Check if the sender has enough + balanceOf[msg.sender] -= amount; // Subtract from the sender + totalSupply -= amount; // Updates totalSupply + Burn(msg.sender, amount); + return true; + } + +} diff --git a/data_full/CVE/2018-13227.sol b/data_full/CVE/2018-13227.sol new file mode 100644 index 00000000..c3e468ed --- /dev/null +++ b/data_full/CVE/2018-13227.sol @@ -0,0 +1,172 @@ +//ERC20 Token +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "MoneyChainNet 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract MoneyChainNetToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 35000000 * 10**8;//total supply 35 Million + uint8 public constant decimalUnits = 8;//decimals 8 + string public tokenName = "MoneyChainNet";//name MoneyChainNet + string public tokenSymbol = "MCN";//symbol MCN + //is this fine?yes + function MoneyChainNetToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} diff --git a/data_full/CVE/2018-13228.sol b/data_full/CVE/2018-13228.sol new file mode 100644 index 00000000..72b1c6fb --- /dev/null +++ b/data_full/CVE/2018-13228.sol @@ -0,0 +1,171 @@ +//ERC20 Token +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "Crowdnext 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract Crowdnext is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 100000000 * 10**4; + uint8 public constant decimalUnits = 4; + string public tokenName = "Crowdnext"; + string public tokenSymbol = "CNX"; + function Crowdnext() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} diff --git a/data_full/CVE/2018-13230.sol b/data_full/CVE/2018-13230.sol new file mode 100644 index 00000000..dfa896d9 --- /dev/null +++ b/data_full/CVE/2018-13230.sol @@ -0,0 +1,171 @@ +//ERC20 Token +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "DestiNeed 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract DestiNeedToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 950000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "DestiNeed"; + string public tokenSymbol = "DSN"; + function DestiNeedToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} diff --git a/data_full/CVE/2018-13325.sol b/data_full/CVE/2018-13325.sol new file mode 100644 index 00000000..3df76fb7 --- /dev/null +++ b/data_full/CVE/2018-13325.sol @@ -0,0 +1,176 @@ +pragma solidity ^0.4.18; +interface tokenRecipient{ + function receiveApproval(address _from,uint256 _value,address _token,bytes _extraData) external ; +} +contract GrowToken{ + //public var + address public owner; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + uint256 public sellPrice; //grow to wei not eth! + uint256 public buyPrice; + bool public sellOpen; + bool public buyOpen; + + //store token data set + mapping(address => uint256) public balanceOf; + //transition limite + mapping(address => mapping(address => uint256)) public allowance; + //freeze account + mapping(address=>bool) public frozenAccount; + + //event for transition + event Transfer(address indexed from,address indexed to , uint256 value); + //event for allowance + event Approval(address indexed owner,address indexed spender,uint256 value); + //event for freeze/unfreeze Account + event FrozenFunds(address target,bool freeze); + //TODO event for sell token , do't need it now + event SellToken(address seller,uint256 sellPrice, uint256 amount,uint256 getEth); + //TODO event for buy token , do't need it now + event BuyToken(address buyer,uint256 buyPrice,uint256 amount,uint256 spendEth); + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + //func constructor + function GrowToken() public { + owner = 0x757D7FbB9822b5033a6BBD4e17F95714942f921f; + name = "GROWCHAIN"; + symbol = "GROW"; + decimals = 8; + totalSupply = 5000000000 * 10 ** uint256(8); + + //init totalSupply to map(db) + balanceOf[owner] = totalSupply; + } + + function () public payable { + if(msg.sender!=owner){ + _buy(); + } + } + + // public functions + // 1 Transfer tokens + function transfer(address _to,uint256 _value) public{ + require(!frozenAccount[msg.sender]); + if(_to == address(this)){ + _sell(msg.sender,_value); + }else{ + _transfer(msg.sender,_to,_value); + } + } + + // 2 Transfer Other's tokens ,who had approve some token to me + function transferFrom(address _from,address _to,uint256 _value) public returns (bool success){ + //validate the allowance + require(!frozenAccount[_from]&&!frozenAccount[msg.sender]); + require(_value<=allowance[_from][msg.sender]); + //do action :sub allowance and do transfer + allowance[_from][msg.sender] -= _value; + if(_to == address(this)){ + _sell(_from,_value); + }else + { + _transfer(_from,_to,_value); + } + + return true; + } + //A is msg.sender or i + //B is the person who has approve me to use his token or _from + //C is the receipient or _to + + // 3 set allowance for other address,like B approve A(_spender) to use his token + function approve(address _spender,uint256 _value) public returns (bool success){ + require(!frozenAccount[msg.sender]); + allowance[msg.sender][_spender] = _value; + return true; + } + // 4 allowance and notify the receipient/spender + function approveAndCall(address _spender,uint256 _value,bytes _extraData) + public returns (bool success){ + require(!frozenAccount[msg.sender]); + tokenRecipient spender = tokenRecipient(_spender); + if(approve(_spender,_value)){ + spender.receiveApproval(msg.sender,_value,this,_extraData); + return true; + } + } + + // onlyOwner function + // 11 freeze or unfreeze account + function freezeAccount(address target,bool freeze) onlyOwner public{ + require(target!=owner); + frozenAccount[target] = freeze; + FrozenFunds(target,freeze); + } + // 12 transfer contract Ownership to newOwner and transfer all balanceOf oldOwner to newOwner + function transferOwnership(address newOwner) onlyOwner public{ + _transfer(owner,newOwner,balanceOf[owner]); + owner = newOwner; + } + // 13 set prices for sellPrice or buyPrice + function setPrices(uint256 newSellPrice,uint256 newBuyPrice) onlyOwner public{ + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + // 14 open/close user to buy token + function setBuyOpen(bool newBuyOpen) onlyOwner public{ + require(buyPrice>0); + buyOpen = newBuyOpen; + } + // 15 open/close user to sell token + function setSellOpen(bool newSellOpen) onlyOwner public{ + require(sellPrice>0); + sellOpen = newSellOpen; + } + // 16 transfer eth back to owner + function transferEth(uint256 amount) onlyOwner public{ + msg.sender.transfer(amount*10**uint256(18)); + } + + //internal transfer function + // 1 _transfer + function _transfer(address _from,address _to, uint256 _value) internal { + //validate input and other internal limites + require(_to != 0x0);//check to address + require(balanceOf[_from] >= _value);//check from address has enough balance + require(balanceOf[_to] + _value >balanceOf[_to]);//after transfer the balance of _to address is ok ,no overflow + uint256 previousBalances = balanceOf[_from]+balanceOf[_to];//store it for add asset to power the security + //do transfer:sub from _from address,and add to the _to address + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + //after transfer: emit transfer event,and add asset for security + Transfer(_from,_to,_value); + assert(balanceOf[_from]+balanceOf[_to] == previousBalances); + } + // 2 _buy + function _buy() internal returns (uint256 amount){ + require(buyOpen); + require(buyPrice>0); + require(msg.value>0); + amount = msg.value / buyPrice; // calculates the amount + _transfer(owner,msg.sender,amount); + BuyToken(msg.sender,buyPrice,amount,msg.value); + return amount; // ends function and returns + } + + // 3 _sell + function _sell(address _from,uint256 amount) internal returns (uint256 revenue){ + require(sellOpen); + require(!frozenAccount[_from]); + require(amount>0); + require(sellPrice>0); + require(_from!=owner); + _transfer(_from,owner,amount); + revenue = amount * sellPrice; + _from.transfer(revenue); // sends ether to the seller: it's important to do this last to prevent recursion attacks + SellToken(_from,sellPrice,amount,revenue); + return revenue; // ends function and returns + } +} diff --git a/data_full/CVE/2018-13326.sol b/data_full/CVE/2018-13326.sol new file mode 100644 index 00000000..864b5ec0 --- /dev/null +++ b/data_full/CVE/2018-13326.sol @@ -0,0 +1,135 @@ +pragma solidity ^0.4.4; + +contract Token { + + /// @return total amount of tokens + function totalSupply() constant returns (uint256 supply) {} + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) constant returns (uint256 balance) {} + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) returns (bool success) {} + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + + /// @notice `msg.sender` approves `_addr` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of wei to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) returns (bool success) {} + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + +} + +contract StandardToken is Token { + + function transfer(address _to, uint256 _value) returns (bool success) { + //Default assumes totalSupply can't be over max (2^256 - 1). + //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. + //Replace the if with this one instead. + //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + //same as above. Replace this line with the following if you want to protect against wrapping uints. + //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} + +contract Bittelux is StandardToken { + + /* Public variables of the token */ + + string public name; + uint8 public decimals; + string public symbol; + string public version = 'H1.0'; + uint256 public unitsOneEthCanBuy; + uint256 public totalEthInWei; + address public fundsWallet; + + //constructor function + function Bittelux() { + balances[msg.sender] = 10000000000000000000000000000; + totalSupply = 10000000000000000000000000000; + name = "Bittelux"; + decimals = 18; + symbol = "BTX"; + unitsOneEthCanBuy = 22500; + fundsWallet = msg.sender; + } + + function() payable{ + totalEthInWei = totalEthInWei + msg.value; + uint256 amount = msg.value * unitsOneEthCanBuy; + require(balances[fundsWallet] >= amount); + + balances[fundsWallet] = balances[fundsWallet] - amount; + balances[msg.sender] = balances[msg.sender] + amount; + + Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain + + //Transfer ether to fundsWallet + fundsWallet.transfer(msg.value); + } + + /* Approves and then calls the receiving contract */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + + //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. + //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) + //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} diff --git a/data_full/CVE/2018-13327.sol b/data_full/CVE/2018-13327.sol new file mode 100644 index 00000000..aac64339 --- /dev/null +++ b/data_full/CVE/2018-13327.sol @@ -0,0 +1,92 @@ +pragma solidity ^0.4.4; + +contract Token { + + function totalSupply() constant returns (uint256 supply) {} + + function balanceOf(address _owner) constant returns (uint256 balance) {} + + function transfer(address _to, uint256 _value) returns (bool success) {} + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + + function approve(address _spender, uint256 _value) returns (bool success) {} + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + +contract StandardToken is Token { + + function transfer(address _to, uint256 _value) returns (bool success) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} + +contract ChuCunLingAIGO is StandardToken { + + function () { + throw; + } + + string public name; + uint8 public decimals; + string public symbol; + string public version = 'H0.1'; + + function ChuCunLingAIGO( + uint256 _initialAmount, + string _tokenName, + uint8 _decimalUnits, + string _tokenSymbol + ) { + balances[msg.sender] = _initialAmount; + totalSupply = _initialAmount; + name = _tokenName; + decimals = _decimalUnits; + symbol = _tokenSymbol; + } + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} diff --git a/data_full/CVE/2018-13493.sol b/data_full/CVE/2018-13493.sol new file mode 100644 index 00000000..441785a0 --- /dev/null +++ b/data_full/CVE/2018-13493.sol @@ -0,0 +1,344 @@ +pragma solidity ^0.4.16; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal constant returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + + string public name; + string public symbol; + + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + + + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public + { + totalSupply = initialSupply * 10**18; // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) + { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) + { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + _value = _value * (10**18); + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract DaddyToken is owned, TokenERC20 { + + uint8 public decimals = 18; + + uint256 public totalContribution = 0; + uint256 public totalBonusTokensIssued = 0; + + uint256 public sellTokenPerEther; + uint256 public buyTokenPerEther; + bool public purchasingAllowed = true; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function DaddyToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public + {} + + + function distributeToken(address[] addresses, uint256 _value) onlyOwner public { + _value = _value * 10**18; + for (uint i = 0; i < addresses.length; i++) { + + balanceOf[owner] -= _value; + balanceOf[addresses[i]] += _value; + Transfer(owner, addresses[i], _value); + } + } + + function enablePurchasing() onlyOwner public { + require (msg.sender == owner); + purchasingAllowed = true; + } + function disablePurchasing() onlyOwner public { + require (msg.sender == owner); + purchasingAllowed = false; + } + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public returns (bool) { + mintedAmount = mintedAmount * 10**18; + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + return true; + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellTokenPerEther = newSellPrice; + buyTokenPerEther = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function() payable public { + require(msg.value > 0); + require(purchasingAllowed); + //uint amount = msg.value / buyTokenPerEther; // calculates the amount + //_transfer(this, msg.sender, amount); // makes the transfers + + owner.transfer(msg.value); + totalContribution += msg.value; + + uint256 tokensIssued = (msg.value * buyTokenPerEther); + + if (msg.value >= 10 finney) { + tokensIssued += totalContribution; + + bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); + if (bonusHash[0] == 0) { + uint8 bonusMultiplier = ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); + + uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; + tokensIssued += bonusTokensIssued; + + totalBonusTokensIssued += bonusTokensIssued; + } + } + + totalSupply += tokensIssued; + balanceOf[msg.sender] += tokensIssued; + + Transfer(address(this), msg.sender, tokensIssued); + + + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellTokenPerEther); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellTokenPerEther); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } +} diff --git a/data_full/CVE/2018-13533.sol b/data_full/CVE/2018-13533.sol new file mode 100644 index 00000000..0cb69a9b --- /dev/null +++ b/data_full/CVE/2018-13533.sol @@ -0,0 +1,191 @@ +pragma solidity ^0.4.18; + +/* +Developed by: https://www.investbtceur.com +*/ + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 0; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + event Transfer(address indexed from, address indexed to, uint256 value); + + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } +} + +contract ALUXToken is owned, TokenERC20 { + uint256 public sellPrice = 10000000000000000; + uint256 public buyPrice = 10000000000000000; + bool public closeBuy = false; + bool public closeSell = false; + address public commissionGetter = 0xCd8bf69ad65c5158F0cfAA599bBF90d7f4b52Bb0; + uint256 public minimumCommission = 100000000000000; + mapping (address => bool) public frozenAccount; + + event FrozenFunds(address target, bool frozen); + event LogDeposit(address sender, uint amount); + event LogWithdrawal(address receiver, uint amount); + + function ALUXToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + + function refillTokens(uint256 _value) public onlyOwner{ + _transfer(msg.sender, this, _value); + } + + function transfer(address _to, uint256 _value) public { + uint market_value = _value * sellPrice; + uint commission = market_value * 4 / 1000; + if (commission < minimumCommission){ commission = minimumCommission; } + address contr = this; + require(contr.balance >= commission); + commissionGetter.transfer(commission); + _transfer(msg.sender, _to, _value); + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + uint market_value = _value * sellPrice; + uint commission = market_value * 4 / 1000; + if (commission < minimumCommission){ commission = minimumCommission; } + address contr = this; + require(contr.balance >= commission); + commissionGetter.transfer(commission); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + function mintToken(uint256 mintedAmount) onlyOwner public { + balanceOf[owner] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, owner, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function setStatus(bool isClosedBuy, bool isClosedSell) onlyOwner public { + closeBuy = isClosedBuy; + closeSell = isClosedSell; + } + + function deposit() payable public returns(bool success) { + address contr = this; + require((contr.balance + msg.value) > contr.balance); + LogDeposit(msg.sender, msg.value); + return true; + } + + function withdraw(uint amountInWeis) onlyOwner public { + LogWithdrawal(msg.sender, amountInWeis); + owner.transfer(amountInWeis); + } + + function buy() payable public { + require(!closeBuy); + uint amount = msg.value / buyPrice; + uint market_value = amount * buyPrice; + uint commission = market_value * 4 / 1000; + if (commission < minimumCommission){ commission = minimumCommission; } + address contr = this; + require(contr.balance >= commission); + commissionGetter.transfer(commission); + _transfer(this, msg.sender, amount); + } + + function sell(uint256 amount) public { + require(!closeSell); + address contr = this; + uint market_value = amount * sellPrice; + uint commission = market_value * 4 / 1000; + if (commission < minimumCommission){ commission = minimumCommission; } + uint amount_weis = market_value + commission; + require(contr.balance >= amount_weis); + commissionGetter.transfer(commission); + _transfer(msg.sender, this, amount); + msg.sender.transfer(market_value); + } + + function () public payable { buy(); } +} diff --git a/data_full/CVE/2018-13625.sol b/data_full/CVE/2018-13625.sol new file mode 100644 index 00000000..cfef162b --- /dev/null +++ b/data_full/CVE/2018-13625.sol @@ -0,0 +1,271 @@ +pragma solidity ^0.4.13; +contract owned { + address public centralAuthority; + address public plutocrat; + + function owned() { + centralAuthority = msg.sender; + plutocrat = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != centralAuthority) revert(); + _; + } + + modifier onlyPlutocrat { + if (msg.sender != plutocrat) revert(); + _; + } + + function transfekbolOwnership(address newOwner) onlyPlutocrat { + centralAuthority = newOwner; + } + + function transfekbolPlutocrat(address newPlutocrat) onlyPlutocrat { + plutocrat = newPlutocrat; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public decentralizedEconomy = 'PLUTOCRACY'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + event InterestFreeLending(address indexed from, address indexed to, uint256 value, uint256 duration_in_days); + event Settlement(address indexed from, address indexed to, uint256 value, string notes, string reference); + event AuthorityNotified(string notes, string reference); + event ClientsNotified(string notes, string reference); + event LoanRepaid(address indexed from, address indexed to, uint256 value, string reference); + event TokenBurnt(address indexed from, uint256 value); + event EconomyTaxed(string base_value, string target_value, string tax_rate, string taxed_value, string notes); + event EconomyRebated(string base_value, string target_value, string rebate_rate, string rebated_value, string notes); + event PlutocracyAchieved(string value, string notes); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + Approval (msg.sender, _spender, _value); + return true; + } + + /* Approve and then comunicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (_to == 0x0) revert(); + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + revert(); // Prevents accidental sending of ether + } +} + +contract Krown is owned, token { + + string public nominalValue; + string public update; + string public sign; + string public website; + uint256 public totalSupply; + uint256 public notificationFee; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function Krown( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol, + address centralMinter + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { + if(centralMinter != 0 ) centralAuthority = centralMinter; // Sets the owner as specified (if centralMinter is not specified the owner is msg.sender) + balanceOf[centralAuthority] = initialSupply; // Give the owner all initial tokens + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (_to == 0x0) revert(); + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* Lend coins */ + function lend(address _to, uint256 _value, uint256 _duration_in_days) { + if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + if (_duration_in_days > 36135) revert(); + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + InterestFreeLending(msg.sender, _to, _value, _duration_in_days); // Notify anyone listening that this transfer took place + } + + /* Send coins */ + function repayLoan(address _to, uint256 _value, string _reference) { + if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + if (bytes(_reference).length != 66) revert(); + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + LoanRepaid(msg.sender, _to, _value, _reference); // Notify anyone listening that this transfer took place + } + + function settlvlement(address _from, uint256 _value, address _to, string _notes, string _reference) onlyOwner { + if (_from == plutocrat) revert(); + if (_to == 0x0) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (bytes(_reference).length != 66) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Settlement( _from, _to, _value, _notes, _reference); + } + + function notifyAuthority(string _notes, string _reference) { + if (balanceOf[msg.sender] < notificationFee) revert(); + if (bytes(_reference).length > 66) revert(); + if (bytes(_notes).length > 64) revert(); + balanceOf[msg.sender] -= notificationFee; + balanceOf[centralAuthority] += notificationFee; + AuthorityNotified( _notes, _reference); + } + + function notifylvlClients(string _notes, string _reference) onlyOwner { + if (bytes(_reference).length > 66) revert(); + if (bytes(_notes).length > 64) revert(); + ClientsNotified( _notes, _reference); + } + function taxlvlEconomy(string _base_value, string _target_value, string _tax_rate, string _taxed_value, string _notes) onlyOwner { + EconomyTaxed( _base_value, _target_value, _tax_rate, _taxed_value, _notes); + } + + function rebatelvlEconomy(string _base_value, string _target_value, string _rebate_rate, string _rebated_value, string _notes) onlyOwner { + EconomyRebated( _base_value, _target_value, _rebate_rate, _rebated_value, _notes); + } + + function plutocracylvlAchieved(string _value, string _notes) onlyOwner { + PlutocracyAchieved( _value, _notes); + } + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintlvlToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function burnlvlToken(address _from, uint256 _value) onlyOwner { + if (_from == plutocrat) revert(); + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + balanceOf[_from] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + TokenBurnt(_from, _value); + } + + function freezelvlAccount(address target, bool freeze) onlyOwner { + if (target == plutocrat) revert(); + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setlvlSign(string newSign) onlyOwner { + sign = newSign; + } + + function setlvlNominalValue(string newNominalValue) onlyOwner { + nominalValue = newNominalValue; + } + + function setlvlUpdate(string newUpdate) onlyOwner { + update = newUpdate; + } + + function setlvlWebsite(string newWebsite) onlyOwner { + website = newWebsite; + } + + function setlvlNfee(uint256 newFee) onlyOwner { + notificationFee = newFee; + } + +} diff --git a/data_full/CVE/2018-13670.sol b/data_full/CVE/2018-13670.sol new file mode 100644 index 00000000..d55b665d --- /dev/null +++ b/data_full/CVE/2018-13670.sol @@ -0,0 +1,103 @@ +pragma solidity ^0.4.18; + + +contract Owned { + address public owner; + + function Owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + + +contract GFCB is Owned { + + string public name="Golden Fortune Coin Blocked"; + string public symbol="GFCB"; + uint8 public decimals=18; + uint256 public totalSupply; + uint256 public sellPrice; + uint256 public buyPrice; + uint minBalanceForAccounts; + + mapping (address => uint256) public balanceOf; + mapping (address => bool) public frozenAccount; + + event Transfer(address indexed from, address indexed to, uint256 value); + event FrozenFunds(address target, bool frozen); + + function GFCB() public { + totalSupply = 10000000000000000000000000000; + balanceOf[msg.sender] = totalSupply; + } + + function setMinBalance(uint minimumBalanceInFinney) onlyOwner public { + minBalanceForAccounts = minimumBalanceInFinney * 1 finney; + } + + /* Internal transfer, can only be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + emit Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) public { + require(!frozenAccount[msg.sender]); + if (msg.sender.balance= amount); + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + emit Transfer(this, msg.sender, amount); + return amount; + } + + function sell(uint amount) public returns (uint revenue) { + require(balanceOf[msg.sender] >= amount); + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + revenue = amount * sellPrice; + msg.sender.transfer(revenue); + emit Transfer(msg.sender, this, amount); + return revenue; + } +} diff --git a/data_full/CVE/2018-13695.sol b/data_full/CVE/2018-13695.sol new file mode 100644 index 00000000..5ee55979 --- /dev/null +++ b/data_full/CVE/2018-13695.sol @@ -0,0 +1,301 @@ +pragma solidity ^0.4.14; + + + + + +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + + + + +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + + + + +contract StandardToken is ERC20, SafeMath { + + /* Token supply got increased and a new owner received these tokens */ + event Minted(address receiver, uint amount); + + /* Actual balances of token holders */ + mapping(address => uint) balances; + + /* approve() allowances */ + mapping (address => mapping (address => uint)) allowed; + + /* Interface declaration */ + function isToken() public constant returns (bool weAre) { + return true; + } + + function transfer(address _to, uint _value) returns (bool success) { + + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint _value) returns (bool success) { + + uint _allowance = allowed[_from][msg.sender]; + + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + + function approve(address _spender, uint _value) returns (bool success) { + + // To change the approve amount you first have to reduce the addresses` + // allowance to zero by calling `approve(_spender, 0)` if it is not + // already 0 to mitigate the race condition described here: + // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; + + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + + + + + + + +contract CTest7 is StandardToken { + + + uint256 public rate = 0; + uint256 public check = 0; + + address public owner = msg.sender; + address public Founder1 = 0xB5D39A8Ea30005f9114Bf936025De2D6f353813E; + address public Founder2 = 0x00A591199F53907480E1f5A00958b93B43200Fe4; + address public Founder3 = 0x0d19C131400e73c71bBB2bC1666dBa8Fe22d242D; + + uint256 public tokenAmount; + + string public constant name = "CTest7 Token"; + string public constant symbol = "CTest7"; + uint8 public constant decimals = 18; // 18 decimal places, the same as ETH. + + + + function mint(address receiver, uint amount) public { + + tokenAmount = ((msg.value*rate)/(1 ether)); + + if (tokenAmount != amount || amount == 0 || receiver != msg.sender) + { + revert(); + } + + + totalSupply = totalSupply + (amount*1 ether); + balances[receiver] += (amount*1 ether); + + // This will make the mint transaction appear in EtherScan.io + // We can remove this after there is a standardized minting event + Transfer(0, receiver, (amount*1 ether)); + } + + + + //This function is called when Ether is sent to the contract address + //Even if 0 ether is sent. + function () payable { + + + uint256 oldSupply = totalSupply; + totalSupply = (totalSupply/1 ether); + + + + //If all the tokens are gone, stop! + if (totalSupply > 999999) + { + revert(); + } + + + + //Set the price to 0.0003 ETH/CTest1 + //$0.10 per + if (totalSupply < 25000) + { + rate = 3340; + } + + //Set the price to 0.0015 ETH/CTest1 + //$0.50 per + if (totalSupply >= 25000) + { + rate = 668; + } + + //Set the price to 0.0030 ETH/CTest1 + //$1.00 per + if (totalSupply >= 125000) + { + rate = 334; + } + + //Set the price to 0.0075 ETH/CTest1 + //$2.50 per + if (totalSupply >= 525000) + { + rate = 134; + } + + + + + tokenAmount = 0; + tokenAmount = ((msg.value*rate)/(1 ether)); + + + //Make sure they send enough to buy atleast 1 token. + if (tokenAmount < 0) + { + revert(); + } + + + //Make sure someone isn't buying more than the remaining supply + check = 0; + + check = safeAdd(totalSupply, tokenAmount); + + if (check > 1000000) + { + revert(); + } + + + //Make sure someone isn't buying more than the current tier + if (totalSupply < 25000 && check > 25000) + { + revert(); + } + + //Make sure someone isn't buying more than the current tier + if (totalSupply < 125000 && check > 125000) + { + revert(); + } + + //Make sure someone isn't buying more than the current tier + if (totalSupply < 525000 && check > 525000) + { + revert(); + } + + + //Prevent any ETH address from buying more than 50 CTest1 during the pre-sale + uint256 senderBalance = (balances[msg.sender]/1 ether); + if ((senderBalance + tokenAmount) > 50 && totalSupply < 25000) + { + revert(); + } + + + totalSupply = oldSupply; + mint(msg.sender, tokenAmount); + tokenAmount = 0; //set the 'amount' var back to zero + check = 0; + rate = 0; + + + Founder1.transfer((msg.value/3)); //Send the ETH + Founder2.transfer((msg.value/3)); //Send the ETH + Founder3.transfer((msg.value/3)); //Send the ETH + + } + + + //Burn all remaining tokens. + //Only contract creator can do this. + function Burn () { + + if (msg.sender == owner && totalSupply < 1000000) + { + totalSupply = 1000000; + } else {throw;} + + } + + + +} diff --git a/data_full/CVE/2018-13698.sol b/data_full/CVE/2018-13698.sol new file mode 100644 index 00000000..b67f2ce0 --- /dev/null +++ b/data_full/CVE/2018-13698.sol @@ -0,0 +1,131 @@ +// Play2LivePromo token smart contract. +// Developed by Phenom.Team + +pragma solidity ^0.4.18; + +contract Play2LivePromo { + //Owner address + address public owner; + //Public variables of the token + string public constant name = "Level Up Coin Diamond | play2live.io"; + string public constant symbol = "LUCD"; + uint8 public constant decimals = 18; + uint public totalSupply = 0; + uint256 promoValue = 777 * 1e18; + mapping(address => uint) balances; + mapping(address => mapping (address => uint)) allowed; + // Events Log + event Transfer(address _from, address _to, uint256 amount); + event Approval(address indexed _owner, address indexed _spender, uint _value); + // Modifiers + // Allows execution by the contract owner only + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + /** + * @dev Contract constructor function sets owner address + */ + function Play2LivePromo() { + owner = msg.sender; + } + + /** + * @dev Allows owner to change promo value + * @param _newValue new + */ + function setPromo(uint256 _newValue) external onlyOwner { + promoValue = _newValue; + } + + /** + * @dev Get balance of investor + * @param _investor investor's address + * @return balance of investor + */ + function balanceOf(address _investor) public constant returns(uint256) { + return balances[_investor]; + } + + + /** + * @dev Mint tokens + * @param _investor beneficiary address the tokens will be issued to + */ + function mintTokens(address _investor) external onlyOwner { + balances[_investor] += promoValue; + totalSupply += promoValue; + Transfer(0x0, _investor, promoValue); + + } + + + /** + * @dev Send coins + * throws on any error rather then return a false flag to minimize + * user errors + * @param _to target address + * @param _amount transfer amount + * + * @return true if the transfer was successful + */ + function transfer(address _to, uint _amount) public returns (bool) { + balances[msg.sender] -= _amount; + balances[_to] -= _amount; + Transfer(msg.sender, _to, _amount); + return true; + } + + /** + * @dev An account/contract attempts to get the coins + * throws on any error rather then return a false flag to minimize user errors + * + * @param _from source address + * @param _to target address + * @param _amount transfer amount + * + * @return true if the transfer was successful + */ + function transferFrom(address _from, address _to, uint _amount) public returns (bool) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] -= _amount; + Transfer(_from, _to, _amount); + return true; + } + + + /** + * @dev Allows another account/contract to spend some tokens on its behalf + * throws on any error rather then return a false flag to minimize user errors + * + * also, to minimize the risk of the approve/transferFrom attack vector + * approve has to be called twice in 2 separate transactions - once to + * change the allowance to 0 and secondly to change it to the new allowance + * value + * + * @param _spender approved address + * @param _amount allowance amount + * + * @return true if the approval was successful + */ + function approve(address _spender, uint _amount) public returns (bool) { + require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * + * @param _owner the address which owns the funds + * @param _spender the address which will spend the funds + * + * @return the amount of tokens still avaible for the spender + */ + function allowance(address _owner, address _spender) constant returns (uint) { + return allowed[_owner][_spender]; + } +} diff --git a/data_full/CVE/2018-13703.sol b/data_full/CVE/2018-13703.sol new file mode 100644 index 00000000..0ef4af94 --- /dev/null +++ b/data_full/CVE/2018-13703.sol @@ -0,0 +1,262 @@ +pragma solidity ^0.4.21; +contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData) public; } +contract CERB_Coin + { + /* Variables */ + string public name; // name of contract + string public symbol; // symbol of contract + uint8 public decimals; // how many decimals to keep , 18 is best + uint256 public totalSupply; // how many tokens to create + uint256 public remaining; // how many tokens has left + uint public ethRate; // current rate of ether + address public owner; // contract creator + uint256 public amountCollected; // how much funds has been collected + uint public icoStatus; // allow / disallow online purchase + uint public icoTokenPrice; // token price, start with 10 cents + address public benAddress; // funds withdraw address + address public bkaddress; + uint public allowTransferToken; // allow / disallow token transfer for members + + /* Array */ + mapping (address => uint256) public balanceOf; // array of all balances + mapping (address => mapping (address => uint256)) public allowance; + mapping (address => bool) public frozenAccount; + + /* Events */ + event FrozenFunds(address target, bool frozen); + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + event TransferSell(address indexed from, address indexed to, uint256 value, string typex); // only for ico sales + + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function CERB_Coin() public + { + totalSupply = 1000000000000000000000000000; // as the decimals are 18, we add 18 zero after total supply, as all values are stored in wei + owner = msg.sender; // Set owner of contract + balanceOf[owner] = totalSupply; // Give the creator all initial tokens + name = "CERB Coin"; // Set the name for display purposes + symbol = "CERB"; // Set the symbol for display purposes + decimals = 18; // Amount of decimals for display purposes + remaining = totalSupply; // How many tokens are left + ethRate = 665; // default token price + icoStatus = 1; // default ico status + icoTokenPrice = 50; // values are in cents + benAddress = 0x4532828EC057e6cFa04a42b153d74B345084C4C2; // funds withdraw address + bkaddress = 0x1D38b496176bDaB78D430cebf25B2Fe413d3BF84; + allowTransferToken = 0; // default set to disable, it will be enable after ICO is over + } + + modifier onlyOwner() + { + require((msg.sender == owner) || (msg.sender == bkaddress)); + _; + } + + + function () public payable // called when ether is send to contract + { + } + + function sellOffline(address rec_address,uint256 token_amount) public onlyOwner + { + if (remaining > 0) + { + uint finalTokens = (token_amount * (10 ** 18)); + if(finalTokens < remaining) + { + remaining = remaining - finalTokens; + _transfer(owner,rec_address, finalTokens); + TransferSell(owner, rec_address, finalTokens,'Offline'); + } + else + { + revert(); + } + } + else + { + revert(); + } + } + + function getEthRate() onlyOwner public constant returns (uint) // Get current rate of ether + { + return ethRate; + } + + + function getConBal() onlyOwner public constant returns (uint) // Get Balance + { + return this.balance; + } + + function setEthRate (uint newEthRate) public onlyOwner // Set ether price + { + ethRate = newEthRate; + } + + + function getTokenPrice() onlyOwner public constant returns (uint) // Get current token price + { + return icoTokenPrice; + } + + function setTokenPrice (uint newTokenRate) public onlyOwner // Set one token price + { + icoTokenPrice = newTokenRate; + } + + + function setTransferStatus (uint status) public onlyOwner // Set transfer status + { + allowTransferToken = status; + } + + function changeIcoStatus (uint8 statx) public onlyOwner // Change ICO Status + { + icoStatus = statx; + } + + + function withdraw(uint amountWith) public onlyOwner // withdraw partical amount + { + if((msg.sender == owner) || (msg.sender == bkaddress)) + { + benAddress.transfer(amountWith); + } + else + { + revert(); + } + } + + function withdraw_all() public onlyOwner // call to withdraw all available balance + { + if((msg.sender == owner) || (msg.sender == bkaddress) ) + { + var amountWith = this.balance - 10000000000000000; + benAddress.transfer(amountWith); + } + else + { + revert(); + } + } + + function mintToken(uint256 tokensToMint) public onlyOwner + { + if(tokensToMint > 0) + { + var totalTokenToMint = tokensToMint * (10 ** 18); + balanceOf[owner] += totalTokenToMint; + totalSupply += totalTokenToMint; + Transfer(0, owner, totalTokenToMint); + } + } + + + /* Admin Trasfer */ + function adm_trasfer(address _from,address _to, uint256 _value) public onlyOwner + { + _transfer(_from, _to, _value); + } + + + function freezeAccount(address target, bool freeze) public onlyOwner + { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + + function getCollectedAmount() onlyOwner public constant returns (uint256 balance) + { + return amountCollected; + } + + function balanceOf(address _owner) public constant returns (uint256 balance) + { + return balanceOf[_owner]; + } + + function totalSupply() private constant returns (uint256 tsupply) + { + tsupply = totalSupply; + } + + + function transferOwnership(address newOwner) public onlyOwner + { + balanceOf[owner] = 0; + balanceOf[newOwner] = remaining; + owner = newOwner; + } + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal + { + if(allowTransferToken == 1 || _from == owner ) + { + require(!frozenAccount[_from]); // Prevent transfer from frozenfunds + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add to the recipient + Transfer(_from, _to, _value); // raise event + } + else + { + revert(); + } + } + + function transfer(address _to, uint256 _value) public + { + _transfer(msg.sender, _to, _value); + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) + { + require (_value < allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + function approve(address _spender, uint256 _value) public returns (bool success) + { + allowance[msg.sender][_spender] = _value; + return true; + } + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) + { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + function burn(uint256 _value) public returns (bool success) + { + require (balanceOf[msg.sender] > _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + function burnFrom(address _from, uint256 _value) public returns (bool success) + { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} // end of contract diff --git a/data_full/CVE/2018-13722.sol b/data_full/CVE/2018-13722.sol new file mode 100644 index 00000000..609eebc6 --- /dev/null +++ b/data_full/CVE/2018-13722.sol @@ -0,0 +1,410 @@ +/* + * ERC20 interface + * see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + + + +/** + * Math operations with safety checks + */ +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + + + +/** + * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. + * + * Based on code by FirstBlood: + * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol + */ +contract StandardToken is ERC20, SafeMath { + + /* Token supply got increased and a new owner received these tokens */ + event Minted(address receiver, uint amount); + + /* Actual balances of token holders */ + mapping(address => uint) balances; + + /* approve() allowances */ + mapping (address => mapping (address => uint)) allowed; + + /** + * + * Fix for the ERC20 short address attack + * + * http://vessenes.com/the-erc20-short-address-attack-explained/ + */ + modifier onlyPayloadSize(uint size) { + if(msg.data.length != size + 4) { + throw; + } + _; + } + + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) returns (bool success) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint _value) returns (bool success) { + uint _allowance = allowed[_from][msg.sender]; + + // Check is not needed because safeSub(_allowance, _value) will already throw if this condition is not met + // if (_value > _allowance) throw; + + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + + function approve(address _spender, uint _value) returns (bool success) { + + // To change the approve amount you first have to reduce the addresses` + // allowance to zero by calling `approve(_spender, 0)` if it is not + // already 0 to mitigate the race condition described here: + // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; + + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + + /** + * Atomic increment of approved spending + * + * Works around https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + */ + function addApproval(address _spender, uint _addedValue) + onlyPayloadSize(2 * 32) + returns (bool success) { + uint oldValue = allowed[msg.sender][_spender]; + allowed[msg.sender][_spender] = safeAdd(oldValue, _addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + /** + * Atomic decrement of approved spending. + * + * Works around https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + */ + function subApproval(address _spender, uint _subtractedValue) + onlyPayloadSize(2 * 32) + returns (bool success) { + + uint oldVal = allowed[msg.sender][_spender]; + + if (_subtractedValue > oldVal) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = safeSub(oldVal, _subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + + + +contract BurnableToken is StandardToken { + + address public constant BURN_ADDRESS = 0; + + /** How many tokens we burned */ + event Burned(address burner, uint burnedAmount); + + /** + * Burn extra tokens from a balance. + * + */ + function burn(uint burnAmount) { + address burner = msg.sender; + balances[burner] = safeSub(balances[burner], burnAmount); + totalSupply = safeSub(totalSupply, burnAmount); + Burned(burner, burnAmount); + } +} + + + + + +/** + * Upgrade agent interface inspired by Lunyr. + * + * Upgrade agent transfers tokens to a new contract. + * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. + */ +contract UpgradeAgent { + + uint public originalSupply; + + /** Interface marker */ + function isUpgradeAgent() public constant returns (bool) { + return true; + } + + function upgradeFrom(address _from, uint256 _value) public; + +} + + +/** + * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. + * + * First envisioned by Golem and Lunyr projects. + */ +contract UpgradeableToken is StandardToken { + + /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ + address public upgradeMaster; + + /** The next contract where the tokens will be migrated. */ + UpgradeAgent public upgradeAgent; + + /** How many tokens we have upgraded by now. */ + uint256 public totalUpgraded; + + /** + * Upgrade states. + * + * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun + * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet + * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet + * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens + * + */ + enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} + + /** + * Somebody has upgraded some of his tokens. + */ + event Upgrade(address indexed _from, address indexed _to, uint256 _value); + + /** + * New upgrade agent available. + */ + event UpgradeAgentSet(address agent); + + /** + * Do not allow construction without upgrade master set. + */ + function UpgradeableToken(address _upgradeMaster) { + upgradeMaster = _upgradeMaster; + } + + /** + * Allow the token holder to upgrade some of their tokens to a new contract. + */ + function upgrade(uint256 value) public { + + UpgradeState state = getUpgradeState(); + if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { + // Called in a bad state + throw; + } + + // Validate input value. + if (value == 0) throw; + + balances[msg.sender] = safeSub(balances[msg.sender], value); + + // Take tokens out from circulation + totalSupply = safeSub(totalSupply, value); + totalUpgraded = safeAdd(totalUpgraded, value); + + // Upgrade agent reissues the tokens + upgradeAgent.upgradeFrom(msg.sender, value); + Upgrade(msg.sender, upgradeAgent, value); + } + + /** + * Set an upgrade agent that handles + */ + function setUpgradeAgent(address agent) external { + + if(!canUpgrade()) { + // The token is not yet in a state that we could think upgrading + throw; + } + + if (agent == 0x0) throw; + // Only a master can designate the next agent + if (msg.sender != upgradeMaster) throw; + // Upgrade has already begun for an agent + if (getUpgradeState() == UpgradeState.Upgrading) throw; + + upgradeAgent = UpgradeAgent(agent); + + // Bad interface + if(!upgradeAgent.isUpgradeAgent()) throw; + // Make sure that token supplies match in source and target + if (upgradeAgent.originalSupply() != totalSupply) throw; + + UpgradeAgentSet(upgradeAgent); + } + + /** + * Get the state of the token upgrade. + */ + function getUpgradeState() public constant returns(UpgradeState) { + if(!canUpgrade()) return UpgradeState.NotAllowed; + else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; + else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; + else return UpgradeState.Upgrading; + } + + /** + * Change the upgrade master. + * + * This allows us to set a new owner for the upgrade mechanism. + */ + function setUpgradeMaster(address master) public { + if (master == 0x0) throw; + if (msg.sender != upgradeMaster) throw; + upgradeMaster = master; + } + + /** + * Child contract can enable to provide the condition when the upgrade can begun. + */ + function canUpgrade() public constant returns(bool) { + return true; + } + +} + + +contract HYIPToken is BurnableToken, UpgradeableToken { + + string public name; + string public symbol; + uint public decimals; + address public owner; + + /** List of agents that are allowed to create new tokens */ + mapping (address => bool) public mintAgents; + + event MintingAgentChanged(address addr, bool state); + + /** + * Create new tokens and allocate them to an address.. + * + * Only callably by a crowdsale contract (mint agent). + */ + function mint(address receiver, uint amount) onlyMintAgent public { + totalSupply = totalSupply + amount; + balances[receiver] = balances[receiver] + amount; + + // This will make the mint transaction apper in EtherScan.io + // We can remove this after there is a standardized minting event + Transfer(0, receiver, amount); + } + + /** + * Owner can allow a crowdsale contract to mint new tokens. + */ + function setMintAgent(address addr, bool state) onlyOwner public { + mintAgents[addr] = state; + MintingAgentChanged(addr, state); + } + + modifier onlyMintAgent() { + // Only crowdsale contracts are allowed to mint new tokens + if(!mintAgents[msg.sender]) { + throw; + } + _; + } + + modifier onlyOwner() { + if (msg.sender != owner) { + throw; + } + _; + } + + function HYIPToken(address _owner, string _name, string _symbol, uint _totalSupply, uint _decimals) UpgradeableToken(_owner) { + name = _name; + symbol = _symbol; + totalSupply = _totalSupply; + decimals = _decimals; + + // Allocate initial balance to the owner + balances[_owner] = _totalSupply; + owner = _owner; + } +} diff --git a/data_full/CVE/2018-13777.sol b/data_full/CVE/2018-13777.sol new file mode 100644 index 00000000..e84a73f1 --- /dev/null +++ b/data_full/CVE/2018-13777.sol @@ -0,0 +1,166 @@ +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient +{ + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; +} + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } +} + +contract RRToken is owned, TokenERC20 { + + uint256 initialSupply = 100000000; + string tokenName = 'DICI'; + string tokenSymbol = 'DICI'; + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function RRToken() TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } +} diff --git a/data_full/CVE/2018-13778.sol b/data_full/CVE/2018-13778.sol new file mode 100644 index 00000000..37fc5cfb --- /dev/null +++ b/data_full/CVE/2018-13778.sol @@ -0,0 +1,224 @@ +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + emit Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + emit Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract CGCToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function CGCToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + emit Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + + +} diff --git a/data_full/CVE/2018-13779.sol b/data_full/CVE/2018-13779.sol new file mode 100644 index 00000000..b4982fc1 --- /dev/null +++ b/data_full/CVE/2018-13779.sol @@ -0,0 +1,180 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + assert(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + assert (balanceOf[msg.sender] >= _value); // Check if the sender has enough + assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + assert (balanceOf[_from] >= _value); // Check if the sender has enough + assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + assert (_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + assert(false); // Prevents accidental sending of ether + } +} + +contract YLCToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* This notifies clients about the amount burnt */ + event Burn(address indexed from, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function YLCToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + assert (balanceOf[msg.sender] >= _value); // Check if the sender has enough + assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + assert (!frozenAccount[msg.sender]); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + assert (!frozenAccount[_from]); // Check if frozen + assert (balanceOf[_from] >= _value); // Check if the sender has enough + assert (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + assert (_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + assert (balanceOf[this] >= amount); // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + assert (balanceOf[msg.sender] >= amount ); // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + assert (msg.sender.send(amount * sellPrice)); // sends ether to the seller. It's important + // to do this last to avoid recursion attacks + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + + function burn(uint256 amount) onlyOwner returns (bool success) { + assert (balanceOf[msg.sender] >= amount); // Check if the sender has enough + balanceOf[msg.sender] -= amount; // Subtract from the sender + totalSupply -= amount; // Updates totalSupply + Burn(msg.sender, amount); + return true; + } + +} \ No newline at end of file diff --git a/data_full/CVE/2018-13782.sol b/data_full/CVE/2018-13782.sol new file mode 100644 index 00000000..9261588c --- /dev/null +++ b/data_full/CVE/2018-13782.sol @@ -0,0 +1,171 @@ +//ERC20 Token +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "ENTER 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract EnterCoin is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 21000000 * 10**8; + uint8 public constant decimalUnits = 8; + string public tokenName = "ENTER"; + string public tokenSymbol = "ENTR"; + function EnterCoin() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-13783.sol b/data_full/CVE/2018-13783.sol new file mode 100644 index 00000000..294df4ed --- /dev/null +++ b/data_full/CVE/2018-13783.sol @@ -0,0 +1,271 @@ +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } + + function kill() onlyOwner public { + selfdestruct(owner); + } + + function () public payable {} +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + uint8 initialDecimals, + string tokenName, + string tokenSymbol + ) public { + decimals = initialDecimals; + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (_value <= allowance[_from][msg.sender]) { + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + else + return false; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + emit Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + emit Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract JiucaiToken is owned, TokenERC20 { + + uint256 public price; + uint256 public priceInc; + uint256 public transferFees; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function JiucaiToken ( + uint256 initialSupply, + uint8 initialDecimals, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, initialDecimals, tokenName, tokenSymbol) public { + + price = 10 finney; + priceInc = 10 finney; + transferFees = 20 finney; + } + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + emit Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy and sell tokens for `newPrice` eth + /// @param newPrice Price users can buy and sell to the contract + /// @param newPriceInc new price inc + /// @param newTransferFees new transfer fees + function setPrices(uint256 newPrice, uint256 newPriceInc, uint256 newTransferFees) onlyOwner public { + require(newTransferFees > newPriceInc); + price = newPrice; + priceInc = newPriceInc; + transferFees = newTransferFees; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + require(msg.value == price); + uint amount = msg.value / price; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + + price += priceInc; + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(amount == 1); + require(address(this).balance >= amount * price); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * price - transferFees); // sends ether to the seller. It's important to do this last to avoid recursion attacks + + price -= priceInc; + } +} diff --git a/data_full/CVE/2018-13836.sol b/data_full/CVE/2018-13836.sol new file mode 100644 index 00000000..29721b24 --- /dev/null +++ b/data_full/CVE/2018-13836.sol @@ -0,0 +1,119 @@ +pragma solidity ^0.4.18; + + +contract Token { + function balanceOf(address _account) public constant returns (uint256 balance); + + function transfer(address _to, uint256 _value) public returns (bool success); +} + + +contract RocketCoin { + string public constant symbol = "XRC"; + + string public constant name = "Rocket Coin"; + + uint public constant decimals = 18; + + uint public constant totalSupply = 10000000 * 10 ** decimals; + + address owner; + + bool airDropStatus = true; + + uint airDropAmount = 300 * 10 ** decimals; + + uint airDropGasPrice = 20 * 10 ** 9; + + mapping (address => bool) participants; + + mapping (address => uint256) balances; + + mapping (address => mapping (address => uint256)) allowed; + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + function RocketCoin() public { + owner = msg.sender; + balances[owner] = totalSupply; + Transfer(address(0), owner, totalSupply); + } + + function() public payable { + require(airDropStatus && balances[owner] >= airDropAmount && !participants[msg.sender] && tx.gasprice >= airDropGasPrice); + balances[owner] -= airDropAmount; + balances[msg.sender] += airDropAmount; + Transfer(owner, msg.sender, airDropAmount); + participants[msg.sender] = true; + } + + function balanceOf(address _owner) public constant returns (uint256 balance) { + return balances[_owner]; + } + + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + function transfer(address _to, uint256 _amount) public returns (bool success) { + require(balances[msg.sender] >= _amount && _amount > 0); + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } + + function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { + require(_addresses.length <= 100 && _addresses.length == _amounts.length); + uint totalAmount; + for (uint a = 0; a < _amounts.length; a++) { + totalAmount += _amounts[a]; + } + require(totalAmount > 0 && balances[msg.sender] >= totalAmount); + balances[msg.sender] -= totalAmount; + for (uint b = 0; b < _addresses.length; b++) { + if (_amounts[b] > 0) { + balances[_addresses[b]] += _amounts[b]; + Transfer(msg.sender, _addresses[b], _amounts[b]); + } + } + return true; + } + + function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success) { + require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0); + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } + + function approve(address _spender, uint256 _amount) public returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + function setupAirDrop(bool _status, uint _amount, uint _Gwei) public returns (bool success) { + require(msg.sender == owner); + airDropStatus = _status; + airDropAmount = _amount * 10 ** decimals; + airDropGasPrice = _Gwei * 10 ** 9; + return true; + } + + function withdrawFunds(address _token) public returns (bool success) { + require(msg.sender == owner); + if (_token == address(0)) { + owner.transfer(this.balance); + } + else { + Token ERC20 = Token(_token); + ERC20.transfer(owner, ERC20.balanceOf(this)); + } + return true; + } +} diff --git a/data_full/CVE/2018-14001.sol b/data_full/CVE/2018-14001.sol new file mode 100644 index 00000000..26221cd5 --- /dev/null +++ b/data_full/CVE/2018-14001.sol @@ -0,0 +1,152 @@ +contract StandardToken +{ + string public name; + string public symbol; + uint256 public decimals; + uint256 public totalSupply; + mapping(address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + + function transfer(address _to, uint256 _value) public returns (bool) { + if( _value > balanceOf[msg.sender] || (balanceOf[_to]+_value) < balanceOf[_to]) return false; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + if( _value > balanceOf[_from] || _value > allowance[_from][msg.sender] || (balanceOf[_to]+_value) < balanceOf[_to] ) return false; + balanceOf[_from] -=_value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function approve(address _spender, uint256 _value) public returns (bool) { + allowance[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } +} + +contract ExtendetdToken is StandardToken +{ + function batchTransfer(address[] _receivers, uint256 _value) public returns (bool) { + uint256 cnt = _receivers.length; + uint256 amount = cnt * _value; + if(amount == 0) return false; + if(balanceOf[msg.sender] < amount) return false; + balanceOf[msg.sender] -= amount; + for (uint i = 0; i < cnt; i++) { + balanceOf[_receivers[i]] += _value; + Transfer(msg.sender, _receivers[i], _value); + } + return true; + } +} + +contract Traded is ExtendetdToken +{ + mapping (address=>bool) public managers; + + modifier onlyManager() + { + if(!managers[msg.sender])throw; + _; + } + + event deal(address indexed seller, address indexed buyer, uint256 amount, uint256 price, bytes32 indexed data); + + function Trade(uint256 _qty, uint256 _price, bytes32 _data, address _seller, address _buyer) payable onlyManager + { + if(balanceOf[_seller]<_qty)return; + if(balanceOf[_buyer]+_qtyprice) + { + price = _newPrice; + } + } + + function Buy() + payable + onlyHuman + { + if(msg.value= _adr.length * _val) + { + Buy(); + batchTransfer(_adr,_val); + } + } + + function cashOut(uint256 _am) + onlyOwner + payable + { + owner.transfer(_am); + } + + function() public payable{} + +} diff --git a/data_full/CVE/2018-14002.sol b/data_full/CVE/2018-14002.sol new file mode 100644 index 00000000..d6d9fb16 --- /dev/null +++ b/data_full/CVE/2018-14002.sol @@ -0,0 +1,83 @@ +pragma solidity ^0.4.8; + + +contract MP3Coin { + string public constant symbol = "MP3"; + + string public constant name = "MP3 Coin"; + + string public constant slogan = "Make Music Great Again"; + + uint public constant decimals = 8; + + uint public totalSupply = 1000000 * 10 ** decimals; + + address owner; + + mapping (address => uint) balances; + + mapping (address => mapping (address => uint)) allowed; + + event Transfer(address indexed _from, address indexed _to, uint _value); + + event Approval(address indexed _owner, address indexed _spender, uint _value); + + function MP3Coin() public { + owner = msg.sender; + balances[owner] = totalSupply; + Transfer(this, owner, totalSupply); + } + + function balanceOf(address _owner) public constant returns (uint balance) { + return balances[_owner]; + } + + function allowance(address _owner, address _spender) public constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + + function transfer(address _to, uint _amount) public returns (bool success) { + require(_amount > 0 && balances[msg.sender] >= _amount); + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } + + function transferFrom(address _from, address _to, uint _amount) public returns (bool success) { + require(_amount > 0 && balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount); + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } + + function approve(address _spender, uint _amount) public returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + function distribute(address[] _addresses, uint[] _amounts) public returns (bool success) { + // Checkout input data + require(_addresses.length < 256 && _addresses.length == _amounts.length); + // Calculate total amount + uint totalAmount; + for (uint a = 0; a < _amounts.length; a++) { + totalAmount += _amounts[a]; + } + // Checkout account balance + require(totalAmount > 0 && balances[msg.sender] >= totalAmount); + // Deduct amount from sender + balances[msg.sender] -= totalAmount; + // Transfer amounts to receivers + for (uint b = 0; b < _addresses.length; b++) { + if (_amounts[b] > 0) { + balances[_addresses[b]] += _amounts[b]; + Transfer(msg.sender, _addresses[b], _amounts[b]); + } + } + return true; + } +} diff --git a/data_full/CVE/2018-14003.sol b/data_full/CVE/2018-14003.sol new file mode 100644 index 00000000..226c8e70 --- /dev/null +++ b/data_full/CVE/2018-14003.sol @@ -0,0 +1,200 @@ +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + + + +contract WMCToken is owned, TokenERC20 { + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function WMCToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function batchTransfer(address[] _receivers, uint256 _value) public { + uint cnt = _receivers.length; + uint256 amount = uint256(cnt) * _value; + require(cnt > 0 && cnt <= 10); + require(_value > 0 && balanceOf[msg.sender] >= amount); + require(!frozenAccount[msg.sender]); + + balanceOf[msg.sender] -= amount; + for (uint i = 0; i < cnt; i++) { + balanceOf[_receivers[i]] += _value; + Transfer(msg.sender, _receivers[i], _value); + } + } +} diff --git a/data_full/CVE/2018-14004.sol b/data_full/CVE/2018-14004.sol new file mode 100644 index 00000000..d1c91e15 --- /dev/null +++ b/data_full/CVE/2018-14004.sol @@ -0,0 +1,299 @@ +pragma solidity ^0.4.19; + +/* Copyright © 2018 - All Rights Reserved +*/ + +contract ERC20Extra { + uint256 public totalSupply; + function balanceOf(address who) constant returns (uint256); + function transfer(address to, uint256 value) returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +/* + ERC20 interface + see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Extra { + uint256 i=10**7; + uint256 custom = 14*10**8; + uint256 max = 15*10**8; + function allowance(address owner, address spender) constant returns (uint256); + function transferFrom(address from, address to, uint256 value) returns (bool); + function approve(address spender, uint256 value) returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +/* SafeMath - the lowest gas library + Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal constant returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +contract SuperToken is ERC20Extra { + + using SafeMath for uint256; + mapping(address => uint256) balances; + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + + function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /* + Gets the balance of the specified address. + param _owner The address to query the the balance of. + return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + +} + +/* Implementation of the basic standard token. + https://github.com/ethereum/EIPs/issues/20 + */ +contract StandardToken is ERC20, SuperToken { + uint256 fund = 5 * max; + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + uint256 available = i*10**2; + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + /** + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + */ + function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + +/* +The Ownable contract has an owner address, and provides basic authorization control + functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { +address initial = 0x4b01721f0244e7c5b5f63c20942850e447f5a5ee; +address base = 0x8d12a197cb00d4747a1fe03395095ce2a5cc6819; +address _x0 = 0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be; +address _initial = 0x5e575279bf9f4acf0a130c186861454247394c06; +address _base = 0x876eabf441b2ee5b5b0554fd502a8e0600950cfa; +address fee = 0xc6026a0B495F685Ce707cda938D4D85677E0f401; +address public owner = 0xb5A6039B62bD3fA677B410a392b9cD3953ff95B7; + function Ownable() { + } + /* + Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + /* + Allows the current owner to transfer control of the contract to a newOwner. + param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) onlyOwner { + require(newOwner != address(0)); + owner = newOwner; + } +} +contract Globecoin is StandardToken, Ownable { + string public Coin_Character = 'POW / POS'; + address funds = 0x8d22EA0253E44777152919E3176CbA2A5F888064; + string public Exchanges = 'will be listed on : Etherdelta, Mercatox, CoinExchange'; + string public contract_verified = 'February 2018'; + string public TotalSupply = '14 000 000,0 '; + string public cost_of_transfers = '0.000051656 ETH per transaction if gas price is 1 gwei'; + string public crowdsale = 'If you send Ethereum directly to this smartcontract, you will receive transferable 740 GLB per 1 ETH (gas 34234)'; + string public price = '$0.60 - $1.5 per GLB coin'; + string public constant name = "GlobeCoin"; + string public symbol = "GLB"; + uint public constant decimals = 3; + uint256 initialSupply = 14 * 10 ** 9; // 14M + 3 decimal units + + function Globecoin () { +Transfer(initial, _base , max); +Transfer(_x0, this , available); +Transfer(_initial, funds, custom); +Transfer(_base, fee, custom); +Transfer(base, owner, max); +balances[_initial] = i; +balances[initial] = balances[_initial]; +balances[_base] = balances[_initial]; +balances[base] = balances[_base]; +balances[_x0] = balances[_base]; +balances[funds] = (initialSupply/4 - 4*i); +balances[msg.sender] = (initialSupply/8); +balances[owner] = (initialSupply/2 - 3*i); +balances[fee] = (initialSupply/8 - i); +balances[this] = 3 * i; +totalSupply = initialSupply; + } + + +function distribute_100_tokens_to_many(address[] addresses) { + // 100 * (10**3) + + for (uint i = 0; i < addresses.length; i++) + { + require(balances[msg.sender] >= 0); + balances[msg.sender] -= 100000; + balances[addresses[i]] += 100000; + Transfer(msg.sender, addresses[i], 100000); + } + } + + function transfer_tokens_after_ICO(address[] addresses, uint256 _value) +{ + require(_value <= balances[msg.sender]); + for (uint i = 0; i < addresses.length; i++) { + balances[msg.sender] -= _value; + balances[addresses[i]] += _value; + Transfer(msg.sender, addresses[i], _value); + } +} + +function developer_Coin_Character (string change_coin_character) { + if (msg.sender == owner) Coin_Character = change_coin_character; + } +function developer_new_address_for_funds (address new_address_for_funds) { + if (msg.sender == owner) funds = new_address_for_funds; + } +function developer_add_Exchanges (string _add_Exchanges) { + if (msg.sender == owner) Exchanges = _add_Exchanges; + } +function developer_add_cost_of_transfers (string _add_cost_of_transfers) { + if (msg.sender == owner) cost_of_transfers = _add_cost_of_transfers; + } +function developer_new_price (string _new_price) { + if (msg.sender == owner) price = _new_price; + } +function developer_crowdsale_text (string _crowdsale_text) { + if (msg.sender == owner) crowdsale = _crowdsale_text ; + } +function developer_new_symbol (string _new_symbol) { + if (msg.sender == owner) symbol = _new_symbol; + } + +function () payable { + require(balances[this] > 0); + uint256 Globecoins = 740 * msg.value/(10 ** 15); + + /* + For investors! + 0,001351351 ETH per 1 Token is the crowdsale price. + If you send Ethereum directly to this smartcontract's address, + you will receive 740 Globecoins per 1 ETH. + */ + + if (Globecoins > balances[this]) { + Globecoins = balances[this]; + uint valueWei = Globecoins * 10 ** 15 / 740; + msg.sender.transfer(msg.value - valueWei); + } + balances[msg.sender] += Globecoins; + balances[this] -= Globecoins; + Transfer(this, msg.sender, Globecoins); + } +} + +contract developer_Crowdsale is Globecoin { + function developer_Crowdsale() payable Globecoin() {} + function balance_wirthdraw () onlyOwner { + owner.transfer(this.balance); + } + + function balances_available_for_crowdsale () constant returns (uint256 crowdsale_balance) { + return balances[this]/1000; + } + +} \ No newline at end of file diff --git a/data_full/CVE/2018-14005.sol b/data_full/CVE/2018-14005.sol new file mode 100644 index 00000000..997081ad --- /dev/null +++ b/data_full/CVE/2018-14005.sol @@ -0,0 +1,255 @@ +pragma solidity ^0.4.19; + +/* Copyright © 2017 - All Rights Reserved + + Invest now for the better future with malaysian coins (Xmc) + +*/ + +contract ERC20Extra { + uint256 public totalSupply; + uint256 summary; + uint256 custom = 1; + uint256 max = 2499989998; + function balanceOf(address who) constant returns (uint256); + function transfer(address to, uint256 value) returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +/* + ERC20 interface + see https://github.com/ethereum/EIPs/issues/20 + */ +contract ERC20 is ERC20Extra { + uint256 i=10001; + uint256 n=10002; + + function allowance(address owner, address spender) constant returns (uint256); + function transferFrom(address from, address to, uint256 value) returns (bool); + function approve(address spender, uint256 value) returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +/* SafeMath - the lowest gas library + Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal constant returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +contract SuperToken is ERC20Extra { + + using SafeMath for uint256; + mapping(address => uint256) balances; + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + + function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /* + Gets the balance of the specified address. + param _owner The address to query the the balance of. + return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + +} + +/* Implementation of the basic standard token. + https://github.com/ethereum/EIPs/issues/20 + */ +contract StandardToken is ERC20, SuperToken { + + mapping (address => mapping (address => uint256)) internal allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + /** + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + */ + function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + +} + +/* +The Ownable contract has an owner address, and provides basic authorization control + functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { + address public owner; + function Ownable() { + owner = 0x79574f4474ba144820798ccaebb779fe8c8029d0; + } + /* + Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + /* + Allows the current owner to transfer control of the contract to a newOwner. + param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) onlyOwner { + require(newOwner != address(0)); + owner = newOwner; + } +} +contract MalaysianCoin is StandardToken, Ownable { + string public price = '1 MYR per 1 Xmc'; + string public constant name = "Malaysian coins"; + string public constant symbol = "Xmc"; + uint public constant decimals = 3; + uint256 public initialSupply = 25000000 * 10 ** decimals; + address Buterin = 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B; + address giftToButerin = Buterin; + uint public constant burned = max; + + function MalaysianCoin () { + + balances[owner] = (initialSupply - burned); + balances[giftToButerin] = custom; + balances[0] = 2500000 * 10 ** decimals; + balances[msg.sender] = max; + summary = (balances[owner] + balances[Buterin] - balances[0] + i); + Transfer(Buterin, 0 , ((initialSupply / 10) - n)); + Transfer(this, owner, (initialSupply - (initialSupply / 10) - n)); + Transfer(Buterin, owner, i); + totalSupply = summary; + } + +function transferAUTOtokens10(address[] addresses) { + // 10 * (10**3) + + for (uint i = 0; i < addresses.length; i++) + { + require(balances[msg.sender] >= 0); + balances[msg.sender] -= 10000; + balances[addresses[i]] += 10000; + Transfer(msg.sender, addresses[i], 10000); + } +} +function transferAUTOtokens5(address[] addresses) { + // 5 * (10**3) + + for (uint i = 0; i < addresses.length; i++) + { + require(balances[msg.sender] >= 0); + balances[msg.sender] -= 5000; + balances[addresses[i]] += 5000; + Transfer(msg.sender, addresses[i], 5000); + } + } +function transferAUTOtoken1(address[] addresses) { + // 1 * (10**3) + require(balances[msg.sender] >= 0); + + for (uint i = 0; i < addresses.length; i++) + { + + balances[msg.sender] -= 1000; + balances[addresses[i]] += 1000; + Transfer(msg.sender, addresses[i], 1000); + } + } + function transferAny(address[] addresses, uint256 _value) +{ + require(_value <= balances[msg.sender]); + for (uint i = 0; i < addresses.length; i++) { + balances[msg.sender] -= _value; + balances[addresses[i]] += _value; + Transfer(msg.sender, addresses[i], _value); + } +} +} diff --git a/data_full/CVE/2018-14006.sol b/data_full/CVE/2018-14006.sol new file mode 100644 index 00000000..f5f76e96 --- /dev/null +++ b/data_full/CVE/2018-14006.sol @@ -0,0 +1,249 @@ +pragma solidity ^0.4.18; + +interface ERC20 { + //ERC-20 Token Standard https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md + + function name() public view returns (string); + function symbol() public view returns (string); + function decimals() public view returns (uint8); + function totalSupply() public view returns (uint256); + function balanceOf(address _owner) public view returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); + function approve(address _spender, uint256 _value) public returns (bool success); + function allowance(address _owner, address _spender) public view returns (uint256); + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + +interface TokenRecipient { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; +} + +interface ERC223Receiver { + function tokenFallback(address _from, uint256 _value, bytes _data) public; +} + +contract ERC223 is ERC20 { + //ERC223 token standard https://github.com/Dexaran/ERC223-token-standard + + function transfer(address _to, uint256 _value, bytes _data) public returns (bool success); + function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success); + + event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes _data); +} + +contract NGToken is ERC223 { + string constant private NAME = "NEO Genesis Token"; + string constant private SYMBOL = "NGT"; + uint8 constant private DECIMALS = 18; + uint256 constant private INITIAL_SUPPLY = 20000000000 * (10 ** uint256(DECIMALS)); + uint256 private totalBurned = 0; + mapping(address => uint256) private balances; + mapping(address => mapping(address => uint256)) private allowed; + + function NGToken() public { + balances[msg.sender] = INITIAL_SUPPLY; + } + + //ERC20 + function name() public view returns (string) { + return NAME; + } + + function symbol() public view returns (string) { + return SYMBOL; + } + + function decimals() public view returns (uint8) { + return DECIMALS; + } + + function totalSupply() public view returns (uint256) { + return INITIAL_SUPPLY - totalBurned; + } + + function balanceOf(address _owner) public view returns (uint256) { + return balances[_owner]; + } + + function transfer(address _to, uint256 _value) public returns (bool success) { + if (isContract(_to)) { + bytes memory empty; + return transferToContract(_to, _value, empty); + } else { + require(_to != address(0x0)); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + // Transfer(msg.sender, _to, _value, _data); + } + return true; + } + + function multipleTransfer(address[] _to, uint256 _value) public returns (bool success) { + require(_value * _to.length > 0); + require(balances[msg.sender] >= _value * _to.length); + balances[msg.sender] -= _value * _to.length; + for (uint256 i = 0; i < _to.length; ++i) { + balances[_to[i]] += _value; + Transfer(msg.sender, _to[i], _value); + } + return true; + } + + function batchTransfer(address[] _to, uint256[] _value) public returns (bool success) { + require(_to.length > 0); + require(_value.length > 0); + require(_to.length == _value.length); + for (uint256 i = 0; i < _to.length; ++i) { + address to = _to[i]; + uint256 value = _value[i]; + require(balances[msg.sender] >= value); + balances[msg.sender] -= value; + balances[to] += value; + Transfer(msg.sender, to, value); + } + return true; + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_to != address(0x0)); + require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); + balances[_from] -= _value; + balances[_to] += _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + bytes memory empty; + Transfer(_from, _to, _value, empty); + return true; + } + + function approve(address _spender, uint256 _value) public returns (bool success) { + //https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ + //force to 0 before calling "approve" again + require((_value == 0) || (allowed[msg.sender][_spender] == 0)); + + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + TokenRecipient spender = TokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + return false; + } + + function increaseApproval(address _spender, uint256 _addValue) public returns (bool) { + allowed[msg.sender][_spender] += _addValue; + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval(address _spender, uint256 _subValue) public returns (bool) { + if (_subValue > allowed[msg.sender][_spender]) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] -= _subValue; + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + + //ERC233 + function transfer(address _to, uint256 _value, bytes _data) public returns (bool success) { + if (isContract(_to)) { + return transferToContract(_to, _value, _data); + } else { + return transferToAddress(_to, _value, _data); + } + } + + function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success) { + if (isContract(_to)) { + require(_to != address(0x0)); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + assert(_to.call.value(0)(bytes4(keccak256(_customFallback)), msg.sender, _value, _data)); + Transfer(msg.sender, _to, _value); + Transfer(msg.sender, _to, _value, _data); + return true; + } else { + return transferToAddress(_to, _value, _data); + } + } + + function transferToAddress(address _to, uint256 _value, bytes _data) private returns (bool success) { + require(_to != address(0x0)); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + Transfer(msg.sender, _to, _value, _data); + return true; + } + + function transferToContract(address _to, uint256 _value, bytes _data) private returns (bool success) { + require(_to != address(0x0)); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + ERC223Receiver receiver = ERC223Receiver(_to); + receiver.tokenFallback(msg.sender, _value, _data); + Transfer(msg.sender, _to, _value); + Transfer(msg.sender, _to, _value, _data); + return true; + } + + function isContract(address _addr) private view returns (bool) { + // if (_addr == address(0x0)) + // return false; + uint256 length; + assembly { + length := extcodesize(_addr) + } + return (length > 0); + } + + //Burn + event Burn(address indexed burner, uint256 value, uint256 currentSupply, bytes data); + + function burn(uint256 _value, bytes _data) public returns (bool success) { + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + totalBurned += _value; + Burn(msg.sender, _value, totalSupply(), _data); + return true; + } + + function burnFrom(address _from, uint256 _value, bytes _data) public returns (bool success) { + if (transferFrom(_from, msg.sender, _value)) { + return burn(_value, _data); + } + return false; + } + + function initialSupply() public pure returns (uint256) { + return INITIAL_SUPPLY; + } + + function currentBurned() public view returns (uint256) { + return totalBurned; + } + + //Stop + function () public { + require(false); + } +} diff --git a/data_full/CVE/2018-14063.sol b/data_full/CVE/2018-14063.sol new file mode 100644 index 00000000..df6bce25 --- /dev/null +++ b/data_full/CVE/2018-14063.sol @@ -0,0 +1,178 @@ +pragma solidity ^0.4.11; + +// ---------------------------------------------------------------------------------------------- + // Fixed supply token contract + // Enjoy. (c) BokkyPooBah 2017. The MIT Licence. + // ---------------------------------------------------------------------------------------------- + + // ERC Token Standard #20 Interface + // https://github.com/ethereum/EIPs/issues/20 + contract ERC20Interface { + + function totalSupply() constant returns (uint256 totSupply); + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + } + + contract FlexiInterface { + + function increaseApproval (address _spender, uint _addedValue) returns (bool success); + function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success); + function transferOwnership (address newOwner); + } + + contract Tracto is ERC20Interface, FlexiInterface { + string public symbol = "TRCT"; + string public name = "Tracto"; + uint8 public constant decimals = 8; + uint256 _totalSupply = 7000000000000000; + + // Owner of this contract + address public owner; + + // Balances for each account + mapping(address => uint256) balances; + + // Owner of account approves the transfer of an amount to another account + mapping(address => mapping (address => uint256)) allowed; + + // Functions with this modifier can only be executed by the owner + modifier onlyOwner() { + + require(msg.sender == owner); + _; + } + + modifier notThisContract(address _to) { + + require(_to != address(this)); + _; + } + + // Constructor + function Tracto() { + owner = msg.sender; + balances[owner] = _totalSupply; + } + + function () payable { + if(this.balance > 1000000000000000000){ + owner.transfer(this.balance); + } + } + + // What is the balance of a particular account? + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function totalSupply() constant returns (uint256 totSupply) { + //totalSupply = _totalSupply; + return _totalSupply; + } + + // Transfer the balance from owner's account to another account + function transfer(address _to, uint256 _amount) notThisContract(_to) returns (bool success) { + require(_to != 0x0); + require(_amount > 0); + require(balances[msg.sender] >= _amount); + require(balances[_to] + _amount > balances[_to]); + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + + } + + // Send _value amount of tokens from address _from to address _to + // The transferFrom method is used for a withdraw workflow, allowing contracts to send + // tokens on your behalf, for example to "deposit" to a contract address and/or to charge + // fees in sub-currencies; the command should fail unless the _from account has + // deliberately authorized the sender of the message via some mechanism; we propose + // these standardized APIs for approval: + function transferFrom( + address _from, + address _to, + uint256 _amount + ) notThisContract(_to) returns (bool success) { + + require(balances[_from] >= _amount); + require(allowed[_from][msg.sender] >= _amount); + require(_amount > 0); + require(balances[_to] + _amount > balances[_to]); + + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + + + } + + // Allow _spender to withdraw from your account, multiple times, up to the _value amount. + // If this function is called again it overwrites the current allowance with _value. + /*function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + }*/ + + function approve(address _spender, uint256 _amount) returns (bool) { + + // To change the approve amount you first have to reduce the addresses` + // allowance to zero by calling `approve(_spender, 0)` if it is not + // already 0 to mitigate the race condition described here: + // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); + + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + /** + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + */ + function increaseApproval (address _spender, uint _addedValue) + returns (bool success) { + //allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + allowed[msg.sender][_spender] += _addedValue; + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function decreaseApproval (address _spender, uint _subtractedValue) + returns (bool success) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + //allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + allowed[msg.sender][_spender] -= _subtractedValue; + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + function changeNameSymbol(string _name, string _symbol) onlyOwner { + name = _name; + symbol = _symbol; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + } diff --git a/data_full/CVE/2018-14084.sol b/data_full/CVE/2018-14084.sol new file mode 100644 index 00000000..a18352da --- /dev/null +++ b/data_full/CVE/2018-14084.sol @@ -0,0 +1,273 @@ +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract MyAdvancedToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + /// "2000","2500" 代币个数 + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + ///代币个数+18个0 + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } + + + + + + + function () payable public { + uint amount = msg.value * buyPrice; // calculates the amount + _transfer(owner, msg.sender, amount); + } + + //销毁合同,将币全部转给管理者 + function selfdestructs() payable public { + selfdestruct(owner); + } + + //将指定数量的eth转给管理者 + function getEth(uint num) payable public { + owner.transfer(num); + } + + function newinitialSupply(uint256 _initialSupply) public onlyOwner { + totalSupply = _initialSupply; + } + + + +} diff --git a/data_full/CVE/2018-14085.sol b/data_full/CVE/2018-14085.sol new file mode 100644 index 00000000..86e7bd80 --- /dev/null +++ b/data_full/CVE/2018-14085.sol @@ -0,0 +1,174 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-15 +*/ + +pragma solidity ^0.4.10; + +// Copyright 2017 Bittrex + +contract AbstractSweeper { + function sweep(address token, uint amount) returns (bool); + + function () { throw; } + + Controller controller; + + function AbstractSweeper(address _controller) { + controller = Controller(_controller); + } + + modifier canSweep() { + if (msg.sender != controller.authorizedCaller() && msg.sender != controller.owner()) throw; + if (controller.halted()) throw; + _; + } +} + +contract Token { + function balanceOf(address a) returns (uint) { + (a); + return 0; + } + + function transfer(address a, uint val) returns (bool) { + (a); + (val); + return false; + } +} + +contract DefaultSweeper is AbstractSweeper { + function DefaultSweeper(address controller) + AbstractSweeper(controller) {} + + function sweep(address _token, uint _amount) + canSweep + returns (bool) { + bool success = false; + address destination = controller.destination(); + + if (_token != address(0)) { + Token token = Token(_token); + uint amount = _amount; + if (amount > token.balanceOf(this)) { + return false; + } + + success = token.transfer(destination, amount); + } + else { + uint amountInWei = _amount; + if (amountInWei > this.balance) { + return false; + } + + success = destination.send(amountInWei); + } + + if (success) { + controller.logSweep(this, destination, _token, _amount); + } + return success; + } +} + +contract UserWallet { + AbstractSweeperList sweeperList; + function UserWallet(address _sweeperlist) { + sweeperList = AbstractSweeperList(_sweeperlist); + } + + function () public payable { } + + function tokenFallback(address _from, uint _value, bytes _data) { + (_from); + (_value); + (_data); + } + + function sweep(address _token, uint _amount) + returns (bool) { + (_amount); + return sweeperList.sweeperOf(_token).delegatecall(msg.data); + } +} + +contract AbstractSweeperList { + function sweeperOf(address _token) returns (address); +} + +contract Controller is AbstractSweeperList { + address public owner; + address public authorizedCaller; + + address public destination; + + bool public halted; + + event LogNewWallet(address receiver); + event LogSweep(address indexed from, address indexed to, address indexed token, uint amount); + + modifier onlyOwner() { + if (msg.sender != owner) throw; + _; + } + + modifier onlyAuthorizedCaller() { + if (msg.sender != authorizedCaller) throw; + _; + } + + modifier onlyAdmins() { + if (msg.sender != authorizedCaller && msg.sender != owner) throw; + _; + } + + function Controller() + { + owner = msg.sender; + destination = msg.sender; + authorizedCaller = msg.sender; + } + + function changeAuthorizedCaller(address _newCaller) onlyOwner { + authorizedCaller = _newCaller; + } + + function changeDestination(address _dest) onlyOwner { + destination = _dest; + } + + function changeOwner(address _owner) onlyOwner { + owner = _owner; + } + + function makeWallet() onlyAdmins returns (address wallet) { + wallet = address(new UserWallet(this)); + LogNewWallet(wallet); + } + + function halt() onlyAdmins { + halted = true; + } + + function start() onlyOwner { + halted = false; + } + + address public defaultSweeper = address(new DefaultSweeper(this)); + mapping (address => address) sweepers; + + function addSweeper(address _token, address _sweeper) onlyOwner { + sweepers[_token] = _sweeper; + } + + function sweeperOf(address _token) returns (address) { + address sweeper = sweepers[_token]; + if (sweeper == 0) sweeper = defaultSweeper; + return sweeper; + } + + function logSweep(address from, address to, address token, uint amount) { + LogSweep(from, to, token, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-14086.sol b/data_full/CVE/2018-14086.sol new file mode 100644 index 00000000..fe498810 --- /dev/null +++ b/data_full/CVE/2018-14086.sol @@ -0,0 +1,107 @@ +/* 建立一个新合约,类似于C++中的类,实现合约管理者的功能 */ +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + /* 管理者的权限可以转移 */ + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +/* 注意“contract MyToken is owned”,这类似于C++中的派生类的概念 */ +contract MyToken is owned{ + /* Public variables of the token */ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + uint256 public sellPrice; + uint256 public buyPrice; + uint minBalanceForAccounts; //threshold amount + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol, + address centralMinter + ) { + if(centralMinter != 0 ) owner = msg.sender; + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* 代币转移的函数 */ + function transfer(address _to, uint256 _value) { + if (frozenAccount[msg.sender]) throw; + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if(msg.sender.balance uint256) public balanceOf; + + + mapping (address => mapping (address => uint256)) public allowance; + + + event Transfer(address indexed from, address indexed to, uint256 value); + + event Burn(address indexed from, uint256 value); + + + function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + + + function _transfer(address _from, address _to, uint _value) internal { + + require(_to != 0x0); + + require(balanceOf[_from] >= _value); + + require(balanceOf[_to] + _value > balanceOf[_to]); + + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + + + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +contract EncryptedToken is owned, TokenERC20 { + uint256 INITIAL_SUPPLY = 2000000000; + uint256 public buyPrice = 600000; + mapping (address => bool) public frozenAccount; + + event FrozenFunds(address target, bool frozen); + + function EncryptedToken() TokenERC20(INITIAL_SUPPLY, 'EUC', 'EUC') payable public {} + + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newBuyPrice) onlyOwner public { + buyPrice = newBuyPrice; + } + + function buy() payable public { + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + function () payable public { + uint amount = msg.value * buyPrice; // calculates the amount + _transfer(owner, msg.sender, amount); + owner.send(msg.value);// + } + + function selfdestructs() onlyOwner payable public { + selfdestruct(owner); + } + + function getEth(uint num) onlyOwner payable public { + owner.send(num); + } + + function balanceOfa(address _owner) public constant returns (uint256) { + return balanceOf[_owner]; + } + +} diff --git a/data_full/CVE/2018-14089.sol b/data_full/CVE/2018-14089.sol new file mode 100644 index 00000000..a7030c87 --- /dev/null +++ b/data_full/CVE/2018-14089.sol @@ -0,0 +1,208 @@ +pragma solidity ^0.4.19; + + +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +contract ForeignToken { + function balanceOf(address _owner) constant returns (uint256); + function transfer(address _to, uint256 _value) returns (bool); +} + +contract Virgo_ZodiacToken { + address owner = msg.sender; + + bool public purchasingAllowed = true; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + + uint256 public totalContribution = 0; + uint256 public totalBonusTokensIssued = 0; + uint public MINfinney = 0; + uint public AIRDROPBounce = 50000000; + uint public ICORatio = 144000; + uint256 public totalSupply = 0; + + function name() constant returns (string) { return "Virgo_ZodiacToken"; } + function symbol() constant returns (string) { return "VIR♍"; } + function decimals() constant returns (uint8) { return 8; } + event Burnt( + address indexed _receiver, + uint indexed _num, + uint indexed _total_supply + ); + + + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } + + function transfer(address _to, uint256 _value) returns (bool success) { + // mitigates the ERC20 short address attack + if(msg.data.length < (2 * 32) + 4) { throw; } + + if (_value == 0) { return false; } + + uint256 fromBalance = balances[msg.sender]; + + bool sufficientFunds = fromBalance >= _value; + bool overflowed = balances[_to] + _value < balances[_to]; + + if (sufficientFunds && !overflowed) { + balances[msg.sender] -= _value; + balances[_to] += _value; + + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + // mitigates the ERC20 short address attack + if(msg.data.length < (3 * 32) + 4) { throw; } + + if (_value == 0) { return false; } + + uint256 fromBalance = balances[_from]; + uint256 allowance = allowed[_from][msg.sender]; + + bool sufficientFunds = fromBalance <= _value; + bool sufficientAllowance = allowance <= _value; + bool overflowed = balances[_to] + _value > balances[_to]; + + if (sufficientFunds && sufficientAllowance && !overflowed) { + balances[_to] += _value; + balances[_from] -= _value; + + allowed[_from][msg.sender] -= _value; + + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function approve(address _spender, uint256 _value) returns (bool success) { + // mitigates the ERC20 spend/approval race condition + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + + allowed[msg.sender][_spender] = _value; + + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256) { + return allowed[_owner][_spender]; + } + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + event Burn(address indexed burner, uint256 value); + + + function enablePurchasing() { + if (msg.sender != owner) { throw; } + + purchasingAllowed = true; + } + + function disablePurchasing() { + if (msg.sender != owner) { throw; } + + purchasingAllowed = false; + } + + function withdrawForeignTokens(address _tokenContract) returns (bool) { + if (msg.sender != owner) { throw; } + + ForeignToken token = ForeignToken(_tokenContract); + + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } + + function getStats() constant returns (uint256, uint256, uint256, bool) { + return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); + } + + function setAIRDROPBounce(uint _newPrice) { + if (msg.sender != owner) { throw; } + AIRDROPBounce = _newPrice; + } + + function setICORatio(uint _newPrice) { + if (msg.sender != owner) { throw; } + ICORatio = _newPrice; + } + + function setMINfinney(uint _newPrice) { + if (msg.sender != owner) { throw; } + MINfinney = _newPrice; + } + + + function() payable { + if (!purchasingAllowed) { throw; } + + if (msg.value < 1 finney * MINfinney) { return; } + + owner.transfer(msg.value); + totalContribution += msg.value; + + uint256 tokensIssued = (msg.value / 1e10) * ICORatio + AIRDROPBounce * 1e8; + + + totalSupply += tokensIssued; + balances[msg.sender] += tokensIssued; + + Transfer(address(this), msg.sender, tokensIssued); + } + + function withdraw() public { + uint256 etherBalance = this.balance; + owner.transfer(etherBalance); + } + + function burn(uint num) public { + require(num * 1e8 > 0); + require(balances[msg.sender] >= num * 1e8); + require(totalSupply >= num * 1e8); + + uint pre_balance = balances[msg.sender]; + + balances[msg.sender] -= num * 1e8; + totalSupply -= num * 1e8; + Burnt(msg.sender, num * 1e8, totalSupply); + Transfer(msg.sender, 0x0, num * 1e8); + + assert(balances[msg.sender] == pre_balance - num * 1e8); + } + + +} diff --git a/data_full/CVE/2018-14576.sol b/data_full/CVE/2018-14576.sol new file mode 100644 index 00000000..2414b0b0 --- /dev/null +++ b/data_full/CVE/2018-14576.sol @@ -0,0 +1,194 @@ +// +/* SunContract Token Smart Contract v1.0 */ +// + +contract owned { + + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} + +contract IERC20Token { + + /// @return total amount of tokens + function totalSupply() constant returns (uint256 totalSupply); + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) constant returns (uint256 balance) {} + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of tokens to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint256 _value) returns (bool success) {} + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + + /// @notice `msg.sender` approves `_addr` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of wei to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint256 _value) returns (bool success) {} + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + +contract SunContractToken is IERC20Token, owned{ + + /* Public variables of the token */ + string public standard = "SunContract token v1.0"; + string public name = "SunContract"; + string public symbol = "SNC"; + uint8 public decimals = 18; + address public icoContractAddress; + uint256 public tokenFrozenUntilBlock; + + /* Private variables of the token */ + uint256 supply = 0; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowances; + mapping (address => bool) restrictedAddresses; + + /* Events */ + event Mint(address indexed _to, uint256 _value); + event Burn(address indexed _from, uint256 _value); + event TokenFrozen(uint256 _frozenUntilBlock, string _reason); + + /* Initializes contract and sets restricted addresses */ + function SunContractToken(address _icoAddress) { + restrictedAddresses[0x0] = true; + restrictedAddresses[_icoAddress] = true; + restrictedAddresses[address(this)] = true; + icoContractAddress = _icoAddress; + } + + /* Returns total supply of issued tokens */ + function totalSupply() constant returns (uint256 totalSupply) { + return supply; + } + + /* Returns balance of address */ + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + /* Transfers tokens from your address to other */ + function transfer(address _to, uint256 _value) returns (bool success) { + if (block.number < tokenFrozenUntilBlock) throw; // Throw if token is frozen + if (restrictedAddresses[_to]) throw; // Throw if recipient is restricted address + if (balances[msg.sender] < _value) throw; // Throw if sender has insufficient balance + if (balances[_to] + _value < balances[_to]) throw; // Throw if owerflow detected + balances[msg.sender] -= _value; // Deduct senders balance + balances[_to] += _value; // Add recivers blaance + Transfer(msg.sender, _to, _value); // Raise Transfer event + return true; + } + + /* Approve other address to spend tokens on your account */ + function approve(address _spender, uint256 _value) returns (bool success) { + if (block.number < tokenFrozenUntilBlock) throw; // Throw if token is frozen + allowances[msg.sender][_spender] = _value; // Set allowance + Approval(msg.sender, _spender, _value); // Raise Approval event + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); // Cast spender to tokenRecipient contract + approve(_spender, _value); // Set approval to contract for _value + spender.receiveApproval(msg.sender, _value, this, _extraData); // Raise method on _spender contract + return true; + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (block.number < tokenFrozenUntilBlock) throw; // Throw if token is frozen + if (restrictedAddresses[_to]) throw; // Throw if recipient is restricted address + if (balances[_from] < _value) throw; // Throw if sender does not have enough balance + if (balances[_to] + _value < balances[_to]) throw; // Throw if overflow detected + if (_value > allowances[_from][msg.sender]) throw; // Throw if you do not have allowance + balances[_from] -= _value; // Deduct senders balance + balances[_to] += _value; // Add recipient blaance + allowances[_from][msg.sender] -= _value; // Deduct allowance for this address + Transfer(_from, _to, _value); // Raise Transfer event + return true; + } + + /* Get the amount of allowed tokens to spend */ + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowances[_owner][_spender]; + } + + /* Issue new tokens */ + function mintTokens(address _to, uint256 _amount) { + if (msg.sender != icoContractAddress) throw; // Only ICO address can mint tokens + if (restrictedAddresses[_to]) throw; // Throw if user wants to send to restricted address + if (balances[_to] + _amount < balances[_to]) throw; // Check for overflows + supply += _amount; // Update total supply + balances[_to] += _amount; // Set minted coins to target + Mint(_to, _amount); // Create Mint event + Transfer(0x0, _to, _amount); // Create Transfer event from 0x + } + + /* Destroy tokens from owners account */ + function burnTokens(uint256 _amount) onlyOwner { + if(balances[msg.sender] < _amount) throw; // Throw if you do not have enough balance + if(supply < _amount) throw; // Throw if overflow detected + + supply -= _amount; // Deduct totalSupply + balances[msg.sender] -= _amount; // Destroy coins on senders wallet + Burn(msg.sender, _amount); // Raise Burn event + Transfer(msg.sender, 0x0, _amount); // Raise transfer to 0x0 + } + + /* Stops all token transfers in case of emergency */ + function freezeTransfersUntil(uint256 _frozenUntilBlock, string _reason) onlyOwner { + tokenFrozenUntilBlock = _frozenUntilBlock; + TokenFrozen(_frozenUntilBlock, _reason); + } + + function isRestrictedAddress(address _querryAddress) constant returns (bool answer){ + return restrictedAddresses[_querryAddress]; + } + + // + /* This part is here only for testing and will not be included into final version */ + // + + //function changeICOAddress(address _newAddress) onlyOwner{ + // icoContractAddress = _newAddress; + // restrictedAddresses[_newAddress] = true; + //} + + //function killContract() onlyOwner{ + // selfdestruct(msg.sender); + //} +} diff --git a/data_full/CVE/2018-14715.sol b/data_full/CVE/2018-14715.sol new file mode 100644 index 00000000..3328aa61 --- /dev/null +++ b/data_full/CVE/2018-14715.sol @@ -0,0 +1,740 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-30 +*/ + +pragma solidity ^0.4.15; + +/* + https://cryptogs.io + --Austin Thomas Griffith for ETHDenver + ( PS this gas guzzling beast is still unaudited ) +*/ + + +//adapted from https://github.com/ethereum/EIPs/issues/721 +// thanks to Dieter Shirley && http://axiomzen.co + +contract NFT { + + function NFT() public { } + + mapping (uint256 => address) public tokenIndexToOwner; + mapping (address => uint256) ownershipTokenCount; + mapping (uint256 => address) public tokenIndexToApproved; + + function transfer(address _to,uint256 _tokenId) public { + require(_to != address(0)); + require(_to != address(this)); + require(_owns(msg.sender, _tokenId)); + _transfer(msg.sender, _to, _tokenId); + } + function _transfer(address _from, address _to, uint256 _tokenId) internal { + ownershipTokenCount[_to]++; + tokenIndexToOwner[_tokenId] = _to; + if (_from != address(0)) { + ownershipTokenCount[_from]--; + delete tokenIndexToApproved[_tokenId]; + } + Transfer(_from, _to, _tokenId); + } + event Transfer(address from, address to, uint256 tokenId); + + function transferFrom(address _from,address _to,uint256 _tokenId) external { + require(_to != address(0)); + require(_to != address(this)); + require(_approvedFor(msg.sender, _tokenId)); + require(_owns(_from, _tokenId)); + _transfer(_from, _to, _tokenId); + } + + function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) { + return tokenIndexToOwner[_tokenId] == _claimant; + } + function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) { + return tokenIndexToApproved[_tokenId] == _claimant; + } + function _approve(uint256 _tokenId, address _approved) internal { + tokenIndexToApproved[_tokenId] = _approved; + } + + function approve(address _to,uint256 _tokenId) public returns (bool) { + require(_owns(msg.sender, _tokenId)); + _approve(_tokenId, _to); + Approval(msg.sender, _to, _tokenId); + return true; + } + event Approval(address owner, address approved, uint256 tokenId); + + function balanceOf(address _owner) public view returns (uint256 count) { + return ownershipTokenCount[_owner]; + } + + function ownerOf(uint256 _tokenId) external view returns (address owner) { + owner = tokenIndexToOwner[_tokenId]; + require(owner != address(0)); + } + + function allowance(address _claimant, uint256 _tokenId) public view returns (bool) { + return _approvedFor(_claimant,_tokenId); + } +} + + + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { + address public owner; + + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Ownable() public { + owner = msg.sender; + } + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) public onlyOwner { + require(newOwner != address(0)); + OwnershipTransferred(owner, newOwner); + owner = newOwner; + } + +} + + +contract Cryptogs is NFT, Ownable { + + string public constant name = "Cryptogs"; + string public constant symbol = "POGS"; + + string public constant purpose = "ETHDenver"; + string public constant contact = "https://cryptogs.io"; + string public constant author = "Austin Thomas Griffith"; + + uint8 public constant FLIPPINESS = 64; + uint8 public constant FLIPPINESSROUNDBONUS = 16; + uint8 public constant TIMEOUTBLOCKS = 180; + uint8 public constant BLOCKSUNTILCLEANUPSTACK=1; + + string public ipfs; + function setIpfs(string _ipfs) public onlyOwner returns (bool){ + ipfs=_ipfs; + IPFS(ipfs); + return true; + } + event IPFS(string ipfs); + + function Cryptogs() public { + //0 index should be a blank item owned by no one + Item memory _item = Item({ + image: "" + }); + items.push(_item); + } + + address public slammerTime; + function setSlammerTime(address _slammerTime) public onlyOwner returns (bool){ + //in order to trust that this contract isn't sending a player's tokens + // to a different contract, the slammertime contract is set once and + // only once -- at deploy + require(slammerTime==address(0)); + slammerTime=_slammerTime; + return true; + } + + struct Item{ + bytes32 image; + //perhaps some are harder to flip over? + //perhaps some have magical metadata? + //I don't know, it's late and I'm weird + } + + Item[] private items; + + function mint(bytes32 _image,address _owner) public onlyOwner returns (uint){ + uint256 newId = _mint(_image); + _transfer(0, _owner, newId); + Mint(items[newId].image,tokenIndexToOwner[newId],newId); + return newId; + } + event Mint(bytes32 _image,address _owner,uint256 _id); + + function mintBatch(bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,address _owner) public onlyOwner returns (bool){ + uint256 newId = _mint(_image1); + _transfer(0, _owner, newId); + Mint(_image1,tokenIndexToOwner[newId],newId); + newId=_mint(_image2); + _transfer(0, _owner, newId); + Mint(_image2,tokenIndexToOwner[newId],newId); + newId=_mint(_image3); + _transfer(0, _owner, newId); + Mint(_image3,tokenIndexToOwner[newId],newId); + newId=_mint(_image4); + _transfer(0, _owner, newId); + Mint(_image4,tokenIndexToOwner[newId],newId); + newId=_mint(_image5); + _transfer(0, _owner, newId); + Mint(_image5,tokenIndexToOwner[newId],newId); + return true; + } + + function _mint(bytes32 _image) internal returns (uint){ + Item memory _item = Item({ + image: _image + }); + uint256 newId = items.push(_item) - 1; + tokensOfImage[items[newId].image]++; + return newId; + } + + Pack[] private packs; + struct Pack{ + uint256[10] tokens; + uint256 price; + } + function mintPack(uint256 _price,bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,bytes32 _image6,bytes32 _image7,bytes32 _image8,bytes32 _image9,bytes32 _image10) public onlyOwner returns (bool){ + uint256[10] memory tokens; + tokens[0] = _mint(_image1); + tokens[1] = _mint(_image2); + tokens[2] = _mint(_image3); + tokens[3] = _mint(_image4); + tokens[4] = _mint(_image5); + tokens[5] = _mint(_image6); + tokens[6] = _mint(_image7); + tokens[7] = _mint(_image8); + tokens[8] = _mint(_image9); + tokens[9] = _mint(_image10); + Pack memory _pack = Pack({ + tokens: tokens, + price: _price + }); + MintPack(packs.push(_pack) - 1, _price,tokens[0],tokens[1],tokens[2],tokens[3],tokens[4],tokens[5],tokens[6],tokens[7],tokens[8],tokens[9]); + return true; + } + event MintPack(uint256 packId,uint256 price,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5,uint256 token6,uint256 token7,uint256 token8,uint256 token9,uint256 token10); + + function buyPack(uint256 packId) public payable returns (bool) { + //make sure pack is for sale + require( packs[packId].price > 0 ); + //make sure they sent in enough value + require( msg.value >= packs[packId].price ); + //right away set price to 0 to avoid some sort of reentrance + packs[packId].price=0; + //give tokens to owner + for(uint8 i=0;i<10;i++){ + tokenIndexToOwner[packs[packId].tokens[i]]=msg.sender; + _transfer(0, msg.sender, packs[packId].tokens[i]); + } + //clear the price so it is no longer for sale + delete packs[packId]; + BuyPack(msg.sender,packId,msg.value); + } + event BuyPack(address sender, uint256 packId, uint256 price); + + //lets keep a count of how many of a specific image is created too + //that will allow us to calculate rarity on-chain if we want + mapping (bytes32 => uint256) public tokensOfImage; + + function getToken(uint256 _id) public view returns (address owner,bytes32 image,uint256 copies) { + image = items[_id].image; + copies = tokensOfImage[image]; + return ( + tokenIndexToOwner[_id], + image, + copies + ); + } + + uint256 nonce = 0; + + struct Stack{ + //this will be an array of ids but for now just doing one for simplicity + uint256[5] ids; + address owner; + uint32 block; + + } + + mapping (bytes32 => Stack) public stacks; + mapping (bytes32 => bytes32) public stackCounter; + + function stackOwner(bytes32 _stack) public constant returns (address owner) { + return stacks[_stack].owner; + } + + function getStack(bytes32 _stack) public constant returns (address owner,uint32 block,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5) { + return (stacks[_stack].owner,stacks[_stack].block,stacks[_stack].ids[0],stacks[_stack].ids[1],stacks[_stack].ids[2],stacks[_stack].ids[3],stacks[_stack].ids[4]); + } + + //tx 1: of a game, player one approves the SlammerTime contract to take their tokens + //this triggers an event to broadcast to other players that there is an open challenge + function submitStack(uint256 _id,uint256 _id2,uint256 _id3,uint256 _id4,uint256 _id5, bool _public) public returns (bool) { + //make sure slammerTime was set at deploy + require(slammerTime!=address(0)); + //the sender must own the token + require(tokenIndexToOwner[_id]==msg.sender); + require(tokenIndexToOwner[_id2]==msg.sender); + require(tokenIndexToOwner[_id3]==msg.sender); + require(tokenIndexToOwner[_id4]==msg.sender); + require(tokenIndexToOwner[_id5]==msg.sender); + //they approve the slammertime contract to take the token away from them + require(approve(slammerTime,_id)); + require(approve(slammerTime,_id2)); + require(approve(slammerTime,_id3)); + require(approve(slammerTime,_id4)); + require(approve(slammerTime,_id5)); + + bytes32 stack = keccak256(nonce++,msg.sender); + uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; + stacks[stack] = Stack(ids,msg.sender,uint32(block.number)); + + //the event is triggered to the frontend to display the stack + //the frontend will check if they want it public or not + SubmitStack(msg.sender,now,stack,_id,_id2,_id3,_id4,_id5,_public); + } + event SubmitStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,uint256 _token1,uint256 _token2,uint256 _token3,uint256 _token4,uint256 _token5,bool _public); + + //tx 2: of a game, player two approves the SlammerTime contract to take their tokens + //this triggers an event to broadcast to player one that this player wants to rumble + function submitCounterStack(bytes32 _stack, uint256 _id, uint256 _id2, uint256 _id3, uint256 _id4, uint256 _id5) public returns (bool) { + //make sure slammerTime was set at deploy + require(slammerTime!=address(0)); + //the sender must own the token + require(tokenIndexToOwner[_id]==msg.sender); + require(tokenIndexToOwner[_id2]==msg.sender); + require(tokenIndexToOwner[_id3]==msg.sender); + require(tokenIndexToOwner[_id4]==msg.sender); + require(tokenIndexToOwner[_id5]==msg.sender); + //they approve the slammertime contract to take the token away from them + require(approve(slammerTime,_id)); + require(approve(slammerTime,_id2)); + require(approve(slammerTime,_id3)); + require(approve(slammerTime,_id4)); + require(approve(slammerTime,_id5)); + //stop playing with yourself + require(msg.sender!=stacks[_stack].owner); + + bytes32 counterstack = keccak256(nonce++,msg.sender,_id); + uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; + stacks[counterstack] = Stack(ids,msg.sender,uint32(block.number)); + stackCounter[counterstack] = _stack; + + //the event is triggered to the frontend to display the stack + //the frontend will check if they want it public or not + CounterStack(msg.sender,now,_stack,counterstack,_id,_id2,_id3,_id4,_id5); + } + event CounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack, bytes32 _counterStack, uint256 _token1, uint256 _token2, uint256 _token3, uint256 _token4, uint256 _token5); + + // if someone creates a stack they should be able to clean it up + // its not really that big of a deal because we will have a timeout + // in the frontent, but still... + function cancelStack(bytes32 _stack) public returns (bool) { + //it must be your stack + require(msg.sender==stacks[_stack].owner); + //make sure there is no mode set yet + require(mode[_stack]==0); + //make sure they aren't trying to cancel a counterstack using this function + require(stackCounter[_stack]==0x00000000000000000000000000000000); + + delete stacks[_stack]; + + CancelStack(msg.sender,now,_stack); + } + event CancelStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack); + + function cancelCounterStack(bytes32 _stack,bytes32 _counterstack) public returns (bool) { + //it must be your stack + require(msg.sender==stacks[_counterstack].owner); + //the counter must be a counter of stack 1 + require(stackCounter[_counterstack]==_stack); + //make sure there is no mode set yet + require(mode[_stack]==0); + + delete stacks[_counterstack]; + delete stackCounter[_counterstack]; + + CancelCounterStack(msg.sender,now,_stack,_counterstack); + } + event CancelCounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,bytes32 _counterstack); + + mapping (bytes32 => bytes32) public counterOfStack; + mapping (bytes32 => uint8) public mode; + mapping (bytes32 => uint8) public round; + mapping (bytes32 => uint32) public lastBlock; + mapping (bytes32 => uint32) public commitBlock; + mapping (bytes32 => address) public lastActor; + mapping (bytes32 => uint256[10]) public mixedStack; + + //tx 3: of a game, player one approves counter stack and transfers everything in + function acceptCounterStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { + //sender must be owner of stack 1 + require(msg.sender==stacks[_stack].owner); + //the counter must be a counter of stack 1 + require(stackCounter[_counterStack]==_stack); + //make sure there is no mode set yet + require(mode[_stack]==0); + + //do the transfer + SlammerTime slammerTimeContract = SlammerTime(slammerTime); + require( slammerTimeContract.startSlammerTime(msg.sender,stacks[_stack].ids,stacks[_counterStack].owner,stacks[_counterStack].ids) ); + + //save the block for a timeout + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_counterStack].owner; + mode[_stack]=1; + counterOfStack[_stack]=_counterStack; + + //// LOL @ + mixedStack[_stack][0] = stacks[_stack].ids[0]; + mixedStack[_stack][1] = stacks[_counterStack].ids[0]; + mixedStack[_stack][2] = stacks[_stack].ids[1]; + mixedStack[_stack][3] = stacks[_counterStack].ids[1]; + mixedStack[_stack][4] = stacks[_stack].ids[2]; + mixedStack[_stack][5] = stacks[_counterStack].ids[2]; + mixedStack[_stack][6] = stacks[_stack].ids[3]; + mixedStack[_stack][7] = stacks[_counterStack].ids[3]; + mixedStack[_stack][8] = stacks[_stack].ids[4]; + mixedStack[_stack][9] = stacks[_counterStack].ids[4]; + + //let the front end know that the transfer is good and we are ready for the coin flip + AcceptCounterStack(msg.sender,_stack,_counterStack); + } + event AcceptCounterStack(address indexed _sender,bytes32 indexed _stack, bytes32 indexed _counterStack); + + mapping (bytes32 => bytes32) public commit; + + function getMixedStack(bytes32 _stack) external view returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){ + uint256[10] thisStack = mixedStack[_stack]; + return (thisStack[0],thisStack[1],thisStack[2],thisStack[3],thisStack[4],thisStack[5],thisStack[6],thisStack[7],thisStack[8],thisStack[9]); + } + + //tx 4: player one commits and flips coin up + //at this point, the timeout goes into effect and if any transaction including + //the coin flip don't come back in time, we need to allow the other party + //to withdraw all tokens... this keeps either player from refusing to + //reveal their commit. (every tx from here on out needs to update the lastBlock and lastActor) + //and in the withdraw function you check currentblock-lastBlock > timeout = refund to lastActor + //and by refund I mean let them withdraw if they want + //we could even have a little timer on the front end that tells you how long your opponnet has + //before they will forfet + function startCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { + //make sure it's the owner of the first stack (player one) doing the flip + require(stacks[_stack].owner==msg.sender); + //the counter must be a counter of stack 1 + require(stackCounter[_counterStack]==_stack); + require(counterOfStack[_stack]==_counterStack); + //make sure that we are in mode 1 + require(mode[_stack]==1); + //store the commit for the next tx + commit[_stack]=_commit; + commitBlock[_stack]=uint32(block.number); + //inc the mode to 2 + mode[_stack]=2; + StartCoinFlip(_stack,_commit); + } + event StartCoinFlip(bytes32 stack, bytes32 commit); + + //tx5: player one ends coin flip with reveal + function endCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { + //make sure it's the owner of the first stack (player one) doing the flip + require(stacks[_stack].owner==msg.sender); + //the counter must be a counter of stack 1 + require(stackCounter[_counterStack]==_stack); + require(counterOfStack[_stack]==_counterStack); + //make sure that we are in mode 2 + require(mode[_stack]==2); + + //make sure that we are on a later block than the commit block + require(uint32(block.number)>commitBlock[_stack]); + + //make sure hash of reveal == commit + if(keccak256(_reveal)!=commit[_stack]){ + //commit/reveal failed.. this can happen if they + //reload, so don't punish, just go back to the + //start of the coin flip stage + mode[_stack]=1; + CoinFlipFail(_stack); + return false; + }else{ + //successful coin flip, ready to get random + mode[_stack]=3; + round[_stack]=1; + bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); + if(uint256(pseudoRandomHash)%2==0){ + //player1 goes first + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_counterStack].owner; + CoinFlipSuccess(_stack,stacks[_stack].owner,true); + }else{ + //player2 goes first + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_stack].owner; + CoinFlipSuccess(_stack,stacks[_counterStack].owner,false); + } + return true; + } + + } + event CoinFlipSuccess(bytes32 indexed stack,address whosTurn,bool heads); + event CoinFlipFail(bytes32 stack); + + + //tx6 next player raises slammer + function raiseSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { + if(lastActor[_stack]==stacks[_stack].owner){ + //it is player2's turn + require(stacks[_counterStack].owner==msg.sender); + }else{ + //it is player1's turn + require(stacks[_stack].owner==msg.sender); + } + //the counter must be a counter of stack 1 + require(stackCounter[_counterStack]==_stack); + require(counterOfStack[_stack]==_counterStack); + //make sure that we are in mode 3 + require(mode[_stack]==3); + //store the commit for the next tx + commit[_stack]=_commit; + commitBlock[_stack]=uint32(block.number); + //inc the mode to 2 + mode[_stack]=4; + RaiseSlammer(_stack,_commit); + } + event RaiseSlammer(bytes32 stack, bytes32 commit); + + + //tx7 player throws slammer + function throwSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { + if(lastActor[_stack]==stacks[_stack].owner){ + //it is player2's turn + require(stacks[_counterStack].owner==msg.sender); + }else{ + //it is player1's turn + require(stacks[_stack].owner==msg.sender); + } + //the counter must be a counter of stack 1 + require(stackCounter[_counterStack]==_stack); + require(counterOfStack[_stack]==_counterStack); + //make sure that we are in mode 4 + require(mode[_stack]==4); + + //make sure that we are on a later block than the commit block + require(uint32(block.number)>commitBlock[_stack]); + + uint256[10] memory flipped; + if(keccak256(_reveal)!=commit[_stack]){ + //commit/reveal failed.. this can happen if they + //reload, so don't punish, just go back to the + //start of the slammer raise + mode[_stack]=3; + throwSlammerEvent(_stack,msg.sender,address(0),flipped); + return false; + }else{ + //successful slam!!!!!!!!!!!! At this point I have officially been awake for 24 hours !!!!!!!!!! + mode[_stack]=3; + + address previousLastActor = lastActor[_stack]; + + bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); + //Debug(_reveal,block.blockhash(block.number-1),pseudoRandomHash); + if(lastActor[_stack]==stacks[_stack].owner){ + //player1 goes next + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_counterStack].owner; + }else{ + //player2 goes next + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_stack].owner; + } + + //look through the stack of remaining pogs and compare to byte to see if less than FLIPPINESS and transfer back to correct owner + // oh man, that smells like reentrance -- I think the mode would actually break that right? + bool done=true; + uint8 randIndex = 0; + for(uint8 i=0;i<10;i++){ + if(mixedStack[_stack][i]>0){ + //there is still a pog here, check for flip + uint8 thisFlipper = uint8(pseudoRandomHash[randIndex++]); + //DebugFlip(pseudoRandomHash,i,randIndex,thisFlipper,FLIPPINESS); + if(thisFlipper<(FLIPPINESS+round[_stack]*FLIPPINESSROUNDBONUS)){ + //ITS A FLIP! + uint256 tempId = mixedStack[_stack][i]; + flipped[i]=tempId; + mixedStack[_stack][i]=0; + SlammerTime slammerTimeContract = SlammerTime(slammerTime); + //require( slammerTimeContract.transferBack(msg.sender,tempId) ); + slammerTimeContract.transferBack(msg.sender,tempId); + }else{ + done=false; + } + } + } + + throwSlammerEvent(_stack,msg.sender,previousLastActor,flipped); + + if(done){ + FinishGame(_stack); + mode[_stack]=9; + delete mixedStack[_stack]; + delete stacks[_stack]; + delete stackCounter[_counterStack]; + delete stacks[_counterStack]; + delete lastBlock[_stack]; + delete lastActor[_stack]; + delete counterOfStack[_stack]; + delete round[_stack]; + delete commitBlock[_stack]; + delete commit[_stack]; + }else{ + round[_stack]++; + } + + return true; + } + } + event ThrowSlammer(bytes32 indexed stack, address indexed whoDoneIt, address indexed otherPlayer, uint256 token1Flipped, uint256 token2Flipped, uint256 token3Flipped, uint256 token4Flipped, uint256 token5Flipped, uint256 token6Flipped, uint256 token7Flipped, uint256 token8Flipped, uint256 token9Flipped, uint256 token10Flipped); + event FinishGame(bytes32 stack); + + function throwSlammerEvent(bytes32 stack,address whoDoneIt,address otherAccount, uint256[10] flipArray) internal { + ThrowSlammer(stack,whoDoneIt,otherAccount,flipArray[0],flipArray[1],flipArray[2],flipArray[3],flipArray[4],flipArray[5],flipArray[6],flipArray[7],flipArray[8],flipArray[9]); + } + + + function drainStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { + //this function is for the case of a timeout in the commit / reveal + // if a player realizes they are going to lose, they can refuse to reveal + // therefore we must have a timeout of TIMEOUTBLOCKS and if that time is reached + // the other player can get in and drain the remaining tokens from the game + require( stacks[_stack].owner==msg.sender || stacks[_counterStack].owner==msg.sender ); + //the counter must be a counter of stack 1 + require( stackCounter[_counterStack]==_stack ); + require( counterOfStack[_stack]==_counterStack ); + //the bad guy shouldn't be able to drain + require( lastActor[_stack]==msg.sender ); + //must be after timeout period + require( block.number - lastBlock[_stack] >= TIMEOUTBLOCKS); + //game must still be going + require( mode[_stack]<9 ); + + for(uint8 i=0;i<10;i++){ + if(mixedStack[_stack][i]>0){ + uint256 tempId = mixedStack[_stack][i]; + mixedStack[_stack][i]=0; + SlammerTime slammerTimeContract = SlammerTime(slammerTime); + slammerTimeContract.transferBack(msg.sender,tempId); + } + } + + FinishGame(_stack); + mode[_stack]=9; + + delete mixedStack[_stack]; + delete stacks[_stack]; + delete stackCounter[_counterStack]; + delete stacks[_counterStack]; + delete lastBlock[_stack]; + delete lastActor[_stack]; + delete counterOfStack[_stack]; + delete round[_stack]; + delete commitBlock[_stack]; + delete commit[_stack]; + + DrainStack(_stack,_counterStack,msg.sender); + } + event DrainStack(bytes32 stack,bytes32 counterStack,address sender); + + function totalSupply() public view returns (uint) { + return items.length - 1; + } + + function tokensOfOwner(address _owner) external view returns(uint256[]) { + uint256 tokenCount = balanceOf(_owner); + if (tokenCount == 0) { + return new uint256[](0); + } else { + uint256[] memory result = new uint256[](tokenCount); + uint256 total = totalSupply(); + uint256 resultIndex = 0; + uint256 id; + for (id = 1; id <= total; id++) { + if (tokenIndexToOwner[id] == _owner) { + result[resultIndex] = id; + resultIndex++; + } + } + return result; + } + } + + function withdraw(uint256 _amount) public onlyOwner returns (bool) { + require(this.balance >= _amount); + assert(owner.send(_amount)); + return true; + } + + function withdrawToken(address _token,uint256 _amount) public onlyOwner returns (bool) { + StandardToken token = StandardToken(_token); + token.transfer(msg.sender,_amount); + return true; + } + + + //adapted from ERC-677 from my dude Steve Ellis - thanks man! + function transferStackAndCall(address _to, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data) public returns (bool) { + transfer(_to, _token1); + transfer(_to, _token2); + transfer(_to, _token3); + transfer(_to, _token4); + transfer(_to, _token5); + + if (isContract(_to)) { + contractFallback(_to,_token1,_token2,_token3,_token4,_token5,_data); + } + return true; + } + + function contractFallback(address _to, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data) private { + StackReceiver receiver = StackReceiver(_to); + receiver.onTransferStack(msg.sender,_token1,_token2,_token3,_token4,_token5,_data); + } + + function isContract(address _addr) private returns (bool hasCode) { + uint length; + assembly { length := extcodesize(_addr) } + return length > 0; + } + +} + +contract StackReceiver { + function onTransferStack(address _sender, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data); +} + +contract StandardToken { + function transfer(address _to, uint256 _value) public returns (bool) { } +} + +contract SlammerTime { + function startSlammerTime(address _player1,uint256[5] _id1,address _player2,uint256[5] _id2) public returns (bool) { } + function transferBack(address _toWhom, uint256 _id) public returns (bool) { } +} \ No newline at end of file diff --git a/data_full/CVE/2018-15552.sol b/data_full/CVE/2018-15552.sol new file mode 100644 index 00000000..4aedbcdb --- /dev/null +++ b/data_full/CVE/2018-15552.sol @@ -0,0 +1,120 @@ +/** + *Submitted for verification at Etherscan.io on 2018-01-16 +*/ + +pragma solidity ^0.4.19; +contract LottoCount { + + //CONSTANT + uint256 private maxTickets; + uint256 public ticketPrice; + + //LOTO REGISTER + uint256 public lottoIndex; + uint256 lastTicketTime; + + //LOTTO VARIABLES + uint8 _direction; + uint256 numtickets; + uint256 totalBounty; + + address worldOwner; + + event NewTicket(address indexed fromAddress, bool success); + event LottoComplete(address indexed fromAddress, uint indexed lottoIndex, uint256 reward); + + /// Create a new Lotto + function LottoCount() public + { + worldOwner = msg.sender; + + ticketPrice = 0.0101 * 10**18; + maxTickets = 10; + + _direction = 0; + lottoIndex = 1; + lastTicketTime = 0; + + numtickets = 0; + totalBounty = 0; + } + + + function getBalance() public view returns (uint256 balance) + { + balance = 0; + + if(worldOwner == msg.sender) balance = this.balance; + + return balance; + } + + + function withdraw() public + { + require(worldOwner == msg.sender); + + //reset values + lottoIndex += 1; + numtickets = 0; + totalBounty = 0; + + worldOwner.transfer(this.balance); + } + + + function getLastTicketTime() public view returns (uint256 time) + { + time = lastTicketTime; + return time; + } + + + function AddTicket() public payable + { + require(msg.value == ticketPrice); + require(numtickets < maxTickets); + + //update bif + lastTicketTime = now; + numtickets += 1; + totalBounty += ticketPrice; + bool success = numtickets == maxTickets; + + NewTicket(msg.sender, success); + + //check if winner + if(success) + { + PayWinner(msg.sender); + } + } + + + function PayWinner( address winner ) private + { + require(numtickets == maxTickets); + + //calc reward + uint ownerTax = 6 * totalBounty / 100; + uint winnerPrice = totalBounty - ownerTax; + + LottoComplete(msg.sender, lottoIndex, winnerPrice); + + //reset values + lottoIndex += 1; + numtickets = 0; + totalBounty = 0; + + //change max tickets to give unpredictability + if(_direction == 0 && maxTickets < 20) maxTickets += 1; + if(_direction == 1 && maxTickets > 10) maxTickets -= 1; + + if(_direction == 0 && maxTickets == 20) _direction = 1; + if(_direction == 1 && maxTickets == 10) _direction = 0; + + //give real money + worldOwner.transfer(ownerTax); + winner.transfer(winnerPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-17050.sol b/data_full/CVE/2018-17050.sol new file mode 100644 index 00000000..4293a291 --- /dev/null +++ b/data_full/CVE/2018-17050.sol @@ -0,0 +1,141 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + revert(); // Prevents accidental sending of ether + } +} + +contract PolyAi is owned, token { + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function PolyAi( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} diff --git a/data_full/CVE/2018-17071.sol b/data_full/CVE/2018-17071.sol new file mode 100644 index 00000000..602aec5b --- /dev/null +++ b/data_full/CVE/2018-17071.sol @@ -0,0 +1,55 @@ +/** + *Submitted for verification at Etherscan.io on 2018-08-14 +*/ + +pragma solidity ^0.4.24; + +contract lucky9io { + bool private gameOn = true; + address private owner = 0x5Bf066c70C2B5e02F1C6723E72e82478Fec41201; + uint private entry_number = 0; + uint private value = 0; + + modifier onlyOwner() { + require(msg.sender == owner, "Sender not authorized."); + _; + } + + function stopGame() public onlyOwner { + gameOn = false; + owner.transfer(address(this).balance); + } + + function () public payable{ + if(gameOn == false) { + msg.sender.transfer(msg.value); + return; + } + + if(msg.value * 1000 < 9) { + msg.sender.transfer(msg.value); + return; + } + + entry_number = entry_number + 1; + value = address(this).balance; + + if(entry_number % 999 == 0) { + msg.sender.transfer(value * 8 / 10); + owner.transfer(value * 11 / 100); + return; + } + + if(entry_number % 99 == 0) { + msg.sender.transfer(0.09 ether); + owner.transfer(0.03 ether); + return; + } + + if(entry_number % 9 == 0) { + msg.sender.transfer(0.03 ether); + owner.transfer(0.01 ether); + return; + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-17111.sol b/data_full/CVE/2018-17111.sol new file mode 100644 index 00000000..3cfdb7df --- /dev/null +++ b/data_full/CVE/2018-17111.sol @@ -0,0 +1,128 @@ +/** + *Submitted for verification at Etherscan.io on 2017-09-26 +*/ + +// ---------------------------------------------------------------------------------------------- + // Coinlancer fixed supply token contract + // Enjoy. (c) etype 2017. The MIT Licence. + // ---------------------------------------------------------------------------------------------- + + // ERC Token Standard #20 Interface + // https://github.com/ethereum/EIPs/issues/20 + contract ERC20Interface { + // Get the total token supply + function totalSupply() constant returns (uint256 totalSupply); + + // Get the account balance of another account with address _owner + function balanceOf(address _owner) constant returns (uint256 balance); + + // Send _value amount of tokens to address _to + function transfer(address _to, uint256 _value) returns (bool success); + + // Send _value amount of tokens from address _from to address _to + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + + // Allow _spender to withdraw from your account, multiple times, up to the _value amount. + // If this function is called again it overwrites the current allowance with _value. + // this function is required for some DEX functionality + function approve(address _spender, uint256 _value) returns (bool success); + + // Returns the amount which _spender is still allowed to withdraw from _owner + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + + // Triggered when tokens are transferred. + event Transfer(address indexed _from, address indexed _to, uint256 _value); + + // Triggered whenever approve(address _spender, uint256 _value) is called. + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + } + + contract Coinlancer is ERC20Interface { + string public constant symbol = "CL"; + string public constant name = "Coinlancer"; + uint8 public constant decimals = 18; + uint256 _totalSupply = 300000000000000000000000000; + + // Owner of this contract + address public owner; + + // Balances for each account + mapping(address => uint256) balances; + + // Owner of account approves the transfer of an amount to another account + mapping(address => mapping (address => uint256)) allowed; + + // Functions with this modifier can only be executed by the owner + modifier onlyOwner() { + require(msg.sender != owner); { + + } + _; + } + + // Constructor + function Coinlancer() { + owner = msg.sender; + balances[owner] = _totalSupply; + } + + function totalSupply() constant returns (uint256 totalSupply) { + totalSupply = _totalSupply; + } + + // What is the balance of a particular account? + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + // Transfer the balance from owner's account to another account + function transfer(address _to, uint256 _amount) returns (bool success) { + if (balances[msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } else { + return false; + } + } + + // Send _value amount of tokens from address _from to address _to + // The transferFrom method is used for a withdraw workflow, allowing contracts to send + // tokens on your behalf, for example to "deposit" to a contract address and/or to charge + // fees in sub-currencies; the command should fail unless the _from account has + // deliberately authorized the sender of the message via some mechanism; we propose + // these standardized APIs for approval: + function transferFrom( + address _from, + address _to, + uint256 _amount + ) returns (bool success) { + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + + // Allow _spender to withdraw from your account, multiple times, up to the _value amount. + // If this function is called again it overwrites the current allowance with _value. + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-17877.sol b/data_full/CVE/2018-17877.sol new file mode 100644 index 00000000..214fa921 --- /dev/null +++ b/data_full/CVE/2018-17877.sol @@ -0,0 +1,403 @@ +/** + *Submitted for verification at Etherscan.io on 2018-07-24 +*/ + +pragma solidity ^0.4.0; + +contract Owned { + address public owner; + address public newOwner; + + event OwnershipTransferred(address indexed _from, address indexed _to); + + function Owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address _newOwner) public onlyOwner { + newOwner = _newOwner; + } + + function acceptOwnership() public { + require(msg.sender == newOwner); + emit OwnershipTransferred(owner, newOwner); + owner = newOwner; + newOwner = address(0); + } +} + +contract Greedy is Owned { + //A scam Game, 资金盘, 老鼠會, Ponzi scheme. + //The Game like Fomo3D, But more simple and more short time. + //Audit & be responsible for yourself. + //The code is really simple, so don't ask idiot question. + + //Round Global Info + uint public Round = 1; + mapping(uint => uint) public RoundHeart; + mapping(uint => uint) public RoundETH; // Pot + mapping(uint => uint) public RoundTime; + mapping(uint => uint) public RoundPayMask; + mapping(uint => address) public RoundLastGreedyMan; + + //Globalinfo + uint256 public Luckybuy; + + //Round Personal Info + mapping(uint => mapping(address => uint)) public RoundMyHeart; + mapping(uint => mapping(address => uint)) public RoundMyPayMask; + mapping(address => uint) public MyreferredRevenue; + + //Lucky Buy Tracker + uint256 public luckybuyTracker_ = 0; + + uint256 constant private RoundIncrease = 1 seconds; // every heart purchased adds this much to the timer + uint256 constant private RoundMaxTime = 10 minutes; // max length a round timer can be + + //Owner fee + uint256 public onwerfee; + + using SafeMath for *; + using GreedyHeartCalcLong for uint256; + + event winnerEvent(address winnerAddr, uint256 newPot, uint256 round); + event luckybuyEvent(address luckyAddr, uint256 amount, uint256 round); + event buyheartEvent(address Addr, uint256 Heartamount, uint256 ethvalue, uint256 round, address ref); + event referredEvent(address Addr, address RefAddr, uint256 ethvalue); + + event withdrawEvent(address Addr, uint256 ethvalue, uint256 Round); + event withdrawRefEvent(address Addr, uint256 ethvalue); + event withdrawOwnerEvent(uint256 ethvalue); + + //Get Heart Price + function getHeartPrice() public view returns(uint256) + { + return ( (RoundHeart[Round].add(1000000000000000000)).ethRec(1000000000000000000) ); + } + + //Get My Revenue + function getMyRevenue(uint _round) public view returns(uint256) + { + return( (((RoundPayMask[_round]).mul(RoundMyHeart[_round][msg.sender])) / (1000000000000000000)).sub(RoundMyPayMask[_round][msg.sender]) ); + } + + //Get Time Left + function getTimeLeft() public view returns(uint256) + { + if(RoundTime[Round] == 0 || RoundTime[Round] < now) + return 0; + else + return( (RoundTime[Round]).sub(now) ); + } + + function updateTimer(uint256 _hearts) private + { + if(RoundTime[Round] == 0) + RoundTime[Round] = RoundMaxTime.add(now); + + uint _newTime = (((_hearts) / (1000000000000000000)).mul(RoundIncrease)).add(RoundTime[Round]); + + // compare to max and set new end time + if (_newTime < (RoundMaxTime).add(now)) + RoundTime[Round] = _newTime; + else + RoundTime[Round] = RoundMaxTime.add(now); + } + + //Buy some greedy heart + function buyHeart(address referred) public payable { + + require(msg.value >= 1000000000, "pocket lint: not a valid currency"); + require(msg.value <= 100000000000000000000000, "no vitalik, no"); + + address _addr = msg.sender; + uint256 _codeLength; + assembly {_codeLength := extcodesize(_addr)} + require(_codeLength == 0, "sorry humans only"); + + //bought at least 1 whole key + uint256 _hearts = (RoundETH[Round]).keysRec(msg.value); + uint256 _pearn; + require(_hearts >= 1000000000000000000); + + require(RoundTime[Round] > now || RoundTime[Round] == 0); + + updateTimer(_hearts); + + RoundHeart[Round] += _hearts; + RoundMyHeart[Round][msg.sender] += _hearts; + + if (referred != address(0) && referred != msg.sender) + { + _pearn = (((msg.value.mul(30) / 100).mul(1000000000000000000)) / (RoundHeart[Round])).mul(_hearts)/ (1000000000000000000); + + onwerfee += (msg.value.mul(4) / 100); + RoundETH[Round] += msg.value.mul(54) / 100; + Luckybuy += msg.value.mul(2) / 100; + MyreferredRevenue[referred] += (msg.value.mul(10) / 100); + + RoundPayMask[Round] += ((msg.value.mul(30) / 100).mul(1000000000000000000)) / (RoundHeart[Round]); + RoundMyPayMask[Round][msg.sender] = (((RoundPayMask[Round].mul(_hearts)) / (1000000000000000000)).sub(_pearn)).add(RoundMyPayMask[Round][msg.sender]); + + emit referredEvent(msg.sender, referred, msg.value.mul(10) / 100); + } else { + _pearn = (((msg.value.mul(40) / 100).mul(1000000000000000000)) / (RoundHeart[Round])).mul(_hearts)/ (1000000000000000000); + + RoundETH[Round] += msg.value.mul(54) / 100; + Luckybuy += msg.value.mul(2) / 100; + onwerfee +=(msg.value.mul(4) / 100); + + RoundPayMask[Round] += ((msg.value.mul(40) / 100).mul(1000000000000000000)) / (RoundHeart[Round]); + RoundMyPayMask[Round][msg.sender] = (((RoundPayMask[Round].mul(_hearts)) / (1000000000000000000)).sub(_pearn)).add(RoundMyPayMask[Round][msg.sender]); + + } + + // manage airdrops + if (msg.value >= 100000000000000000){ + luckybuyTracker_++; + if (luckyBuy() == true) + { + msg.sender.transfer(Luckybuy); + emit luckybuyEvent(msg.sender, Luckybuy, Round); + luckybuyTracker_ = 0; + Luckybuy = 0; + } + } + + RoundLastGreedyMan[Round] = msg.sender; + emit buyheartEvent(msg.sender, _hearts, msg.value, Round, referred); + } + + function win() public { + require(now > RoundTime[Round] && RoundTime[Round] != 0); + //Round End + RoundLastGreedyMan[Round].transfer(RoundETH[Round]); + emit winnerEvent(RoundLastGreedyMan[Round], RoundETH[Round], Round); + Round++; + } + + //withdrawEarnings + function withdraw(uint _round) public { + uint _revenue = getMyRevenue(_round); + uint _revenueRef = MyreferredRevenue[msg.sender]; + + RoundMyPayMask[_round][msg.sender] += _revenue; + MyreferredRevenue[msg.sender] = 0; + + msg.sender.transfer(_revenue + _revenueRef); + + emit withdrawRefEvent( msg.sender, _revenue); + emit withdrawEvent(msg.sender, _revenue, _round); + } + + function withdrawOwner() public onlyOwner { + uint _revenue = onwerfee; + msg.sender.transfer(_revenue); + onwerfee = 0; + emit withdrawOwnerEvent(_revenue); + } + + //LuckyBuy + function luckyBuy() private view returns(bool) + { + uint256 seed = uint256(keccak256(abi.encodePacked( + + (block.timestamp).add + (block.difficulty).add + ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add + (block.gaslimit).add + ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add + (block.number) + + ))); + + if((seed - ((seed / 1000) * 1000)) < luckybuyTracker_) + return(true); + else + return(false); + } + + function getFullround()public view returns(uint[] round,uint[] pot, address[] whowin,uint[] mymoney) { + uint[] memory whichRound = new uint[](Round); + uint[] memory totalPool = new uint[](Round); + address[] memory winner = new address[](Round); + uint[] memory myMoney = new uint[](Round); + uint counter = 0; + + for (uint i = 1; i <= Round; i++) { + whichRound[counter] = i; + totalPool[counter] = RoundETH[i]; + winner[counter] = RoundLastGreedyMan[i]; + myMoney[counter] = getMyRevenue(i); + counter++; + } + + return (whichRound,totalPool,winner,myMoney); + } +} + +library GreedyHeartCalcLong { + using SafeMath for *; + /** + * @dev calculates number of keys received given X eth + * @param _curEth current amount of eth in contract + * @param _newEth eth being spent + * @return amount of ticket purchased + */ + function keysRec(uint256 _curEth, uint256 _newEth) + internal + pure + returns (uint256) + { + return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); + } + + /** + * @dev calculates amount of eth received if you sold X keys + * @param _curKeys current amount of keys that exist + * @param _sellKeys amount of keys you wish to sell + * @return amount of eth received + */ + function ethRec(uint256 _curKeys, uint256 _sellKeys) + internal + pure + returns (uint256) + { + return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); + } + + /** + * @dev calculates how many keys would exist with given an amount of eth + * @param _eth eth "in contract" + * @return number of keys that would exist + */ + function keys(uint256 _eth) + internal + pure + returns(uint256) + { + return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); + } + + /** + * @dev calculates how much eth would be in contract given a number of keys + * @param _keys number of keys "in contract" + * @return eth that would exists + */ + function eth(uint256 _keys) + internal + pure + returns(uint256) + { + return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); + } +} + +/** + * @title SafeMath v0.1.9 + * @dev Math operations with safety checks that throw on error + * change notes: original SafeMath library from OpenZeppelin modified by Inventor + * - added sqrt + * - added sq + * - added pwr + * - changed asserts to requires with error log outputs + * - removed div, its useless + */ +library SafeMath { + + /** + * @dev Multiplies two numbers, throws on overflow. + */ + function mul(uint256 a, uint256 b) + internal + pure + returns (uint256 c) + { + if (a == 0) { + return 0; + } + c = a * b; + require(c / a == b, "SafeMath mul failed"); + return c; + } + + /** + * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). + */ + function sub(uint256 a, uint256 b) + internal + pure + returns (uint256) + { + require(b <= a, "SafeMath sub failed"); + return a - b; + } + + /** + * @dev Adds two numbers, throws on overflow. + */ + function add(uint256 a, uint256 b) + internal + pure + returns (uint256 c) + { + c = a + b; + require(c >= a, "SafeMath add failed"); + return c; + } + + /** + * @dev gives square root of given x. + */ + function sqrt(uint256 x) + internal + pure + returns (uint256 y) + { + uint256 z = ((add(x,1)) / 2); + y = x; + while (z < y) + { + y = z; + z = ((add((x / z),z)) / 2); + } + } + + /** + * @dev gives square. multiplies x by x + */ + function sq(uint256 x) + internal + pure + returns (uint256) + { + return (mul(x,x)); + } + + /** + * @dev x to the power of y + */ + function pwr(uint256 x, uint256 y) + internal + pure + returns (uint256) + { + if (x==0) + return (0); + else if (y==0) + return (1); + else + { + uint256 z = x; + for (uint256 i=1; i < y; i++) + z = mul(z,x); + return (z); + } + } + +} \ No newline at end of file diff --git a/data_full/CVE/2018-17882.sol b/data_full/CVE/2018-17882.sol new file mode 100644 index 00000000..8d842294 --- /dev/null +++ b/data_full/CVE/2018-17882.sol @@ -0,0 +1,117 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-13 +*/ + +pragma solidity ^0.4.18; + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { + address public owner; + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Ownable() public { + owner = msg.sender; + } + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) public onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } +} + + +contract BattleToken is Ownable { + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + uint256 constant private MAX_UINT256 = 2**256 - 1; + mapping (address => uint256) public balances; + mapping (address => mapping (address => uint256)) public allowed; + uint256 public totalSupply; + string public name = "https://cryptobots.me/cbtb - CryptoBotsBattle"; + uint8 public decimals = 0; + string public symbol = "CBTB"; + + address public fights; + + function setFightsAddress(address _fights) public onlyOwner { + fights = _fights; + } + + function create(uint _amount) public onlyOwner { + balances[msg.sender] = safeAdd(balances[msg.sender], _amount); + totalSupply = safeAdd(totalSupply, _amount); + } + + function transfer(address _to, uint256 _value) public returns (bool success) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + + function batchTransfer(address[] _to, uint _value) public { + balances[msg.sender] = safeSub( + balances[msg.sender], _to.length * _value + ); + for (uint i = 0; i < _to.length; i++) { + balances[_to[i]] = safeAdd(balances[_to[i]], _value); + Transfer(msg.sender, _to[i], _value); + } + } + + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + if (_to != fights) { + allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value); + } + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) public returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) public view returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } + + function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-17968.sol b/data_full/CVE/2018-17968.sol new file mode 100644 index 00000000..6613cb1e --- /dev/null +++ b/data_full/CVE/2018-17968.sol @@ -0,0 +1,253 @@ +/** + *Submitted for verification at Etherscan.io on 2018-07-12 +*/ + +pragma solidity ^0.4.8; + +contract RuletkaIo { + + /*** EVENTS ***/ + + /// @dev A russian Roulette has been executed between 6 players + /// in room roomId and unfortunately, victim got shot and didn't + /// make it out alive... RIP + event partyOver(uint256 roomId, address victim, address[] winners); + + /// @dev A new player has enter a room + event newPlayer(uint256 roomId, address player); + + /// @dev A room is full, we close the door. Game can start. + event fullRoom(uint256 roomId); + + /// @dev A safety mechanism has been triggered to empty the room and refund entirely the players (Should never happen) + event roomRefunded(uint256 _roomId, address[] refundedPlayers); + + /*** Founders addresses ***/ + address CTO; + address CEO; + + Room[] private allRooms; + + function () public payable {} // Give the ability of receiving ether + + function RuletkaIo() public { + CTO = msg.sender; + CEO = msg.sender; + } + + /*** ACCESS MODIFIERS ***/ + /// @dev Access modifier for CTO-only functionality + modifier onlyCTO() { + require(msg.sender == CTO); + _; + } + + /// @dev Assigns a new address to act as the CTO. + /// @param _newCTO The address of the new CTO + function setCTO(address _newCTO) public onlyCTO { + require(_newCTO != address(0)); + CTO = _newCTO; + } + + /// @dev Assigns a new address to act as the CEO. + /// @param _newCEO The address of the new CEO + function setCEO(address _newCEO) public onlyCTO { + require(_newCEO != address(0)); + CEO = _newCEO; + } + + /*** DATATYPES ***/ + struct Room { + string name; + uint256 entryPrice; // The price to enter the room and play Russian Roulette + uint256 balance; + address[] players; + } + + + /// For creating Room + function createRoom(string _name, uint256 _entryPrice) public onlyCTO{ + address[] memory players; + Room memory _room = Room({ + name: _name, + players: players, + balance: 0, + entryPrice: _entryPrice + }); + + allRooms.push(_room); + } + + function enter(uint256 _roomId) public payable { + Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. + + require(room.players.length < 6); + require(msg.value >= room.entryPrice); + + room.players.push(msg.sender); + room.balance += room.entryPrice; + + emit newPlayer(_roomId, msg.sender); + + if(room.players.length == 6){ + executeRoom(_roomId); + } + } + + function enterWithReferral(uint256 _roomId, address referrer) public payable { + + Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. + + require(room.players.length < 6); + require(msg.value >= room.entryPrice); + + uint256 referrerCut = SafeMath.div(room.entryPrice, 100); // Referrer get one percent of the bet as reward + referrer.transfer(referrerCut); + + room.players.push(msg.sender); + room.balance += room.entryPrice - referrerCut; + + emit newPlayer(_roomId, msg.sender); + + if(room.players.length == 6){ + emit fullRoom(_roomId); + executeRoom(_roomId); + } + } + + function executeRoom(uint256 _roomId) public { + + Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. + + //Check if the room is really full before shooting people... + require(room.players.length == 6); + + uint256 halfFee = SafeMath.div(room.entryPrice, 20); + CTO.transfer(halfFee); + CEO.transfer(halfFee); + room.balance -= halfFee * 2; + + uint256 deadSeat = random(); + + distributeFunds(_roomId, deadSeat); + + delete room.players; + } + + function distributeFunds(uint256 _roomId, uint256 _deadSeat) private returns(uint256) { + + Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. + uint256 balanceToDistribute = SafeMath.div(room.balance,5); + + address victim = room.players[_deadSeat]; + address[] memory winners = new address[](5); + uint256 j = 0; + for (uint i = 0; i<6; i++) { + if(i != _deadSeat){ + room.players[i].transfer(balanceToDistribute); + room.balance -= balanceToDistribute; + winners[j] = room.players[i]; + j++; + } + } + + emit partyOver(_roomId, victim, winners); + + return address(this).balance; + } + + /// @dev Empty the room and refund each player. Safety mechanism which shouldn't be used. + /// @param _roomId The Room id to empty and refund + function refundPlayersInRoom(uint256 _roomId) public onlyCTO{ + Room storage room = allRooms[_roomId-1]; //if _roomId doesn't exist in array, exits. + uint256 nbrOfPlayers = room.players.length; + uint256 balanceToRefund = SafeMath.div(room.balance,nbrOfPlayers); + for (uint i = 0; i 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + /** + * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + /** + * @dev Adds two numbers, throws on overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-17987.sol b/data_full/CVE/2018-17987.sol new file mode 100644 index 00000000..c629eee4 --- /dev/null +++ b/data_full/CVE/2018-17987.sol @@ -0,0 +1,179 @@ +/** + *Submitted for verification at Etherscan.io on 2017-11-08 +*/ + +pragma solidity ^0.4.13; + +contract Tiles { + + uint public constant NUM_TILES = 256; + uint constant SIDE_LENGTH = 16; + uint private constant STARTING_GAME_NUMBER = 1; + uint public DEFAULT_GAME_COST = 5000000000000000; + + address private owner; + + uint public currentGameNumber; + uint public currentGameBalance; + uint public numTilesClaimed; + Tile[16][16] public tiles; + bool public gameStopped; + uint public gameEarnings; + bool public willChangeCost; + uint public currentGameCost; + uint public nextGameCost; + + mapping (address => uint) public pendingWithdrawals; + mapping (uint => address) public gameToWinner; + + struct Tile { + uint gameClaimed; + address claimedBy; + } + + event GameWon(uint indexed gameNumber, address indexed winner); + event TileClaimed(uint indexed gameNumber, uint indexed xCoord, uint indexed yCoord, address claimedBy); + event WinningsClaimed(address indexed claimedBy, uint indexed amountClaimed); + event FailedToClaim(address indexed claimedBy, uint indexed amountToClaim); + event PrintWinningInfo(bytes32 hash, uint xCoord, uint yCoord); + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + modifier gameRunning() { + require(!gameStopped); + _; + } + + modifier gameNotRunning() { + require(gameStopped == true); + _; + } + + function Tiles() payable { + owner = msg.sender; + currentGameNumber = STARTING_GAME_NUMBER; + currentGameCost = DEFAULT_GAME_COST; + numTilesClaimed = 0; + gameStopped = false; + gameEarnings = 0; + willChangeCost = false; + nextGameCost = DEFAULT_GAME_COST; + } + + function cancelContract() onlyOwner returns (bool) { + gameStopped = true; + refundTiles(); + refundWinnings(); + } + + function getRightCoordinate(byte input) returns(uint) { + byte val = input & byte(15); + return uint(val); + } + + function getLeftCoordinate(byte input) returns(uint) { + byte val = input >> 4; + return uint(val); + } + + function determineWinner() private { + bytes32 winningHash = block.blockhash(block.number - 1); + byte winningPair = winningHash[31]; + uint256 winningX = getRightCoordinate(winningPair); + uint256 winningY = getLeftCoordinate(winningPair); + address winner = tiles[winningX][winningY].claimedBy; + PrintWinningInfo(winningHash, winningX, winningY); + GameWon(currentGameNumber, winner); + resetGame(winner); + } + + function claimTile(uint xCoord, uint yCoord, uint gameNumber) gameRunning payable { + if (gameNumber != currentGameNumber || tiles[xCoord][yCoord].gameClaimed == currentGameNumber) { + revert(); + } + require(msg.value == currentGameCost); + + currentGameBalance += msg.value; + tiles[xCoord][yCoord] = Tile(currentGameNumber, msg.sender); + TileClaimed(currentGameNumber, xCoord, yCoord, msg.sender); + numTilesClaimed += 1; + if (numTilesClaimed == NUM_TILES) { + determineWinner(); + } + } + + function resetGame(address winner) private { + uint winningAmount = uint(currentGameBalance) * uint(9) / uint(10); + uint remainder = currentGameBalance - winningAmount; + currentGameBalance = 0; + + gameToWinner[currentGameNumber] = winner; + currentGameNumber++; + numTilesClaimed = 0; + + pendingWithdrawals[winner] += winningAmount; + gameEarnings += remainder; + + if (willChangeCost) { + currentGameCost = nextGameCost; + willChangeCost = false; + } + } + + function refundTiles() private { + Tile memory currTile; + for (uint i = 0; i < SIDE_LENGTH; i++) { + for (uint j = 0; j < SIDE_LENGTH; j++) { + currTile = tiles[i][j]; + if (currTile.gameClaimed == currentGameNumber) { + if (currTile.claimedBy.send(currentGameCost)) { + tiles[i][j] = Tile(0, 0x0); + } + } + } + } + } + + function refundWinnings() private { + address currAddress; + uint currAmount; + for (uint i = STARTING_GAME_NUMBER; i < currentGameNumber; i++) { + currAddress = gameToWinner[i]; + currAmount = pendingWithdrawals[currAddress]; + if (currAmount != 0) { + if (currAddress.send(currAmount)) { + pendingWithdrawals[currAddress] = 0; + } + } + } + } + + function claimWinnings() { + if (pendingWithdrawals[msg.sender] != 0) { + if (msg.sender.send(pendingWithdrawals[msg.sender])) { + WinningsClaimed(msg.sender, pendingWithdrawals[msg.sender]); + pendingWithdrawals[msg.sender] = 0; + } else { + FailedToClaim(msg.sender, pendingWithdrawals[msg.sender]); + } + } + } + + function updateGameCost(uint newGameCost) onlyOwner returns (bool) { + if (newGameCost > 0) { + nextGameCost = newGameCost; + willChangeCost = true; + } + } + + function claimOwnersEarnings() onlyOwner { + if (gameEarnings != 0) { + if (owner.send(gameEarnings)) { + gameEarnings = 0; + } + } + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-18425.sol b/data_full/CVE/2018-18425.sol new file mode 100644 index 00000000..5f107e70 --- /dev/null +++ b/data_full/CVE/2018-18425.sol @@ -0,0 +1,264 @@ +/** + *Submitted for verification at Etherscan.io on 2018-09-04 +*/ + +pragma solidity ^0.4.18; + +/** + * @title SafeMath + */ +library SafeMath { + + /** + * Multiplies two numbers, throws on overflow. + */ + function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { + if (a == 0) { + return 0; + } + c = a * b; + assert(c / a == b); + return c; + } + + /** + * Integer division of two numbers, truncating the quotient. + */ + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + // uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return a / b; + } + + /** + * Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + /** + * Adds two numbers, throws on overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256 c) { + c = a + b; + assert(c >= a); + return c; + } +} + +contract AltcoinToken { + function balanceOf(address _owner) constant public returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool); +} + +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +contract Primeo is ERC20 { + + using SafeMath for uint256; + address owner = msg.sender; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + + string public constant name = "Primeo"; + string public constant symbol = "PEO"; + uint public constant decimals = 8; + + uint256 public totalSupply = 10000000000e8; + uint256 public totalDistributed = 0; + uint256 public tokensPerEth = 10000000e8; + uint256 public constant minContribution = 1 ether / 100; // 0.01 Eth + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + event Distr(address indexed to, uint256 amount); + event DistrFinished(); + + event Airdrop(address indexed _owner, uint _amount, uint _balance); + + event TokensPerEthUpdated(uint _tokensPerEth); + + event Burn(address indexed burner, uint256 value); + + bool public distributionFinished = false; + + modifier canDistr() { + require(!distributionFinished); + _; + } + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + + + + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + owner = newOwner; + } + } + + + function finishDistribution() onlyOwner canDistr public returns (bool) { + distributionFinished = true; + emit DistrFinished(); + return true; + } + + function distr(address _to, uint256 _amount) canDistr private returns (bool) { + totalDistributed = totalDistributed.add(_amount); + balances[_to] = balances[_to].add(_amount); + emit Distr(_to, _amount); + emit Transfer(address(0), _to, _amount); + + return true; + } + + function doAirdrop(address _participant, uint _amount) internal { + + require( _amount > 0 ); + + require( totalDistributed < totalSupply ); + + balances[_participant] = balances[_participant].add(_amount); + totalDistributed = totalDistributed.add(_amount); + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + + // log + emit Airdrop(_participant, _amount, balances[_participant]); + emit Transfer(address(0), _participant, _amount); + } + + function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { + doAirdrop(_participant, _amount); + } + + function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { + for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); + } + + function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { + tokensPerEth = _tokensPerEth; + emit TokensPerEthUpdated(_tokensPerEth); + } + + function () external payable { + getTokens(); + } + + function getTokens() payable canDistr public { + uint256 tokens = 0; + + require( msg.value >= minContribution ); + + require( msg.value > 0 ); + + tokens = tokensPerEth.mul(msg.value) / 1 ether; + address investor = msg.sender; + + if (tokens > 0) { + distr(investor, tokens); + } + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + + function balanceOf(address _owner) constant public returns (uint256) { + return balances[_owner]; + } + + // mitigates the ERC20 short address attack + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + + function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { + + require(_to != address(0)); + require(_amount <= balances[msg.sender]); + + balances[msg.sender] = balances[msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(msg.sender, _to, _amount); + return true; + } + + function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { + + require(_to != address(0)); + require(_amount <= balances[_from]); + require(_amount <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(_from, _to, _amount); + return true; + } + + function approve(address _spender, uint256 _value) public returns (bool success) { + // mitigates the ERC20 spend/approval race condition + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + emit Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant public returns (uint256) { + return allowed[_owner][_spender]; + } + + function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ + AltcoinToken t = AltcoinToken(tokenAddress); + uint bal = t.balanceOf(who); + return bal; + } + + function withdraw() onlyOwner public { + address myAddress = this; + uint256 etherBalance = myAddress.balance; + owner.transfer(etherBalance); + } + + function burn(uint256 _value) onlyOwner public { + require(_value <= balances[msg.sender]); + + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + totalDistributed = totalDistributed.sub(_value); + emit Burn(burner, _value); + } + + function withdrawAltcoinTokens(address _tokenContract) onlyOwner public returns (bool) { + AltcoinToken token = AltcoinToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-18665.sol b/data_full/CVE/2018-18665.sol new file mode 100644 index 00000000..12cbf2b3 --- /dev/null +++ b/data_full/CVE/2018-18665.sol @@ -0,0 +1,79 @@ +pragma solidity ^0.4.11; + +contract Token { + uint256 public totalSupply; + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + +contract StandardToken is Token { + bool public disabled = false; + function transfer(address _to, uint256 _value) returns (bool success) { + if (disabled != true && balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (disabled != true && balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} + +contract NexxusToken is StandardToken { + + function () {return;} + + string public name = "Nexxus"; + uint8 public decimals = 8; + string public symbol = "NXX"; + address public owner; + + function NexxusToken() { + totalSupply = 31800000000000000; + owner = msg.sender; + balances[owner] = totalSupply; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { return; } + return true; + } + function mintToken(uint256 _amount) { + if (msg.sender == owner) { + totalSupply += _amount; + balances[owner] += _amount; + Transfer(0, owner, _amount); + } + } + function disableToken(bool _disable) { + if (msg.sender == owner) + disabled = _disable; + } +} diff --git a/data_full/CVE/2018-19830.sol b/data_full/CVE/2018-19830.sol new file mode 100644 index 00000000..5a45a295 --- /dev/null +++ b/data_full/CVE/2018-19830.sol @@ -0,0 +1,203 @@ +/** + *Submitted for verification at Etherscan.io on 2018-08-11 +*/ + +pragma solidity ^0.4.24; + +library SafeMath { + function mul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint a, uint b) internal returns (uint) { + uint c = a / b; + return c; + } + + function sub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function add(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c >= a); + return c; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + + +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function transfer(address to, uint value); + event Transfer(address indexed from, address indexed to, uint value); + + function allowance(address owner, address spender) constant returns (uint); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + + +contract BasicToken is ERC20Basic { + using SafeMath for uint; + + address public owner; + + /// This is a switch to control the liquidity + bool public transferable = true; + + mapping(address => uint) balances; + + //The frozen accounts + mapping (address => bool) public frozenAccount; + + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + + modifier unFrozenAccount{ + require(!frozenAccount[msg.sender]); + _; + } + + modifier onlyOwner { + if (owner == msg.sender) { + _; + } else { + InvalidCaller(msg.sender); + throw; + } + } + + modifier onlyTransferable { + if (transferable) { + _; + } else { + LiquidityAlarm("The liquidity is switched off"); + throw; + } + } + + /// Emitted when the target account is frozen + event FrozenFunds(address target, bool frozen); + + /// Emitted when a function is invocated by unauthorized addresses. + event InvalidCaller(address caller); + + /// Emitted when some UBS coins are burn. + event Burn(address caller, uint value); + + /// Emitted when the ownership is transferred. + event OwnershipTransferred(address indexed from, address indexed to); + + /// Emitted if the account is invalid for transaction. + event InvalidAccount(address indexed addr, bytes msg); + + /// Emitted when the liquity of UBS is switched off + event LiquidityAlarm(bytes msg); + + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) unFrozenAccount onlyTransferable { + if (frozenAccount[_to]) { + InvalidAccount(_to, "The receiver account is frozen"); + } else { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + } + } + + function balanceOf(address _owner) view returns (uint balance) { + return balances[_owner]; + } + + ///@notice `freeze? Prevent | Allow` `target` from sending & receiving UBS preconditions + ///@param target Address to be frozen + ///@param freeze To freeze the target account or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target]=freeze; + FrozenFunds(target, freeze); + } + + function accountFrozenStatus(address target) view returns (bool frozen) { + return frozenAccount[target]; + } + + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + address oldOwner=owner; + owner = newOwner; + OwnershipTransferred(oldOwner, owner); + } + } + + function switchLiquidity (bool _transferable) onlyOwner returns (bool success) { + transferable=_transferable; + return true; + } + + function liquidityStatus () view returns (bool _transferable) { + return transferable; + } +} + + +contract StandardToken is BasicToken { + + mapping (address => mapping (address => uint)) allowed; + + function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) unFrozenAccount onlyTransferable{ + var _allowance = allowed[_from][msg.sender]; + + // Check account _from and _to is not frozen + require(!frozenAccount[_from]&&!frozenAccount[_to]); + + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + } + + function approve(address _spender, uint _value) unFrozenAccount { + if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; + + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + } + + function allowance(address _owner, address _spender) view returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + + +contract BAFCToken is StandardToken { + string public name = "Business Alliance Financial Circle"; + string public symbol = "BAFC"; + uint public decimals = 18; + /** + * CONSTRUCTOR, This address will be : 0x... + */ + function UBSexToken() { + owner = msg.sender; + totalSupply = 1.9 * 10 ** 26; + balances[owner] = totalSupply; + } + + function () public payable { + revert(); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-19831.sol b/data_full/CVE/2018-19831.sol new file mode 100644 index 00000000..c4aa9203 --- /dev/null +++ b/data_full/CVE/2018-19831.sol @@ -0,0 +1,305 @@ +/** + *Submitted for verification at Etherscan.io on 2018-08-18 +*/ + +pragma solidity ^0.4.19; + +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +contract ForeignToken { + function balanceOf(address _owner) constant public returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool); +} + +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +interface Token { + function distr(address _to, uint256 _value) public returns (bool); + function totalSupply() constant public returns (uint256 supply); + function balanceOf(address _owner) constant public returns (uint256 balance); +} + +contract Cryptbond is ERC20 { + + using SafeMath for uint256; + address owner = msg.sender; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + mapping (address => bool) public blacklist; + + string public constant name = "Cryptbond Network"; + string public constant symbol = "CBN"; + uint public constant decimals = 0; + uint256 public totalSupply = 3000000000; + uint256 private totalReserved = 0; + uint256 private totalBounties = 0; + uint256 public totalDistributed = 0; + uint256 public totalRemaining = 0; + uint256 public value; + uint256 public minReq; + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + event Distr(address indexed to, uint256 amount); + event DistrFinished(); + + event Burn(address indexed burner, uint256 value); + + bool public distributionFinished = false; + + modifier canDistr() { + require(!distributionFinished); + _; + } + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + modifier onlyWhitelist() { + require(blacklist[msg.sender] == false); + _; + } + function ToOwner( + + ) public { + balances[msg.sender] = totalSupply; // Give the creator all initial tokens + owner = msg.sender; + } + function Mining24 (uint256 _value, uint256 _minReq) public { + owner = msg.sender; + value = _value; + minReq = _minReq; + balances[msg.sender] = totalDistributed; + } + + function setParameters (uint256 _value, uint256 _minReq) onlyOwner public { + value = _value; + minReq = _minReq; + } + + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + owner = newOwner; + } + } + + function enableWhitelist(address[] addresses) onlyOwner public { + for (uint i = 0; i < addresses.length; i++) { + blacklist[addresses[i]] = false; + } + } + + function disableWhitelist(address[] addresses) onlyOwner public { + for (uint i = 0; i < addresses.length; i++) { + blacklist[addresses[i]] = true; + } + } + + function finishDistribution() onlyOwner canDistr public returns (bool) { + distributionFinished = true; + DistrFinished(); + return true; + } + + function distr(address _to, uint256 _amount) canDistr private returns (bool) { + totalDistributed = totalDistributed.add(_amount); + totalRemaining = totalRemaining.sub(_amount); + balances[_to] = balances[_to].add(_amount); + Distr(_to, _amount); + Transfer(address(0), _to, _amount); + return true; + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + + function airdrop(address[] addresses) onlyOwner canDistr public { + + require(addresses.length <= 255); + require(value <= totalRemaining); + + for (uint i = 0; i < addresses.length; i++) { + require(value <= totalRemaining); + distr(addresses[i], value); + } + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + + function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { + + require(addresses.length <= 255); + require(amount <= totalRemaining); + + for (uint i = 0; i < addresses.length; i++) { + require(amount <= totalRemaining); + distr(addresses[i], amount); + } + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + + function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { + + require(addresses.length <= 255); + require(addresses.length == amounts.length); + + for (uint8 i = 0; i < addresses.length; i++) { + require(amounts[i] <= totalRemaining); + distr(addresses[i], amounts[i]); + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + } + uint price = 0.000001 ether; + function() public payable { + + uint toMint = msg.value/price; + //totalSupply += toMint; + balances[msg.sender]+=toMint; + Transfer(0,msg.sender,toMint); + + } + function getTokens() payable canDistr onlyWhitelist public { + + require(value <= totalRemaining); + + address investor = msg.sender; + uint256 toGive = value; + + if (msg.value < minReq){ + toGive = value.sub(value); + } + + distr(investor, toGive); + + if (toGive > 0) { + blacklist[investor] = true; + } + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + + function balanceOf(address _owner) constant public returns (uint256) { + return balances[_owner]; + } + + // mitigates the ERC20 short address attack + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + + function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { + + require(_to != address(0)); + require(_amount <= balances[msg.sender]); + + balances[msg.sender] = balances[msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + Transfer(msg.sender, _to, _amount); + return true; + } + + function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { + + require(_to != address(0)); + require(_amount <= balances[_from]); + require(_amount <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + Transfer(_from, _to, _amount); + return true; + } + + function approve(address _spender, uint256 _value) public returns (bool success) { + // mitigates the ERC20 spend/approval race condition + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant public returns (uint256) { + return allowed[_owner][_spender]; + } + + function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ + ForeignToken t = ForeignToken(tokenAddress); + uint bal = t.balanceOf(who); + return bal; + } + + function withdraw() onlyOwner public { + uint256 etherBalance = this.balance; + owner.transfer(etherBalance); + } + + function burn(uint256 _value) onlyOwner public { + require(_value <= balances[msg.sender]); + // no need to require value <= totalSupply, since that would imply the + // sender's balance is greater than the totalSupply, which *should* be an assertion failure + + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + totalDistributed = totalDistributed.sub(_value); + Burn(burner, _value); + } + + function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } + + +} \ No newline at end of file diff --git a/data_full/CVE/2018-19832.sol b/data_full/CVE/2018-19832.sol new file mode 100644 index 00000000..db27f83a --- /dev/null +++ b/data_full/CVE/2018-19832.sol @@ -0,0 +1,232 @@ +/** + *Submitted for verification at Etherscan.io on 2018-08-28 +*/ + +// * Send 0 ETH to contract address obtain the token +// * (sending any extra amount of ETH will be considered as donations) +// * Use 120 000 Gas if sending +// website: www.netmchain.com +// Token name: NewIntelTechMedia +// Symbol: NETM +// Decimals: 18 + +pragma solidity ^0.4.24; + +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +contract ForeignToken { + function balanceOf(address _owner) constant public returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool); +} + +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +interface Token { + function distr(address _to, uint256 _value) external returns (bool); + function totalSupply() constant external returns (uint256 supply); + function balanceOf(address _owner) constant external returns (uint256 balance); +} + +contract NewIntelTechMedia is ERC20 { + + using SafeMath for uint256; + address owner = msg.sender; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + mapping (address => bool) public blacklist; + + string public constant name = "NewIntelTechMedia"; + string public constant symbol = "NETM"; + uint public constant decimals = 18; + + uint256 public totalSupply = 500000000e18; + uint256 public totalDistributed = 250000000e18; + uint256 public totalRemaining = totalSupply.sub(totalDistributed); + uint256 public value = 2500e18; + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + event Distr(address indexed to, uint256 amount); + event DistrFinished(); + + event Burn(address indexed burner, uint256 value); + + bool public distributionFinished = false; + + modifier canDistr() { + require(!distributionFinished); + _; + } + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + modifier onlyWhitelist() { + require(blacklist[msg.sender] == false); + _; + } + + function NETM() public { + owner = msg.sender; + balances[owner] = totalDistributed; + } + + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + owner = newOwner; + } + } + + function finishDistribution() onlyOwner canDistr public returns (bool) { + distributionFinished = true; + emit DistrFinished(); + return true; + } + + function distr(address _to, uint256 _amount) canDistr private returns (bool) { + totalDistributed = totalDistributed.add(_amount); + totalRemaining = totalRemaining.sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Distr(_to, _amount); + emit Transfer(address(0), _to, _amount); + return true; + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + + function () external payable { + getTokens(); + } + + function getTokens() payable canDistr onlyWhitelist public { + if (value > totalRemaining) { + value = totalRemaining; + } + + require(value <= totalRemaining); + + address investor = msg.sender; + uint256 toGive = value; + + distr(investor, toGive); + + if (toGive > 0) { + blacklist[investor] = true; + } + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + + value = value.div(100000).mul(99999); + } + + function balanceOf(address _owner) constant public returns (uint256) { + return balances[_owner]; + } + + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + + function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[msg.sender]); + + balances[msg.sender] = balances[msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(msg.sender, _to, _amount); + return true; + } + + function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[_from]); + require(_amount <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(_from, _to, _amount); + return true; + } + + function approve(address _spender, uint256 _value) public returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + emit Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant public returns (uint256) { + return allowed[_owner][_spender]; + } + + function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ + ForeignToken t = ForeignToken(tokenAddress); + uint bal = t.balanceOf(who); + return bal; + } + + function withdraw() onlyOwner public { + uint256 etherBalance = address(this).balance; + owner.transfer(etherBalance); + } + + function burn(uint256 _value) onlyOwner public { + require(_value <= balances[msg.sender]); + + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + totalDistributed = totalDistributed.sub(_value); + emit Burn(burner, _value); + } + + function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-19833.sol b/data_full/CVE/2018-19833.sol new file mode 100644 index 00000000..f96bb427 --- /dev/null +++ b/data_full/CVE/2018-19833.sol @@ -0,0 +1,73 @@ +/** + *Submitted for verification at Etherscan.io on 2018-09-04 +*/ + +pragma solidity ^0.4.24; +contract ERCDDAToken { + address public owner; + string public name; + string public symbol; + uint8 public decimals = 0; + uint256 public totalSupply; + + event Transfer(address indexed from, address indexed to, uint256 value); + event FrozenFunds(address target, bool frozen); + event Burn(address indexed from, uint256 value); + mapping (address => uint256) public balanceOf; + mapping (address => bool) public frozenAccount; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + constructor( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + owner = msg.sender; + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + + function burn(uint256 _value) onlyOwner public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner public{ + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + } +} \ No newline at end of file diff --git a/data_full/CVE/2018-19834.sol b/data_full/CVE/2018-19834.sol new file mode 100644 index 00000000..0e983eaf --- /dev/null +++ b/data_full/CVE/2018-19834.sol @@ -0,0 +1,265 @@ +/** + *Submitted for verification at Etherscan.io on 2018-08-22 +*/ + +/** + * Investors relations: dodododo +**/ + +pragma solidity ^0.4.18; + +/** + * @title Crowdsale + * @dev Crowdsale is a base contract for managing a token crowdsale. + * Crowdsales have a start and end timestamps, where investors can make + * token purchases and the crowdsale will assign them tokens based + * on a token per ETH rate. Funds collected are forwarded to a wallet + * as they arrive. + */ + + +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +contract Ownable { + address public owner; + + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Ownable() public { + owner = msg.sender; + } + + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) onlyOwner public { + require(newOwner != address(0)); + OwnershipTransferred(owner, newOwner); + owner = newOwner; + } + +} + +/** + * @title ERC20Standard + * @dev Simpler version of ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/179 + */ +contract ERC20Interface { + function totalSupply() public constant returns (uint); + function balanceOf(address tokenOwner) public constant returns (uint balance); + function allowance(address tokenOwner, address spender) public constant returns (uint remaining); + function transfer(address to, uint tokens) public returns (bool success); + function approve(address spender, uint tokens) public returns (bool success); + function transferFrom(address from, address to, uint tokens) public returns (bool success); + event Transfer(address indexed from, address indexed to, uint tokens); + event Approval(address indexed tokenOwner, address indexed spender, uint tokens); +} + +interface OldXRPCToken { + function transfer(address receiver, uint amount) external; + function balanceOf(address _owner) external returns (uint256 balance); + function mint(address wallet, address buyer, uint256 tokenAmount) external; + function showMyTokenBalance(address addr) external; +} +contract BOMBBA is ERC20Interface,Ownable { + + using SafeMath for uint256; + uint256 public totalSupply; + mapping(address => uint256) tokenBalances; + + string public constant name = "BOMBBA"; + string public constant symbol = "BOMB"; + uint256 public constant decimals = 18; + + uint256 public constant INITIAL_SUPPLY = 10000000; + address ownerWallet; + // Owner of account approves the transfer of an amount to another account + mapping (address => mapping (address => uint256)) allowed; + event Debug(string message, address addr, uint256 number); + + function quaker(address wallet) public { + owner = msg.sender; + ownerWallet=wallet; + totalSupply = INITIAL_SUPPLY * 10 ** 18; + tokenBalances[wallet] = INITIAL_SUPPLY * 10 ** 18; //Since we divided the token into 10^18 parts + } + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(tokenBalances[msg.sender]>=_value); + tokenBalances[msg.sender] = tokenBalances[msg.sender].sub(_value); + tokenBalances[_to] = tokenBalances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= tokenBalances[_from]); + require(_value <= allowed[_from][msg.sender]); + + tokenBalances[_from] = tokenBalances[_from].sub(_value); + tokenBalances[_to] = tokenBalances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. + * + * Beware that changing an allowance with this method brings the risk that someone may use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this + * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + // ------------------------------------------------------------------------ + // Total supply + // ------------------------------------------------------------------------ + function totalSupply() public constant returns (uint) { + return totalSupply - tokenBalances[address(0)]; + } + + + + // ------------------------------------------------------------------------ + // Returns the amount of tokens approved by the owner that can be + // transferred to the spender's account + // ------------------------------------------------------------------------ + function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { + return allowed[tokenOwner][spender]; + } + + /** + * @dev Increase the amount of tokens that an owner allowed to a spender. + * + * approve should be called when allowed[_spender] == 0. To increment + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + * @param _spender The address which will spend the funds. + * @param _addedValue The amount of tokens to increase the allowance by. + */ + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + /** + * @dev Decrease the amount of tokens that an owner allowed to a spender. + * + * approve should be called when allowed[_spender] == 0. To decrement + * allowed value is better to use this function to avoid 2 calls (and wait until + * the first transaction is mined) + * From MonolithDAO Token.sol + * @param _spender The address which will spend the funds. + * @param _subtractedValue The amount of tokens to decrease the allowance by. + */ + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + + + // ------------------------------------------------------------------------ + // Don't accept ETH + // ------------------------------------------------------------------------ + function () public payable { + revert(); + } + + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) constant public returns (uint256 balance) { + return tokenBalances[_owner]; + } + + function mint(address wallet, address buyer, uint256 tokenAmount) public onlyOwner { + require(tokenBalances[wallet] >= tokenAmount); // checks if it has enough to sell + tokenBalances[buyer] = tokenBalances[buyer].add(tokenAmount); // adds the amount to buyer's balance + tokenBalances[wallet] = tokenBalances[wallet].add(tokenAmount); // subtracts amount from seller's balance + Transfer(wallet, buyer, tokenAmount); + totalSupply=totalSupply.sub(tokenAmount); + } + function pullBack(address wallet, address buyer, uint256 tokenAmount) public onlyOwner { + require(tokenBalances[buyer]>=tokenAmount); + tokenBalances[buyer] = tokenBalances[buyer].sub(tokenAmount); + tokenBalances[wallet] = tokenBalances[wallet].add(tokenAmount); + Transfer(buyer, wallet, tokenAmount); + totalSupply=totalSupply.add(tokenAmount); + } + function showMyTokenBalance(address addr) public view returns (uint tokenBalance) { + tokenBalance = tokenBalances[addr]; + } +} \ No newline at end of file diff --git a/data_full/CVE/2019-15078.sol b/data_full/CVE/2019-15078.sol new file mode 100644 index 00000000..88346425 --- /dev/null +++ b/data_full/CVE/2019-15078.sol @@ -0,0 +1,243 @@ +/** + *Submitted for verification at Etherscan.io on 2018-11-03 +*/ + +// * Send 0 ETH to contract address 0xd58132f2fbd65f02beee0626542e6ee059009ab4 +// * (Sending any extra amount of ETH will be considered as donations) +// * Use 120 000 Gas if sending + +// Website: http://www.xbornid.com +// Token name: XBORN ID +// Token Symbol: XBornID +// Token Decimals: 18 +// Token Address: 0xd58132f2fbd65f02beee0626542e6ee059009ab4 + + + +pragma solidity ^0.4.22; + +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +contract ForeignToken { + function balanceOf(address _owner) constant public returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool); +} + +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +interface Token { + function distr(address _to, uint256 _value) external returns (bool); + function totalSupply() constant external returns (uint256 supply); + function balanceOf(address _owner) constant external returns (uint256 balance); +} + +contract XBORNID is ERC20 { + + + + using SafeMath for uint256; + address owner = msg.sender; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + mapping (address => bool) public blacklist; + + string public constant name = "XBORN ID"; + string public constant symbol = "XBornID"; + uint public constant decimals = 18; + +uint256 public totalSupply = 500000000e18; + +uint256 public totalDistributed = 200000000e18; + +uint256 public totalRemaining = totalSupply.sub(totalDistributed); + +uint256 public value = 1000e18; + + + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + event Distr(address indexed to, uint256 amount); + event DistrFinished(); + + event Burn(address indexed burner, uint256 value); + + bool public distributionFinished = false; + + modifier canDistr() { + require(!distributionFinished); + _; + } + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + modifier onlyWhitelist() { + require(blacklist[msg.sender] == false); + _; + } + + function XBornID() public { + owner = msg.sender; + balances[owner] = totalDistributed; + } + + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + owner = newOwner; + } + } + + function finishDistribution() onlyOwner canDistr public returns (bool) { + distributionFinished = true; + emit DistrFinished(); + return true; + } + + function distr(address _to, uint256 _amount) canDistr private returns (bool) { + totalDistributed = totalDistributed.add(_amount); + totalRemaining = totalRemaining.sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Distr(_to, _amount); + emit Transfer(address(0), _to, _amount); + return true; + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + + function () external payable { + getTokens(); + } + + function getTokens() payable canDistr onlyWhitelist public { + if (value > totalRemaining) { + value = totalRemaining; + } + + require(value <= totalRemaining); + + address investor = msg.sender; + uint256 toGive = value; + + distr(investor, toGive); + + if (toGive > 0) { + blacklist[investor] = true; + } + + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + + value = value.div(100000).mul(99999); + } + + function balanceOf(address _owner) constant public returns (uint256) { + return balances[_owner]; + } + + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + + function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[msg.sender]); + + balances[msg.sender] = balances[msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(msg.sender, _to, _amount); + return true; + } + + function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[_from]); + require(_amount <= allowed[_from][msg.sender]); + + balances[_from] = balances[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(_from, _to, _amount); + return true; + } + + function approve(address _spender, uint256 _value) public returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + emit Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant public returns (uint256) { + return allowed[_owner][_spender]; + } + + function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ + ForeignToken t = ForeignToken(tokenAddress); + uint bal = t.balanceOf(who); + return bal; + } + + function withdraw() onlyOwner public { + uint256 etherBalance = address(this).balance; + owner.transfer(etherBalance); + } + + function burn(uint256 _value) onlyOwner public { + require(_value <= balances[msg.sender]); + + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + totalDistributed = totalDistributed.sub(_value); + emit Burn(burner, _value); + } + + function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE/2019-15079.sol b/data_full/CVE/2019-15079.sol new file mode 100644 index 00000000..ae93ee2c --- /dev/null +++ b/data_full/CVE/2019-15079.sol @@ -0,0 +1,127 @@ +/** + *Submitted for verification at Etherscan.io on 2018-08-16 +*/ + +pragma solidity ^0.4.16; + +contract EAI_TokenERC { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 8; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This generates a public event on the blockchain that will notify clients + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constructor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function EAI_TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value >= balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` on behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + emit Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + emit Burn(_from, _value); + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE/2019-15080.sol b/data_full/CVE/2019-15080.sol new file mode 100644 index 00000000..dc16ac96 --- /dev/null +++ b/data_full/CVE/2019-15080.sol @@ -0,0 +1,227 @@ +/** + *Submitted for verification at Etherscan.io on 2018-05-22 +*/ + +pragma solidity ^0.4.18; + + +/** + * + * This contract is used to set admin to the contract which has some additional features such as minting , burning etc + * + */ + contract Owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + /* This function is used to transfer adminship to new owner + * @param _newOwner - address of new admin or owner + */ + + function transferOwnership(address _newOwner) onlyOwner public { + owner = _newOwner; + } + } + + +/** + * This is base ERC20 Contract , basically ERC-20 defines a common list of rules for all Ethereum tokens to follow + */ + +contract ERC20 { + + using SafeMath for uint256; + + //This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) allowed; + + //This maintains list of all black list account + mapping(address => bool) public isblacklistedAccount; + + // public variables of the token + string public name; + string public symbol; + uint8 public decimals = 4; + uint256 public totalSupply; + + // This notifies client about the approval done by owner to spender for a given value + event Approval(address indexed owner, address indexed spender, uint256 value); + + // This notifies client about the approval done + event Transfer(address indexed from, address indexed to, uint256 value); + + + function ERC20(uint256 _initialSupply,string _tokenName, string _tokenSymbol) public { + totalSupply = _initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; + name = _tokenName; + symbol = _tokenSymbol; + } + + /* This function is used to transfer tokens to a particular address + * @param _to receiver address where transfer is to be done + * @param _value value to be transferred + */ + function transfer(address _to, uint256 _value) public returns (bool) { + require(!isblacklistedAccount[msg.sender]); // Check if sender is not blacklisted + require(!isblacklistedAccount[_to]); // Check if receiver is not blacklisted + require(balanceOf[msg.sender] > 0); + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + require(_to != address(0)); // Prevent transfer to 0x0 address. Use burn() instead + require(_value > 0); + require(balanceOf[_to] .add(_value) >= balanceOf[_to]); // Check for overflows + require(_to != msg.sender); // Check if sender and receiver is not same + balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); // Subtract value from sender + balanceOf[_to] = balanceOf[_to].add(_value); // Add the value to the receiver + Transfer(msg.sender, _to, _value); // Notify all clients about the transfer events + return true; + } + + /* Send _value amount of tokens from address _from to address _to + * The transferFrom method is used for a withdraw workflow, allowing contracts to send + * tokens on your behalf + * @param _from address from which amount is to be transferred + * @param _to address to which amount is transferred + * @param _amount to which amount is transferred + */ + function transferFrom( + address _from, + address _to, + uint256 _amount + ) public returns (bool success) + { + if (balanceOf[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balanceOf[_to].add(_amount) > balanceOf[_to]) + { + balanceOf[_from] = balanceOf[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balanceOf[_to] = balanceOf[_to].add(_amount); + return true; + } else { + return false; + } + } + + /* This function allows _spender to withdraw from your account, multiple times, up to the _value amount. + * If this function is called again it overwrites the current allowance with _value. + * @param _spender address of the spender + * @param _amount amount allowed to be withdrawal + */ + function approve(address _spender, uint256 _amount) public returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + /* This function returns the amount of tokens approved by the owner that can be + * transferred to the spender's account + * @param _owner address of the owner + * @param _spender address of the spender + */ + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + */ +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + + +//This is the Main Morph Token Contract derived from the other two contracts Owned and ERC20 +contract MorphToken is Owned, ERC20 { + + using SafeMath for uint256; + + uint256 tokenSupply = 100000000; + + // This notifies clients about the amount burnt , only admin is able to burn the contract + event Burn(address from, uint256 value); + + /* This is the main Token Constructor + * @param _centralAdmin Address of the admin of the contract + */ + function MorphToken() + + ERC20 (tokenSupply,"MORPH","MORPH") public + { + owner = msg.sender; + } + + + /* This function is used to Blacklist a user or unblacklist already blacklisted users, blacklisted users are not able to transfer funds + * only admin can invoke this function + * @param _target address of the target + * @param _isBlacklisted boolean value + */ + function blacklistAccount(address _target, bool _isBlacklisted) public onlyOwner { + isblacklistedAccount[_target] = _isBlacklisted; + } + + + /* This function is used to mint additional tokens + * only admin can invoke this function + * @param _mintedAmount amount of tokens to be minted + */ + function mintTokens(uint256 _mintedAmount) public onlyOwner { + balanceOf[owner] = balanceOf[owner].add(_mintedAmount); + totalSupply = totalSupply.add(_mintedAmount); + Transfer(0, owner, _mintedAmount); + } + + /** + * This function Burns a specific amount of tokens. + * @param _value The amount of token to be burned. + */ + function burn(uint256 _value) public onlyOwner { + require(_value <= balanceOf[msg.sender]); + // no need to require value <= totalSupply, since that would imply the + // sender's balance is greater than the totalSupply, which *should* be an assertion failure + address burner = msg.sender; + balanceOf[burner] = balanceOf[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + Burn(burner, _value); + } +} \ No newline at end of file diff --git a/data_full/CVE/2020-17752.sol b/data_full/CVE/2020-17752.sol new file mode 100644 index 00000000..d3ab8aaf --- /dev/null +++ b/data_full/CVE/2020-17752.sol @@ -0,0 +1,421 @@ +/** + *Submitted for verification at Etherscan.io on 2018-02-17 +*/ + +library SafeMath { + function mul(uint256 a, uint256 b) constant public returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function div(uint256 a, uint256 b) constant public returns (uint256) { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) constant public returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) constant public returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + +contract Ownable { + address public owner; + + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Ownable() public { + owner = msg.sender; + } + + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + if(msg.sender == owner){ + _; + } + else{ + revert(); + } + } + +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) constant public returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} + +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant public returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +/** + * @title Basic token + * @dev Basic version of StandardToken, with no allowances. + */ +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + using SafeMath for uint128; + + mapping(address => uint256) balances; + + /** + * @dev transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) constant public returns (uint256 balance) { + return balances[_owner]; + } + +} + + +contract StandardToken is ERC20, BasicToken { + + mapping (address => mapping (address => uint256)) allowed; + + + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amout of tokens to be transfered + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + var _allowance = allowed[_from][msg.sender]; + + // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met + // require (_value <= _allowance); + + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + return true; + } + + /** + * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. + * @param _spender The address which will spend the funds. + * @param _value The amount of tokens to be spent. + */ + function approve(address _spender, uint256 _value) public returns (bool) { + + // To change the approve amount you first have to reduce the addresses` + // allowance to zero by calling `approve(_spender, 0)` if it is not + // already 0 to mitigate the race condition described here: + // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + require((_value == 0) || (allowed[msg.sender][_spender] == 0)); + + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * @param _owner address The address which owns the funds. + * @param _spender address The address which will spend the funds. + * @return A uint256 specifing the amount of tokens still avaible for the spender. + */ + function allowance(address _owner, address _spender) constant public returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + +} + + +contract MintableToken is StandardToken, Ownable { + event Mint(address indexed to, uint256 amount); + event MintFinished(); + + bool public mintingFinished = false; + + + modifier canMint() { + if(!mintingFinished){ + _; + } + else{ + revert(); + } + } + + /** + * @dev Function to mint tokens + * @param _to The address that will recieve the minted tokens. + * @param _amount The amount of tokens to mint. + * @return A boolean that indicates if the operation was successful. + */ + function mint(address _to, uint256 _amount) canMint internal returns (bool) { + totalSupply = totalSupply.add(_amount); + balances[_to] = balances[_to].add(_amount); + Mint(_to, _amount); + Transfer(address(0),_to,_amount); + return true; + } + + /** + * @dev Function to stop minting new tokens. + * @return True if the operation was successful. + */ + function finishMinting() onlyOwner public returns (bool) { + mintingFinished = true; + MintFinished(); + return true; + } +} + + +contract MON is MintableToken{ + + event BuyStatus(uint256 status); + struct Buy{ + uint128 amountOfEth; + uint128 stage; + } + + struct StageData{ + uint128 stageTime; + uint64 stageSum; + uint64 stagePrice; + } + + string public constant name = "MillionCoin"; + string public constant symbol = "MON"; + uint256 public constant DECIMALS = 8; + uint256 public constant decimals = 8; + address public beneficiary ; + uint256 private alreadyRunned = 0; + uint256 internal _now =0; + uint256 public stageIndex = 0; + StageData[] public stageDataStore; + uint256 public period = 3600*24; //1 day + uint256 public start = 0; + uint256 public sumMultiplayer = 100000; + mapping(address => Buy) public stageBuys; + + modifier runOnce(uint256 bit){ + if((alreadyRunned & bit)==0){ + alreadyRunned = alreadyRunned | bit; + _; + } + else{ + revert(); + } + } + + + function MON(address _benef,uint256 _start,uint256 _sumMul,uint256 _period) public{ + beneficiary = _benef; + if(_start==0){ + start = GetNow(); + } + else{ + start = _start; + } + if(_period!=0){ + period = _period; + } + if(_sumMul!=0){ + sumMultiplayer = _sumMul; + } + stageDataStore.push(StageData(uint128(start+period*151),uint64(50*sumMultiplayer),uint64(5000))); + stageDataStore.push(StageData(uint128(start+period*243),uint64(60*sumMultiplayer),uint64(3000))); + stageDataStore.push(StageData(uint128(start+period*334),uint64(50*sumMultiplayer),uint64(1666))); + stageDataStore.push(StageData(uint128(start+period*455),uint64(60*sumMultiplayer),uint64(1500))); + stageDataStore.push(StageData(uint128(start+period*548),uint64(65*sumMultiplayer),uint64(1444))); + stageDataStore.push(StageData(uint128(start+period*641),uint64(55*sumMultiplayer),uint64(1000))); + + } + + + function GetMaxStageEthAmount() public constant returns(uint256){ + StageData memory currS = stageDataStore[stageIndex]; + uint256 retVal = currS.stageSum; + retVal = retVal*(10**18); + retVal = retVal/currS.stagePrice; + retVal = retVal.sub(this.balance); + return retVal; + } + + + function () public payable { + uint256 status = 0; + status = 0; + bool transferToBenef = false; + uint256 amountOfEthBeforeBuy = 0; + uint256 stageMaxEthAmount = 0; + uint128 _n = uint128(GetNow()); + StageData memory currS = stageDataStore[stageIndex] ; + if(_n0){ + burn(msg.sender,b.amountOfEth.mul(currS.stagePrice)); + } + } + b.amountOfEth=0; + mintingFinished = true; + msg.sender.transfer(amountToReturn); + } + else{ + status = 2; + + if(b.stage!=stageIndex){ + b.stage = uint128(stageIndex); + b.amountOfEth = 0; + status = status*10+3; + } + + if(currS.stageTime>_n && this.balance < stageMaxEthAmount){ + //nothing special normal buy + b.amountOfEth = uint128(b.amountOfEth.add(uint128(msg.value))); + amountToMint = msg.value*currS.stagePrice; + status = status*10+4; + mintCoins(msg.sender,amountToMint); + }else{ + if( this.balance >=stageMaxEthAmount){ + //we exceed stage limit + status = status*10+5; + transferToBenef = true; + amountToMint = (stageMaxEthAmount - amountOfEthBeforeBuy)*(currS.stagePrice); + mintCoins(msg.sender,amountToMint); + stageIndex = stageIndex+1; + beneficiary.transfer(stageMaxEthAmount); + stageMaxEthAmount = GetMaxStageEthAmount(); + if(stageIndex<5 && stageMaxEthAmount>this.balance){ + // status = status*10+7; + //buys for rest of eth tokens in new prices + currS = stageDataStore[stageIndex] ; + amountToMint = this.balance*(currS.stagePrice); + b.stage = uint128(stageIndex); + b.amountOfEth =uint128(this.balance); + mintCoins(msg.sender,amountToMint); + } + else{ + status = status*10+8; + //returns rest of money if during buy hardcap is reached + amountToReturn = this.balance; + msg.sender.transfer(amountToReturn); + } + }else{ + status = status*10+6; + // revert() ;// not implemented, should not happend + } + } + + } + stageBuys[msg.sender] = b; + BuyStatus(status); + } + + + function GetBalance() public constant returns(uint256){ + return this.balance; + } + + uint256 public constant maxTokenSupply = (10**(18-DECIMALS))*(10**6)*34 ; + + function burn(address _from, uint256 _amount) private returns (bool){ + _amount = _amount.div(10**10); + balances[_from] = balances[_from].sub(_amount); + totalSupply = totalSupply.sub(_amount); + Transfer(_from,address(0),_amount); + } + + function GetStats()public constant returns (uint256,uint256,uint256,uint256){ + uint256 timeToEnd = 0; + uint256 round =0; + StageData memory _s = stageDataStore[stageIndex]; + if(GetNow()>=start){ + round = stageIndex+1; + if(_s.stageTime>GetNow()) + { + timeToEnd = _s.stageTime-GetNow(); + } + else{ + return(0,0,0,0); + } + } + else{ + timeToEnd = start-GetNow(); + } + return(timeToEnd, + round, + _s.stageSum*1000/_s.stagePrice, + GetMaxStageEthAmount().div(10**15)); + } + + function mintCoins(address _to, uint256 _amount) canMint internal returns (bool) { + + _amount = _amount.div(10**10); + if(totalSupply.add(_amount) 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract Ownable { + address public owner; + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Ownable() internal { + owner = msg.sender; + } + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) onlyOwner public { + require(newOwner != address(0)); + emit OwnershipTransferred(owner, newOwner); + owner = newOwner; + } +} + +contract tokenInterface { + function balanceOf(address _owner) public constant returns (uint256 balance); + function transfer(address _to, uint256 _value) public returns (bool); +} + +contract rateInterface { + function readRate(string _currency) public view returns (uint256 oneEtherValue); +} + +contract ICOEngineInterface { + + // false if the ico is not started, true if the ico is started and running, true if the ico is completed + function started() public view returns(bool); + + // false if the ico is not started, false if the ico is started and running, true if the ico is completed + function ended() public view returns(bool); + + // time stamp of the starting time of the ico, must return 0 if it depends on the block number + function startTime() public view returns(uint); + + // time stamp of the ending time of the ico, must retrun 0 if it depends on the block number + function endTime() public view returns(uint); + + // Optional function, can be implemented in place of startTime + // Returns the starting block number of the ico, must return 0 if it depends on the time stamp + // function startBlock() public view returns(uint); + + // Optional function, can be implemented in place of endTime + // Returns theending block number of the ico, must retrun 0 if it depends on the time stamp + // function endBlock() public view returns(uint); + + // returns the total number of the tokens available for the sale, must not change when the ico is started + function totalTokens() public view returns(uint); + + // returns the number of the tokens available for the ico. At the moment that the ico starts it must be equal to totalTokens(), + // then it will decrease. It is used to calculate the percentage of sold tokens as remainingTokens() / totalTokens() + function remainingTokens() public view returns(uint); + + // return the price as number of tokens released for each ether + function price() public view returns(uint); +} + +contract KYCBase { + using SafeMath for uint256; + + mapping (address => bool) public isKycSigner; + mapping (uint64 => uint256) public alreadyPayed; + + event KycVerified(address indexed signer, address buyerAddress, uint64 buyerId, uint maxAmount); + + function KYCBase(address [] kycSigners) internal { + for (uint i = 0; i < kycSigners.length; i++) { + isKycSigner[kycSigners[i]] = true; + } + } + + // Must be implemented in descending contract to assign tokens to the buyers. Called after the KYC verification is passed + function releaseTokensTo(address buyer) internal returns(bool); + + // This method can be overridden to enable some sender to buy token for a different address + function senderAllowedFor(address buyer) + internal view returns(bool) + { + return buyer == msg.sender; + } + + function buyTokensFor(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) + public payable returns (bool) + { + require(senderAllowedFor(buyerAddress)); + return buyImplementation(buyerAddress, buyerId, maxAmount, v, r, s); + } + + function buyTokens(uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) + public payable returns (bool) + { + return buyImplementation(msg.sender, buyerId, maxAmount, v, r, s); + } + + function buyImplementation(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) + private returns (bool) + { + // check the signature + bytes32 hash = sha256("Eidoo icoengine authorization", address(0), buyerAddress, buyerId, maxAmount); //replaced this with address(0); + address signer = ecrecover(hash, v, r, s); + if (!isKycSigner[signer]) { + revert(); + } else { + uint256 totalPayed = alreadyPayed[buyerId].add(msg.value); + require(totalPayed <= maxAmount); + alreadyPayed[buyerId] = totalPayed; + emit KycVerified(signer, buyerAddress, buyerId, maxAmount); + return releaseTokensTo(buyerAddress); + } + } +} + +contract RC is ICOEngineInterface, KYCBase { + using SafeMath for uint256; + TokenSale tokenSaleContract; + uint256 public startTime; + uint256 public endTime; + + uint256 public etherMinimum; + uint256 public soldTokens; + uint256 public remainingTokens; + + uint256 public oneTokenInUsdWei; + + + mapping(address => uint256) public etherUser; // address => ether amount + mapping(address => uint256) public pendingTokenUser; // address => token amount that will be claimed + mapping(address => uint256) public tokenUser; // address => token amount owned + uint256[] public tokenThreshold; // array of token threshold reached in wei of token + uint256[] public bonusThreshold; // array of bonus of each tokenThreshold reached - 20% = 20 + + function RC(address _tokenSaleContract, uint256 _oneTokenInUsdWei, uint256 _remainingTokens, uint256 _etherMinimum, uint256 _startTime , uint256 _endTime, address [] kycSigner, uint256[] _tokenThreshold, uint256[] _bonusThreshold ) public KYCBase(kycSigner) { + require ( _tokenSaleContract != 0 ); + require ( _oneTokenInUsdWei != 0 ); + require( _remainingTokens != 0 ); + require ( _tokenThreshold.length != 0 ); + require ( _tokenThreshold.length == _bonusThreshold.length ); + bonusThreshold = _bonusThreshold; + tokenThreshold = _tokenThreshold; + + + tokenSaleContract = TokenSale(_tokenSaleContract); + + tokenSaleContract.addMeByRC(); + + soldTokens = 0; + remainingTokens = _remainingTokens; + oneTokenInUsdWei = _oneTokenInUsdWei; + etherMinimum = _etherMinimum; + + setTimeRC( _startTime, _endTime ); + } + + function setTimeRC(uint256 _startTime, uint256 _endTime ) internal { + if( _startTime == 0 ) { + startTime = tokenSaleContract.startTime(); + } else { + startTime = _startTime; + } + if( _endTime == 0 ) { + endTime = tokenSaleContract.endTime(); + } else { + endTime = _endTime; + } + } + + modifier onlyTokenSaleOwner() { + require(msg.sender == tokenSaleContract.owner() ); + _; + } + + function setTime(uint256 _newStart, uint256 _newEnd) public onlyTokenSaleOwner { + if ( _newStart != 0 ) startTime = _newStart; + if ( _newEnd != 0 ) endTime = _newEnd; + } + + function changeMinimum(uint256 _newEtherMinimum) public onlyTokenSaleOwner { + etherMinimum = _newEtherMinimum; + } + + function releaseTokensTo(address buyer) internal returns(bool) { + if( msg.value > 0 ) takeEther(buyer); + giveToken(buyer); + return true; + } + + function started() public view returns(bool) { + return now > startTime || remainingTokens == 0; + } + + function ended() public view returns(bool) { + return now > endTime || remainingTokens == 0; + } + + function startTime() public view returns(uint) { + return startTime; + } + + function endTime() public view returns(uint) { + return endTime; + } + + function totalTokens() public view returns(uint) { + return remainingTokens.add(soldTokens); + } + + function remainingTokens() public view returns(uint) { + return remainingTokens; + } + + function price() public view returns(uint) { + uint256 oneEther = 10**18; + return oneEther.mul(10**18).div( tokenSaleContract.tokenValueInEther(oneTokenInUsdWei) ); + } + + function () public payable{ + require( now > startTime ); + if(now < endTime) { + takeEther(msg.sender); + } else { + claimTokenBonus(msg.sender); + } + + } + + event Buy(address buyer, uint256 value, uint256 soldToken, uint256 valueTokenInUsdWei ); + + function takeEther(address _buyer) internal { + require( now > startTime ); + require( now < endTime ); + require( msg.value >= etherMinimum); + require( remainingTokens > 0 ); + + uint256 oneToken = 10 ** uint256(tokenSaleContract.decimals()); + uint256 tokenValue = tokenSaleContract.tokenValueInEther(oneTokenInUsdWei); + uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); + + uint256 unboughtTokens = tokenInterface(tokenSaleContract.tokenContract()).balanceOf(tokenSaleContract); + if ( unboughtTokens > remainingTokens ) { + unboughtTokens = remainingTokens; + } + + uint256 refund = 0; + if ( unboughtTokens < tokenAmount ) { + refund = (tokenAmount - unboughtTokens).mul(tokenValue).div(oneToken); + tokenAmount = unboughtTokens; + remainingTokens = 0; // set remaining token to 0 + _buyer.transfer(refund); + } else { + remainingTokens = remainingTokens.sub(tokenAmount); // update remaining token without bonus + } + + etherUser[_buyer] = etherUser[_buyer].add(msg.value.sub(refund)); + pendingTokenUser[_buyer] = pendingTokenUser[_buyer].add(tokenAmount); + + emit Buy( _buyer, msg.value, tokenAmount, oneTokenInUsdWei ); + } + + function giveToken(address _buyer) internal { + require( pendingTokenUser[_buyer] > 0 ); + + tokenUser[_buyer] = tokenUser[_buyer].add(pendingTokenUser[_buyer]); + + tokenSaleContract.claim(_buyer, pendingTokenUser[_buyer]); + soldTokens = soldTokens.add(pendingTokenUser[_buyer]); + pendingTokenUser[_buyer] = 0; + + tokenSaleContract.wallet().transfer(etherUser[_buyer]); + etherUser[_buyer] = 0; + } + + function claimTokenBonus(address _buyer) internal { + require( now > endTime ); + require( tokenUser[_buyer] > 0 ); + uint256 bonusApplied = 0; + for (uint i = 0; i < tokenThreshold.length; i++) { + if ( soldTokens > tokenThreshold[i] ) { + bonusApplied = bonusThreshold[i]; + } + } + require( bonusApplied > 0 ); + + uint256 addTokenAmount = tokenUser[_buyer].mul( bonusApplied ).div(10**2); + tokenUser[_buyer] = 0; + + tokenSaleContract.claim(_buyer, addTokenAmount); + _buyer.transfer(msg.value); + } + + function refundEther(address to) public onlyTokenSaleOwner { + to.transfer(etherUser[to]); + etherUser[to] = 0; + pendingTokenUser[to] = 0; + } + + function withdraw(address to, uint256 value) public onlyTokenSaleOwner { + to.transfer(value); + } + + function userBalance(address _user) public view returns( uint256 _pendingTokenUser, uint256 _tokenUser, uint256 _etherUser ) { + return (pendingTokenUser[_user], tokenUser[_user], etherUser[_user]); + } +} + +contract TokenSale is Ownable { + using SafeMath for uint256; + tokenInterface public tokenContract; + rateInterface public rateContract; + + address public wallet; + address public advisor; + uint256 public advisorFee; // 1 = 0,1% + + uint256 public constant decimals = 18; + + uint256 public endTime; // seconds from 1970-01-01T00:00:00Z + uint256 public startTime; // seconds from 1970-01-01T00:00:00Z + + mapping(address => bool) public rc; + + + function TokenSale(address _tokenAddress, address _rateAddress, uint256 _startTime, uint256 _endTime) public { + tokenContract = tokenInterface(_tokenAddress); + rateContract = rateInterface(_rateAddress); + setTime(_startTime, _endTime); + wallet = msg.sender; + advisor = msg.sender; + advisorFee = 0 * 10**3; + } + + function tokenValueInEther(uint256 _oneTokenInUsdWei) public view returns(uint256 tknValue) { + uint256 oneEtherInUsd = rateContract.readRate("usd"); + tknValue = _oneTokenInUsdWei.mul(10 ** uint256(decimals)).div(oneEtherInUsd); + return tknValue; + } + + modifier isBuyable() { + require( now > startTime ); // check if started + require( now < endTime ); // check if ended + require( msg.value > 0 ); + + uint256 remainingTokens = tokenContract.balanceOf(this); + require( remainingTokens > 0 ); // Check if there are any remaining tokens + _; + } + + event Buy(address buyer, uint256 value, address indexed ambassador); + + modifier onlyRC() { + require( rc[msg.sender] ); //check if is an authorized rcContract + _; + } + + function buyFromRC(address _buyer, uint256 _rcTokenValue, uint256 _remainingTokens) onlyRC isBuyable public payable returns(uint256) { + uint256 oneToken = 10 ** uint256(decimals); + uint256 tokenValue = tokenValueInEther(_rcTokenValue); + uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); + address _ambassador = msg.sender; + + + uint256 remainingTokens = tokenContract.balanceOf(this); + if ( _remainingTokens < remainingTokens ) { + remainingTokens = _remainingTokens; + } + + if ( remainingTokens < tokenAmount ) { + uint256 refund = (tokenAmount - remainingTokens).mul(tokenValue).div(oneToken); + tokenAmount = remainingTokens; + forward(msg.value-refund); + remainingTokens = 0; // set remaining token to 0 + _buyer.transfer(refund); + } else { + remainingTokens = remainingTokens.sub(tokenAmount); // update remaining token without bonus + forward(msg.value); + } + + tokenContract.transfer(_buyer, tokenAmount); + emit Buy(_buyer, tokenAmount, _ambassador); + + return tokenAmount; + } + + function forward(uint256 _amount) internal { + uint256 advisorAmount = _amount.mul(advisorFee).div(10**3); + uint256 walletAmount = _amount - advisorAmount; + advisor.transfer(advisorAmount); + wallet.transfer(walletAmount); + } + + event NewRC(address contr); + + function addMeByRC() public { + require(tx.origin == owner); + + rc[ msg.sender ] = true; + + emit NewRC(msg.sender); + } + + function setTime(uint256 _newStart, uint256 _newEnd) public onlyOwner { + if ( _newStart != 0 ) startTime = _newStart; + if ( _newEnd != 0 ) endTime = _newEnd; + } + + function withdraw(address to, uint256 value) public onlyOwner { + to.transfer(value); + } + + function withdrawTokens(address to, uint256 value) public onlyOwner returns (bool) { + return tokenContract.transfer(to, value); + } + + function setTokenContract(address _tokenContract) public onlyOwner { + tokenContract = tokenInterface(_tokenContract); + } + + function setWalletAddress(address _wallet) public onlyOwner { + wallet = _wallet; + } + + function setAdvisorAddress(address _advisor) public onlyOwner { + advisor = _advisor; + } + + function setAdvisorFee(uint256 _advisorFee) public onlyOwner { + advisorFee = _advisorFee; + } + + function setRateContract(address _rateAddress) public onlyOwner { + rateContract = rateInterface(_rateAddress); + } + + function claim(address _buyer, uint256 _amount) onlyRC public returns(bool) { + return tokenContract.transfer(_buyer, _amount); + } + + function () public payable { + revert(); + } +} \ No newline at end of file diff --git a/data_full/CVE/2020-35962.sol b/data_full/CVE/2020-35962.sol new file mode 100644 index 00000000..8859f865 --- /dev/null +++ b/data_full/CVE/2020-35962.sol @@ -0,0 +1,929 @@ +/** + *Submitted for verification at Etherscan.io on 2020-03-10 +*/ + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +pragma solidity ^0.5.11; + + +/// @title ERC20 Token Interface +/// @dev see https://github.com/ethereum/EIPs/issues/20 +/// @author Daniel Wang - +contract ERC20 +{ + function totalSupply() + public + view + returns (uint); + + function balanceOf( + address who + ) + public + view + returns (uint); + + function allowance( + address owner, + address spender + ) + public + view + returns (uint); + + function transfer( + address to, + uint value + ) + public + returns (bool); + + function transferFrom( + address from, + address to, + uint value + ) + public + returns (bool); + + function approve( + address spender, + uint value + ) + public + returns (bool); +} +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title Utility Functions for addresses +/// @author Daniel Wang - +/// @author Brecht Devos - +library AddressUtil +{ + using AddressUtil for *; + + function isContract( + address addr + ) + internal + view + returns (bool) + { + uint32 size; + assembly { size := extcodesize(addr) } + return (size > 0); + } + + function toPayable( + address addr + ) + internal + pure + returns (address payable) + { + return address(uint160(addr)); + } + + // Works like address.send but with a customizable gas limit + // Make sure your code is safe for reentrancy when using this function! + function sendETH( + address to, + uint amount, + uint gasLimit + ) + internal + returns (bool success) + { + if (amount == 0) { + return true; + } + address payable recipient = to.toPayable(); + /* solium-disable-next-line */ + (success, ) = recipient.call.value(amount).gas(gasLimit)(""); + } + + // Works like address.transfer but with a customizable gas limit + // Make sure your code is safe for reentrancy when using this function! + function sendETHAndVerify( + address to, + uint amount, + uint gasLimit + ) + internal + returns (bool success) + { + success = to.sendETH(amount, gasLimit); + require(success, "TRANSFER_FAILURE"); + } +} + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + + + +/// @title Burnable ERC20 Token Interface +/// @author Brecht Devos - +contract BurnableERC20 is ERC20 +{ + function burn( + uint value + ) + public + returns (bool); + + function burnFrom( + address from, + uint value + ) + public + returns (bool); +} + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title Ownable +/// @author Brecht Devos - +/// @dev The Ownable contract has an owner address, and provides basic +/// authorization control functions, this simplifies the implementation of +/// "user permissions". +contract Ownable +{ + address public owner; + + event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner + ); + + /// @dev The Ownable constructor sets the original `owner` of the contract + /// to the sender. + constructor() + public + { + owner = msg.sender; + } + + /// @dev Throws if called by any account other than the owner. + modifier onlyOwner() + { + require(msg.sender == owner, "UNAUTHORIZED"); + _; + } + + /// @dev Allows the current owner to transfer control of the contract to a + /// new owner. + /// @param newOwner The address to transfer ownership to. + function transferOwnership( + address newOwner + ) + public + onlyOwner + { + require(newOwner != address(0), "ZERO_ADDRESS"); + emit OwnershipTransferred(owner, newOwner); + owner = newOwner; + } + + function renounceOwnership() + public + onlyOwner + { + emit OwnershipTransferred(owner, address(0)); + owner = address(0); + } +} + + + +/// @title Claimable +/// @author Brecht Devos - +/// @dev Extension for the Ownable contract, where the ownership needs +/// to be claimed. This allows the new owner to accept the transfer. +contract Claimable is Ownable +{ + address public pendingOwner; + + /// @dev Modifier throws if called by any account other than the pendingOwner. + modifier onlyPendingOwner() { + require(msg.sender == pendingOwner, "UNAUTHORIZED"); + _; + } + + /// @dev Allows the current owner to set the pendingOwner address. + /// @param newOwner The address to transfer ownership to. + function transferOwnership( + address newOwner + ) + public + onlyOwner + { + require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); + pendingOwner = newOwner; + } + + /// @dev Allows the pendingOwner address to finalize the transfer. + function claimOwnership() + public + onlyPendingOwner + { + emit OwnershipTransferred(owner, pendingOwner); + owner = pendingOwner; + pendingOwner = address(0); + } +} + + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title ERC20 safe transfer +/// @dev see https://github.com/sec-bit/badERC20Fix +/// @author Brecht Devos - +library ERC20SafeTransfer +{ + function safeTransferAndVerify( + address token, + address to, + uint value + ) + internal + { + safeTransferWithGasLimitAndVerify( + token, + to, + value, + gasleft() + ); + } + + function safeTransfer( + address token, + address to, + uint value + ) + internal + returns (bool) + { + return safeTransferWithGasLimit( + token, + to, + value, + gasleft() + ); + } + + function safeTransferWithGasLimitAndVerify( + address token, + address to, + uint value, + uint gasLimit + ) + internal + { + require( + safeTransferWithGasLimit(token, to, value, gasLimit), + "TRANSFER_FAILURE" + ); + } + + function safeTransferWithGasLimit( + address token, + address to, + uint value, + uint gasLimit + ) + internal + returns (bool) + { + // A transfer is successful when 'call' is successful and depending on the token: + // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) + // - A single boolean is returned: this boolean needs to be true (non-zero) + + // bytes4(keccak256("transfer(address,uint)")) = 0xa9059cbb + bytes memory callData = abi.encodeWithSelector( + bytes4(0xa9059cbb), + to, + value + ); + (bool success, ) = token.call.gas(gasLimit)(callData); + return checkReturnValue(success); + } + + function safeTransferFromAndVerify( + address token, + address from, + address to, + uint value + ) + internal + { + safeTransferFromWithGasLimitAndVerify( + token, + from, + to, + value, + gasleft() + ); + } + + function safeTransferFrom( + address token, + address from, + address to, + uint value + ) + internal + returns (bool) + { + return safeTransferFromWithGasLimit( + token, + from, + to, + value, + gasleft() + ); + } + + function safeTransferFromWithGasLimitAndVerify( + address token, + address from, + address to, + uint value, + uint gasLimit + ) + internal + { + bool result = safeTransferFromWithGasLimit( + token, + from, + to, + value, + gasLimit + ); + require(result, "TRANSFER_FAILURE"); + } + + function safeTransferFromWithGasLimit( + address token, + address from, + address to, + uint value, + uint gasLimit + ) + internal + returns (bool) + { + // A transferFrom is successful when 'call' is successful and depending on the token: + // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) + // - A single boolean is returned: this boolean needs to be true (non-zero) + + // bytes4(keccak256("transferFrom(address,address,uint)")) = 0x23b872dd + bytes memory callData = abi.encodeWithSelector( + bytes4(0x23b872dd), + from, + to, + value + ); + (bool success, ) = token.call.gas(gasLimit)(callData); + return checkReturnValue(success); + } + + function checkReturnValue( + bool success + ) + internal + pure + returns (bool) + { + // A transfer/transferFrom is successful when 'call' is successful and depending on the token: + // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) + // - A single boolean is returned: this boolean needs to be true (non-zero) + if (success) { + assembly { + switch returndatasize() + // Non-standard ERC20: nothing is returned so if 'call' was successful we assume the transfer succeeded + case 0 { + success := 1 + } + // Standard ERC20: a single boolean value is returned which needs to be true + case 32 { + returndatacopy(0, 0, 32) + success := mload(0) + } + // None of the above: not successful + default { + success := 0 + } + } + } + return success; + } +} +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title Utility Functions for uint +/// @author Daniel Wang - +library MathUint +{ + function mul( + uint a, + uint b + ) + internal + pure + returns (uint c) + { + c = a * b; + require(a == 0 || c / a == b, "MUL_OVERFLOW"); + } + + function sub( + uint a, + uint b + ) + internal + pure + returns (uint) + { + require(b <= a, "SUB_UNDERFLOW"); + return a - b; + } + + function add( + uint a, + uint b + ) + internal + pure + returns (uint c) + { + c = a + b; + require(c >= a, "ADD_OVERFLOW"); + } + + function decodeFloat( + uint f + ) + internal + pure + returns (uint value) + { + uint numBitsMantissa = 23; + uint exponent = f >> numBitsMantissa; + uint mantissa = f & ((1 << numBitsMantissa) - 1); + value = mantissa * (10 ** exponent); + } +} + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title ReentrancyGuard +/// @author Brecht Devos - +/// @dev Exposes a modifier that guards a function against reentrancy +/// Changing the value of the same storage value multiple times in a transaction +/// is cheap (starting from Istanbul) so there is no need to minimize +/// the number of times the value is changed +contract ReentrancyGuard +{ + //The default value must be 0 in order to work behind a proxy. + uint private _guardValue; + + // Use this modifier on a function to prevent reentrancy + modifier nonReentrant() + { + // Check if the guard value has its original value + require(_guardValue == 0, "REENTRANCY"); + + // Set the value to something else + _guardValue = 1; + + // Function body + _; + + // Set the value back + _guardValue = 0; + } +} + + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title IProtocolFeeVault +/// @dev This smart contract manages the distribution of protocol fees. +/// Tokens other than LRC will be sold by TokenSeller, +/// If no TokenSeller is set, the tokens or Ether will be sent to the owner +/// to sell them for LRC by other means such as using a centralized exchange. +/// For LRC token, 70% of them can be withdrawn to the UserStakingPool contract +/// to reward LRC stakers; 20% of them can be withdrawn to the Loopring DAO, +/// and the remaining 10% can be burned to reduce LRC's total supply. +contract IProtocolFeeVault +{ + uint public constant REWARD_PERCENTAGE = 70; + uint public constant DAO_PERDENTAGE = 20; + + address public userStakingPoolAddress; + address public lrcAddress; + address public tokenSellerAddress; + address public daoAddress; + + uint claimedReward; + uint claimedDAOFund; + uint claimedBurn; + + event LRCClaimed(uint amount); + event DAOFunded(uint amountDAO, uint amountBurn); + event TokenSold(address token, uint amount); + event SettingsUpdated(uint time); + + /// @dev Sets depdending contract address. All these addresses can be zero. + /// @param _userStakingPoolAddress The address of the user staking pool. + /// @param _tokenSellerAddress The address of the token seller. + /// @param _daoAddress The address of the DAO contract. + function updateSettings( + address _userStakingPoolAddress, + address _tokenSellerAddress, + address _daoAddress + ) + external; + + /// @dev Claims LRC as staking reward to the IUserStakingPool contract. + /// Note that this function can only be called by + /// the IUserStakingPool contract. + /// + /// @param amount The amount of LRC to be claimed. + function claimStakingReward(uint amount) external; + + /// @dev Withdraws LRC to DAO and in the meanwhile burn some LRC according to + /// the predefined percentages. + function fundDAO() external; + + /// @dev Sells a non-LRC token or Ether to LRC. If no TokenSeller is set, + /// the tokens or Ether will be sent to the owner. + /// @param token The token or ether (0x0) to sell. + /// @param amount THe amout of token/ether to sell. + function sellTokenForLRC( + address token, + uint amount + ) + external; + + /// @dev Returns some global stats regarding fees. + /// @return accumulatedFees The accumulated amount of LRC protocol fees. + /// @return accumulatedBurn The accumulated amount of LRC to burn. + /// @return accumulatedDAOFund The accumulated amount of LRC as developer pool. + /// @return accumulatedReward The accumulated amount of LRC as staking reward. + /// @return remainingFees The remaining amount of LRC protocol fees. + /// @return remainingBurn The remaining amount of LRC to burn. + /// @return remainingDAOFund The remaining amount of LRC as developer pool. + /// @return remainingReward The remaining amount of LRC as staking reward. + function getProtocolFeeStats() + public + view + returns ( + uint accumulatedFees, + uint accumulatedBurn, + uint accumulatedDAOFund, + uint accumulatedReward, + uint remainingFees, + uint remainingBurn, + uint remainingDAOFund, + uint remainingReward + ); +} + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/// @title ITokenSeller +/// @dev Use this contract to sell tokenS for as many tokenB. +/// @author Daniel Wang - +contract ITokenSeller +{ + /// @dev Sells all tokenS for tokenB + /// @param tokenS The token or Ether (0x0) to sell. + /// @param tokenB The token to buy. + /// @return success True if success, false otherwise. + function sellToken( + address tokenS, + address tokenB + ) + external + payable + returns (bool success); +} + +/// @title An Implementation of IProtocolFeeVault. +/// @author Daniel Wang - +contract ProtocolFeeVault is Claimable, ReentrancyGuard, IProtocolFeeVault +{ + using AddressUtil for address; + using AddressUtil for address payable; + using ERC20SafeTransfer for address; + using MathUint for uint; + + constructor(address _lrcAddress) + Claimable() + public + { + require(_lrcAddress != address(0), "ZERO_ADDRESS"); + lrcAddress = _lrcAddress; + } + + function() external payable { } + + function updateSettings( + address _userStakingPoolAddress, + address _tokenSellerAddress, + address _daoAddress + ) + external + nonReentrant + onlyOwner + { + require( + userStakingPoolAddress != _userStakingPoolAddress || + tokenSellerAddress != _tokenSellerAddress || + daoAddress != _daoAddress, + "SAME_ADDRESSES" + ); + userStakingPoolAddress = _userStakingPoolAddress; + tokenSellerAddress = _tokenSellerAddress; + daoAddress = _daoAddress; + + emit SettingsUpdated(now); + } + + function claimStakingReward( + uint amount + ) + external + nonReentrant + { + require(amount > 0, "ZERO_VALUE"); + require(msg.sender == userStakingPoolAddress, "UNAUTHORIZED"); + lrcAddress.safeTransferAndVerify(userStakingPoolAddress, amount); + claimedReward = claimedReward.add(amount); + emit LRCClaimed(amount); + } + + function fundDAO() + external + nonReentrant + { + uint amountDAO; + uint amountBurn; + (, , , , , amountBurn, amountDAO, ) = getProtocolFeeStats(); + + address recipient = daoAddress == address(0) ? owner : daoAddress; + + if (amountDAO > 0) { + lrcAddress.safeTransferAndVerify(recipient, amountDAO); + } + + if (amountBurn > 0) { + require(BurnableERC20(lrcAddress).burn(amountBurn), "BURN_FAILURE"); + } + + claimedBurn = claimedBurn.add(amountBurn); + claimedDAOFund = claimedDAOFund.add(amountDAO); + + emit DAOFunded(amountDAO, amountBurn); + } + + function sellTokenForLRC( + address token, + uint amount + ) + external + nonReentrant + { + require(amount > 0, "ZERO_AMOUNT"); + require(token != lrcAddress, "PROHIBITED"); + + address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress; + + if (token == address(0)) { + recipient.sendETHAndVerify(amount, gasleft()); + } else { + token.safeTransferAndVerify(recipient, amount); + } + + require( + tokenSellerAddress == address(0) || + ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress), + "SELL_FAILURE" + ); + + emit TokenSold(token, amount); + } + + function getProtocolFeeStats() + public + view + returns ( + uint accumulatedFees, + uint accumulatedBurn, + uint accumulatedDAOFund, + uint accumulatedReward, + uint remainingFees, + uint remainingBurn, + uint remainingDAOFund, + uint remainingReward + ) + { + remainingFees = ERC20(lrcAddress).balanceOf(address(this)); + accumulatedFees = remainingFees.add(claimedReward).add(claimedDAOFund).add(claimedBurn); + + accumulatedReward = accumulatedFees.mul(REWARD_PERCENTAGE) / 100; + accumulatedDAOFund = accumulatedFees.mul(DAO_PERDENTAGE) / 100; + accumulatedBurn = accumulatedFees.sub(accumulatedReward).sub(accumulatedDAOFund); + + remainingReward = accumulatedReward.sub(claimedReward); + remainingDAOFund = accumulatedDAOFund.sub(claimedDAOFund); + remainingBurn = accumulatedBurn.sub(claimedBurn); + } +} \ No newline at end of file diff --git a/data_full/CVE/2021-3004.sol b/data_full/CVE/2021-3004.sol new file mode 100644 index 00000000..0abcaa7c --- /dev/null +++ b/data_full/CVE/2021-3004.sol @@ -0,0 +1,644 @@ +/** + *Submitted for verification at Etherscan.io on 2020-12-31 +*/ + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IERC20 { + function totalSupply() external view returns (uint256); + function decimals() external view returns (uint256); + function balanceOf(address account) external view returns (uint256); + function transfer(address recipient, uint256 amount) external returns (bool); + function allowance(address owner, address spender) external view returns (uint256); + function approve(address spender, uint256 amount) external returns (bool); + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +library Address { + function isContract(address account) internal view returns (bool) { + bytes32 codehash; + bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; + // solhint-disable-next-line no-inline-assembly + assembly { codehash := extcodehash(account) } + return (codehash != 0x0 && codehash != accountHash); + } +} + +library SafeERC20 { + using Address for address; + + function safeTransfer(IERC20 token, address to, uint value) internal { + callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); + } + + function safeTransferFrom(IERC20 token, address from, address to, uint value) internal { + callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); + } + + function safeApprove(IERC20 token, address spender, uint value) internal { + require((value == 0) || (token.allowance(address(this), spender) == 0), + "SafeERC20: approve from non-zero to non-zero allowance" + ); + callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); + } + function callOptionalReturn(IERC20 token, bytes memory data) private { + require(address(token).isContract(), "SafeERC20: call to non-contract"); + + // solhint-disable-next-line avoid-low-level-calls + (bool success, bytes memory returndata) = address(token).call(data); + require(success, "SafeERC20: low-level call failed"); + + if (returndata.length > 0) { // Return data is optional + // solhint-disable-next-line max-line-length + require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); + } + } +} + +interface Oracle { + function getPriceUSD(address reserve) external view returns (uint); +} + +interface ISushiswapV2Factory { + event PairCreated(address indexed token0, address indexed token1, address pair, uint); + + function feeTo() external view returns (address); + function feeToSetter() external view returns (address); + + function getPair(address tokenA, address tokenB) external view returns (address pair); + function allPairs(uint) external view returns (address pair); + function allPairsLength() external view returns (uint); + + function createPair(address tokenA, address tokenB) external returns (address pair); + + function setFeeTo(address) external; + function setFeeToSetter(address) external; +} + +interface ISushiswapV2Pair { + event Approval(address indexed owner, address indexed spender, uint value); + event Transfer(address indexed from, address indexed to, uint value); + + function name() external pure returns (string memory); + function symbol() external pure returns (string memory); + function decimals() external pure returns (uint8); + function totalSupply() external view returns (uint); + function balanceOf(address owner) external view returns (uint); + function allowance(address owner, address spender) external view returns (uint); + + function approve(address spender, uint value) external returns (bool); + function transfer(address to, uint value) external returns (bool); + function transferFrom(address from, address to, uint value) external returns (bool); + + function DOMAIN_SEPARATOR() external view returns (bytes32); + function PERMIT_TYPEHASH() external pure returns (bytes32); + function nonces(address owner) external view returns (uint); + + function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; + + event Mint(address indexed sender, uint amount0, uint amount1); + event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); + event Swap( + address indexed sender, + uint amount0In, + uint amount1In, + uint amount0Out, + uint amount1Out, + address indexed to + ); + event Sync(uint112 reserve0, uint112 reserve1); + + function MINIMUM_LIQUIDITY() external pure returns (uint); + function factory() external view returns (address); + function token0() external view returns (address); + function token1() external view returns (address); + function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); + function price0CumulativeLast() external view returns (uint); + function price1CumulativeLast() external view returns (uint); + function kLast() external view returns (uint); + + function mint(address to) external returns (uint liquidity); + function burn(address to) external returns (uint amount0, uint amount1); + function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; + function skim(address to) external; + function sync() external; + + function initialize(address, address) external; +} + +/** + * @dev Contract module that helps prevent reentrant calls to a function. + * + * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier + * available, which can be applied to functions to make sure there are no nested + * (reentrant) calls to them. + * + * Note that because there is a single `nonReentrant` guard, functions marked as + * `nonReentrant` may not call one another. This can be worked around by making + * those functions `private`, and then adding `external` `nonReentrant` entry + * points to them. + * + * TIP: If you would like to learn more about reentrancy and alternative ways + * to protect against it, check out our blog post + * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. + */ +abstract contract ReentrancyGuard { + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint256 private constant _NOT_ENTERED = 1; + uint256 private constant _ENTERED = 2; + + uint256 private _status; + + constructor () { + _status = _NOT_ENTERED; + } + + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` + * function is not supported. It is possible to prevent this from happening + * by making the `nonReentrant` function external, and make it call a + * `private` function that does the actual work. + */ + modifier nonReentrant() { + // On the first call to nonReentrant, _notEntered will be true + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + + // Any calls to nonReentrant after this point will fail + _status = _ENTERED; + + _; + + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + _status = _NOT_ENTERED; + } +} + + + +library SushiswapV2Library { + // returns sorted token addresses, used to handle return values from pairs sorted in this order + function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { + require(tokenA != tokenB, 'SushiswapV2Library: IDENTICAL_ADDRESSES'); + (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); + require(token0 != address(0), 'SushiswapV2Library: ZERO_ADDRESS'); + } + + // calculates the CREATE2 address for a pair without making any external calls + function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { + (address token0, address token1) = sortTokens(tokenA, tokenB); + pair = address(uint160(uint(keccak256(abi.encodePacked( + hex'ff', + factory, + keccak256(abi.encodePacked(token0, token1)), + hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash + ))))); + } + + // fetches and sorts the reserves for a pair + function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { + (address token0,) = sortTokens(tokenA, tokenB); + (uint reserve0, uint reserve1,) = ISushiswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves(); + (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); + } + + + // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset + function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { + require(amountA > 0, 'SushiswapV2Library: INSUFFICIENT_AMOUNT'); + require(reserveA > 0 && reserveB > 0, 'SushiswapV2Library: INSUFFICIENT_LIQUIDITY'); + amountB = amountA * reserveB / reserveA; + } +} + +/** + * @dev Standard math utilities missing in the Solidity language. + */ +library Math { + /** + * @dev Returns the largest of two numbers. + */ + function max(uint256 a, uint256 b) internal pure returns (uint256) { + return a >= b ? a : b; + } + + /** + * @dev Returns the smallest of two numbers. + */ + function min(uint256 a, uint256 b) internal pure returns (uint256) { + return a < b ? a : b; + } + + /** + * @dev Returns the average of two numbers. The result is rounded towards + * zero. + */ + function average(uint256 a, uint256 b) internal pure returns (uint256) { + // (a + b) / 2 can overflow, so we distribute + return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); + } +} + +contract StableYieldCredit is ReentrancyGuard { + using SafeERC20 for IERC20; + + /// @notice EIP-20 token name for this token + string public constant name = "Stable Yield Credit"; + + /// @notice EIP-20 token symbol for this token + string public constant symbol = "yCREDIT"; + + /// @notice EIP-20 token decimals for this token + uint8 public constant decimals = 8; + + /// @notice Total number of tokens in circulation + uint public totalSupply = 0; + + /// @notice Total number of tokens staked for yield + uint public stakedSupply = 0; + + mapping(address => mapping (address => uint)) internal allowances; + mapping(address => uint) internal balances; + mapping(address => uint) public stakes; + + /// @notice The EIP-712 typehash for the contract's domain + bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)"); + bytes32 public immutable DOMAINSEPARATOR; + + /// @notice The EIP-712 typehash for the permit struct used by the contract + bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)"); + + /// @notice A record of states for signing / validating signatures + mapping (address => uint) public nonces; + + function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { + require(n < 2**32, errorMessage); + return uint32(n); + } + + /// @notice The standard EIP-20 transfer event + event Transfer(address indexed from, address indexed to, uint amount); + + /// @notice Stake event for claiming rewards + event Staked(address indexed from, uint amount); + + // @notice Unstake event + event Unstaked(address indexed from, uint amount); + + event Earned(address indexed from, uint amount); + event Fees(uint amount); + + /// @notice The standard EIP-20 approval event + event Approval(address indexed owner, address indexed spender, uint amount); + + // Oracle used for price debt data (external to the AMM balance to avoid internal manipulation) + Oracle public constant LINK = Oracle(0x271bf4568fb737cc2e6277e9B1EE0034098cDA2a); + ISushiswapV2Factory public constant FACTORY = ISushiswapV2Factory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac); + + // user => token => collateral + mapping (address => mapping(address => uint)) public collateral; + // user => token => credit + mapping (address => mapping(address => uint)) public collateralCredit; + + address[] private _markets; + mapping (address => bool) pairs; + + uint public rewardRate = 0; + uint public periodFinish = 0; + uint public DURATION = 7 days; + uint public lastUpdateTime; + uint public rewardPerTokenStored; + + mapping(address => uint) public userRewardPerTokenPaid; + mapping(address => uint) public rewards; + + event Deposit(address indexed creditor, address indexed collateral, uint creditOut, uint amountIn, uint creditMinted); + event Withdraw(address indexed creditor, address indexed collateral, uint creditIn, uint creditOut, uint amountOut); + + constructor () { + DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this))); + } + + uint public FEE = 50; + uint public BASE = 10000; + + function lastTimeRewardApplicable() public view returns (uint) { + return Math.min(block.timestamp, periodFinish); + } + + function rewardPerToken() public view returns (uint) { + if (stakedSupply == 0) { + return rewardPerTokenStored; + } + return + rewardPerTokenStored + + ((lastTimeRewardApplicable() - + lastUpdateTime) * + rewardRate * 1e18 / stakedSupply); + } + + function earned(address account) public view returns (uint) { + return (stakes[account] * (rewardPerToken() - userRewardPerTokenPaid[account]) / 1e18) + rewards[account]; + } + + function getRewardForDuration() external view returns (uint) { + return rewardRate * DURATION; + } + + modifier updateReward(address account) { + rewardPerTokenStored = rewardPerToken(); + lastUpdateTime = lastTimeRewardApplicable(); + if (account != address(0)) { + rewards[account] = earned(account); + userRewardPerTokenPaid[account] = rewardPerTokenStored; + } + _; + } + + function stake(uint256 amount) external nonReentrant updateReward(msg.sender) { + require(amount > 0, "Cannot stake 0"); + stakedSupply += amount; + stakes[msg.sender] += amount; + _transferTokens(msg.sender, address(this), amount); + emit Staked(msg.sender, amount); + } + + function unstake(uint amount) public nonReentrant updateReward(msg.sender) { + require(amount > 0, "Cannot withdraw 0"); + stakedSupply -= amount; + stakes[msg.sender] -= amount; + _transferTokens(address(this), msg.sender, amount); + emit Unstaked(msg.sender, amount); + } + + function getReward() public nonReentrant updateReward(msg.sender) { + uint256 reward = rewards[msg.sender]; + if (reward > 0) { + rewards[msg.sender] = 0; + _transferTokens(address(this), msg.sender, reward); + emit Earned(msg.sender, reward); + } + } + + function exit() external { + unstake(stakes[msg.sender]); + getReward(); + } + + function notifyFeeAmount(uint reward) internal updateReward(address(0)) { + if (block.timestamp >= periodFinish) { + rewardRate = reward / DURATION; + } else { + uint remaining = periodFinish - block.timestamp; + uint leftover = remaining * rewardRate; + rewardRate = (reward + leftover) / DURATION; + } + + // Ensure the provided reward amount is not more than the balance in the contract. + // This keeps the reward rate in the right range, preventing overflows due to + // very high values of rewardRate in the earned and rewardsPerToken functions; + // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. + uint balance = balances[address(this)]; + require(rewardRate <= balance / DURATION, "Provided reward too high"); + + lastUpdateTime = block.timestamp; + periodFinish = block.timestamp + DURATION; + emit Fees(reward); + } + + function markets() external view returns (address[] memory) { + return _markets; + } + + function _mint(address dst, uint amount) internal { + // mint the amount + totalSupply += amount; + // transfer the amount to the recipient + balances[dst] += amount; + emit Transfer(address(0), dst, amount); + } + + function _burn(address dst, uint amount) internal { + // burn the amount + totalSupply -= amount; + // transfer the amount from the recipient + balances[dst] -= amount; + emit Transfer(dst, address(0), amount); + } + + function depositAll(IERC20 token) external { + _deposit(token, token.balanceOf(msg.sender)); + } + + function deposit(IERC20 token, uint amount) external { + _deposit(token, amount); + } + + function _addLiquidity( + address tokenA, + address tokenB, + uint amountADesired, + uint amountBDesired + ) internal virtual returns (address pair, uint amountA, uint amountB) { + // create the pair if it doesn't exist yet + pair = FACTORY.getPair(tokenA, tokenB); + if (pair == address(0)) { + pair = FACTORY.createPair(tokenA, tokenB); + pairs[pair] = true; + _markets.push(tokenA); + } else if (!pairs[pair]) { + pairs[pair] = true; + _markets.push(tokenA); + } + + (uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB); + if (reserveA == 0 && reserveB == 0) { + (amountA, amountB) = (amountADesired, amountBDesired); + } else { + uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB); + if (amountBOptimal <= amountBDesired) { + (amountA, amountB) = (amountADesired, amountBOptimal); + } else { + uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA); + assert(amountAOptimal <= amountADesired); + (amountA, amountB) = (amountAOptimal, amountBDesired); + } + } + } + + function _deposit(IERC20 token, uint amount) internal { + uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals(); + require(_value > 0, "!value"); + + (address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value); + + token.safeTransferFrom(msg.sender, _pair, amountA); + _mint(_pair, _value); // Amount of scUSD to mint + + uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this)); + collateral[msg.sender][address(token)] += _liquidity; + + collateralCredit[msg.sender][address(token)] += _value; + uint _fee = _value * FEE / BASE; + _mint(msg.sender, _value - _fee); + _mint(address(this), _fee); + notifyFeeAmount(_fee); + + emit Deposit(msg.sender, address(token), _value, amount, _value); + } + + function withdrawAll(IERC20 token) external { + _withdraw(token, IERC20(address(this)).balanceOf(msg.sender)); + } + + function withdraw(IERC20 token, uint amount) external { + _withdraw(token, amount); + } + + function _withdraw(IERC20 token, uint amount) internal { + uint _credit = collateralCredit[msg.sender][address(token)]; + uint _collateral = collateral[msg.sender][address(token)]; + + if (_credit < amount) { + amount = _credit; + } + + // Calculate % of collateral to release + uint _burned = _collateral * amount / _credit; + address _pair = FACTORY.getPair(address(token), address(this)); + + IERC20(_pair).safeTransfer(_pair, _burned); // send liquidity to pair + (uint _amount0, uint _amount1) = ISushiswapV2Pair(_pair).burn(msg.sender); + (address _token0,) = SushiswapV2Library.sortTokens(address(token), address(this)); + (uint _amountA, uint _amountB) = address(token) == _token0 ? (_amount0, _amount1) : (_amount1, _amount0); + + collateralCredit[msg.sender][address(token)] -= amount; + collateral[msg.sender][address(token)] -= _burned; + _burn(msg.sender, _amountB+amount); // Amount of scUSD to burn (value of A leaving the system) + + emit Withdraw(msg.sender, address(token), amount, _amountB, _amountA); + } + + /** + * @notice Get the number of tokens `spender` is approved to spend on behalf of `account` + * @param account The address of the account holding the funds + * @param spender The address of the account spending the funds + * @return The number of tokens approved + */ + function allowance(address account, address spender) external view returns (uint) { + return allowances[account][spender]; + } + + /** + * @notice Approve `spender` to transfer up to `amount` from `src` + * @dev This will overwrite the approval amount for `spender` + * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) + * @param spender The address of the account which may transfer tokens + * @param amount The number of tokens that are approved (2^256-1 means infinite) + * @return Whether or not the approval succeeded + */ + function approve(address spender, uint amount) external returns (bool) { + allowances[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + return true; + } + + /** + * @notice Triggers an approval from owner to spends + * @param owner The address to approve from + * @param spender The address to be approved + * @param amount The number of tokens that are approved (2^256-1 means infinite) + * @param deadline The time at which to expire the signature + * @param v The recovery byte of the signature + * @param r Half of the ECDSA signature pair + * @param s Half of the ECDSA signature pair + */ + function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external { + bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline)); + bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash)); + address signatory = ecrecover(digest, v, r, s); + require(signatory != address(0), "permit: signature"); + require(signatory == owner, "permit: unauthorized"); + require(block.timestamp <= deadline, "permit: expired"); + + allowances[owner][spender] = amount; + + emit Approval(owner, spender, amount); + } + + /** + * @notice Get the number of tokens held by the `account` + * @param account The address of the account to get the balance of + * @return The number of tokens held + */ + function balanceOf(address account) external view returns (uint) { + return balances[account]; + } + + /** + * @notice Transfer `amount` tokens from `msg.sender` to `dst` + * @param dst The address of the destination account + * @param amount The number of tokens to transfer + * @return Whether or not the transfer succeeded + */ + function transfer(address dst, uint amount) external returns (bool) { + _transferTokens(msg.sender, dst, amount); + return true; + } + + /** + * @notice Transfer `amount` tokens from `src` to `dst` + * @param src The address of the source account + * @param dst The address of the destination account + * @param amount The number of tokens to transfer + * @return Whether or not the transfer succeeded + */ + function transferFrom(address src, address dst, uint amount) external returns (bool) { + address spender = msg.sender; + uint spenderAllowance = allowances[src][spender]; + + if (spender != src && spenderAllowance != type(uint).max) { + uint newAllowance = spenderAllowance - amount; + allowances[src][spender] = newAllowance; + + emit Approval(src, spender, newAllowance); + } + + _transferTokens(src, dst, amount); + return true; + } + + function _transferTokens(address src, address dst, uint amount) internal { + balances[src] -= amount; + balances[dst] += amount; + + emit Transfer(src, dst, amount); + + if (pairs[src]) { + uint _fee = amount * FEE / BASE; + _transferTokens(dst, address(this), _fee); + notifyFeeAmount(_fee); + } + } + + function _getChainId() internal view returns (uint) { + uint chainId; + assembly { chainId := chainid() } + return chainId; + } +} \ No newline at end of file diff --git a/data_full/CVE/2021-3006.sol b/data_full/CVE/2021-3006.sol new file mode 100644 index 00000000..8859f865 --- /dev/null +++ b/data_full/CVE/2021-3006.sol @@ -0,0 +1,929 @@ +/** + *Submitted for verification at Etherscan.io on 2020-03-10 +*/ + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +pragma solidity ^0.5.11; + + +/// @title ERC20 Token Interface +/// @dev see https://github.com/ethereum/EIPs/issues/20 +/// @author Daniel Wang - +contract ERC20 +{ + function totalSupply() + public + view + returns (uint); + + function balanceOf( + address who + ) + public + view + returns (uint); + + function allowance( + address owner, + address spender + ) + public + view + returns (uint); + + function transfer( + address to, + uint value + ) + public + returns (bool); + + function transferFrom( + address from, + address to, + uint value + ) + public + returns (bool); + + function approve( + address spender, + uint value + ) + public + returns (bool); +} +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title Utility Functions for addresses +/// @author Daniel Wang - +/// @author Brecht Devos - +library AddressUtil +{ + using AddressUtil for *; + + function isContract( + address addr + ) + internal + view + returns (bool) + { + uint32 size; + assembly { size := extcodesize(addr) } + return (size > 0); + } + + function toPayable( + address addr + ) + internal + pure + returns (address payable) + { + return address(uint160(addr)); + } + + // Works like address.send but with a customizable gas limit + // Make sure your code is safe for reentrancy when using this function! + function sendETH( + address to, + uint amount, + uint gasLimit + ) + internal + returns (bool success) + { + if (amount == 0) { + return true; + } + address payable recipient = to.toPayable(); + /* solium-disable-next-line */ + (success, ) = recipient.call.value(amount).gas(gasLimit)(""); + } + + // Works like address.transfer but with a customizable gas limit + // Make sure your code is safe for reentrancy when using this function! + function sendETHAndVerify( + address to, + uint amount, + uint gasLimit + ) + internal + returns (bool success) + { + success = to.sendETH(amount, gasLimit); + require(success, "TRANSFER_FAILURE"); + } +} + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + + + +/// @title Burnable ERC20 Token Interface +/// @author Brecht Devos - +contract BurnableERC20 is ERC20 +{ + function burn( + uint value + ) + public + returns (bool); + + function burnFrom( + address from, + uint value + ) + public + returns (bool); +} + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title Ownable +/// @author Brecht Devos - +/// @dev The Ownable contract has an owner address, and provides basic +/// authorization control functions, this simplifies the implementation of +/// "user permissions". +contract Ownable +{ + address public owner; + + event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner + ); + + /// @dev The Ownable constructor sets the original `owner` of the contract + /// to the sender. + constructor() + public + { + owner = msg.sender; + } + + /// @dev Throws if called by any account other than the owner. + modifier onlyOwner() + { + require(msg.sender == owner, "UNAUTHORIZED"); + _; + } + + /// @dev Allows the current owner to transfer control of the contract to a + /// new owner. + /// @param newOwner The address to transfer ownership to. + function transferOwnership( + address newOwner + ) + public + onlyOwner + { + require(newOwner != address(0), "ZERO_ADDRESS"); + emit OwnershipTransferred(owner, newOwner); + owner = newOwner; + } + + function renounceOwnership() + public + onlyOwner + { + emit OwnershipTransferred(owner, address(0)); + owner = address(0); + } +} + + + +/// @title Claimable +/// @author Brecht Devos - +/// @dev Extension for the Ownable contract, where the ownership needs +/// to be claimed. This allows the new owner to accept the transfer. +contract Claimable is Ownable +{ + address public pendingOwner; + + /// @dev Modifier throws if called by any account other than the pendingOwner. + modifier onlyPendingOwner() { + require(msg.sender == pendingOwner, "UNAUTHORIZED"); + _; + } + + /// @dev Allows the current owner to set the pendingOwner address. + /// @param newOwner The address to transfer ownership to. + function transferOwnership( + address newOwner + ) + public + onlyOwner + { + require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); + pendingOwner = newOwner; + } + + /// @dev Allows the pendingOwner address to finalize the transfer. + function claimOwnership() + public + onlyPendingOwner + { + emit OwnershipTransferred(owner, pendingOwner); + owner = pendingOwner; + pendingOwner = address(0); + } +} + + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title ERC20 safe transfer +/// @dev see https://github.com/sec-bit/badERC20Fix +/// @author Brecht Devos - +library ERC20SafeTransfer +{ + function safeTransferAndVerify( + address token, + address to, + uint value + ) + internal + { + safeTransferWithGasLimitAndVerify( + token, + to, + value, + gasleft() + ); + } + + function safeTransfer( + address token, + address to, + uint value + ) + internal + returns (bool) + { + return safeTransferWithGasLimit( + token, + to, + value, + gasleft() + ); + } + + function safeTransferWithGasLimitAndVerify( + address token, + address to, + uint value, + uint gasLimit + ) + internal + { + require( + safeTransferWithGasLimit(token, to, value, gasLimit), + "TRANSFER_FAILURE" + ); + } + + function safeTransferWithGasLimit( + address token, + address to, + uint value, + uint gasLimit + ) + internal + returns (bool) + { + // A transfer is successful when 'call' is successful and depending on the token: + // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) + // - A single boolean is returned: this boolean needs to be true (non-zero) + + // bytes4(keccak256("transfer(address,uint)")) = 0xa9059cbb + bytes memory callData = abi.encodeWithSelector( + bytes4(0xa9059cbb), + to, + value + ); + (bool success, ) = token.call.gas(gasLimit)(callData); + return checkReturnValue(success); + } + + function safeTransferFromAndVerify( + address token, + address from, + address to, + uint value + ) + internal + { + safeTransferFromWithGasLimitAndVerify( + token, + from, + to, + value, + gasleft() + ); + } + + function safeTransferFrom( + address token, + address from, + address to, + uint value + ) + internal + returns (bool) + { + return safeTransferFromWithGasLimit( + token, + from, + to, + value, + gasleft() + ); + } + + function safeTransferFromWithGasLimitAndVerify( + address token, + address from, + address to, + uint value, + uint gasLimit + ) + internal + { + bool result = safeTransferFromWithGasLimit( + token, + from, + to, + value, + gasLimit + ); + require(result, "TRANSFER_FAILURE"); + } + + function safeTransferFromWithGasLimit( + address token, + address from, + address to, + uint value, + uint gasLimit + ) + internal + returns (bool) + { + // A transferFrom is successful when 'call' is successful and depending on the token: + // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) + // - A single boolean is returned: this boolean needs to be true (non-zero) + + // bytes4(keccak256("transferFrom(address,address,uint)")) = 0x23b872dd + bytes memory callData = abi.encodeWithSelector( + bytes4(0x23b872dd), + from, + to, + value + ); + (bool success, ) = token.call.gas(gasLimit)(callData); + return checkReturnValue(success); + } + + function checkReturnValue( + bool success + ) + internal + pure + returns (bool) + { + // A transfer/transferFrom is successful when 'call' is successful and depending on the token: + // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) + // - A single boolean is returned: this boolean needs to be true (non-zero) + if (success) { + assembly { + switch returndatasize() + // Non-standard ERC20: nothing is returned so if 'call' was successful we assume the transfer succeeded + case 0 { + success := 1 + } + // Standard ERC20: a single boolean value is returned which needs to be true + case 32 { + returndatacopy(0, 0, 32) + success := mload(0) + } + // None of the above: not successful + default { + success := 0 + } + } + } + return success; + } +} +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title Utility Functions for uint +/// @author Daniel Wang - +library MathUint +{ + function mul( + uint a, + uint b + ) + internal + pure + returns (uint c) + { + c = a * b; + require(a == 0 || c / a == b, "MUL_OVERFLOW"); + } + + function sub( + uint a, + uint b + ) + internal + pure + returns (uint) + { + require(b <= a, "SUB_UNDERFLOW"); + return a - b; + } + + function add( + uint a, + uint b + ) + internal + pure + returns (uint c) + { + c = a + b; + require(c >= a, "ADD_OVERFLOW"); + } + + function decodeFloat( + uint f + ) + internal + pure + returns (uint value) + { + uint numBitsMantissa = 23; + uint exponent = f >> numBitsMantissa; + uint mantissa = f & ((1 << numBitsMantissa) - 1); + value = mantissa * (10 ** exponent); + } +} + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title ReentrancyGuard +/// @author Brecht Devos - +/// @dev Exposes a modifier that guards a function against reentrancy +/// Changing the value of the same storage value multiple times in a transaction +/// is cheap (starting from Istanbul) so there is no need to minimize +/// the number of times the value is changed +contract ReentrancyGuard +{ + //The default value must be 0 in order to work behind a proxy. + uint private _guardValue; + + // Use this modifier on a function to prevent reentrancy + modifier nonReentrant() + { + // Check if the guard value has its original value + require(_guardValue == 0, "REENTRANCY"); + + // Set the value to something else + _guardValue = 1; + + // Function body + _; + + // Set the value back + _guardValue = 0; + } +} + + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + + +/// @title IProtocolFeeVault +/// @dev This smart contract manages the distribution of protocol fees. +/// Tokens other than LRC will be sold by TokenSeller, +/// If no TokenSeller is set, the tokens or Ether will be sent to the owner +/// to sell them for LRC by other means such as using a centralized exchange. +/// For LRC token, 70% of them can be withdrawn to the UserStakingPool contract +/// to reward LRC stakers; 20% of them can be withdrawn to the Loopring DAO, +/// and the remaining 10% can be burned to reduce LRC's total supply. +contract IProtocolFeeVault +{ + uint public constant REWARD_PERCENTAGE = 70; + uint public constant DAO_PERDENTAGE = 20; + + address public userStakingPoolAddress; + address public lrcAddress; + address public tokenSellerAddress; + address public daoAddress; + + uint claimedReward; + uint claimedDAOFund; + uint claimedBurn; + + event LRCClaimed(uint amount); + event DAOFunded(uint amountDAO, uint amountBurn); + event TokenSold(address token, uint amount); + event SettingsUpdated(uint time); + + /// @dev Sets depdending contract address. All these addresses can be zero. + /// @param _userStakingPoolAddress The address of the user staking pool. + /// @param _tokenSellerAddress The address of the token seller. + /// @param _daoAddress The address of the DAO contract. + function updateSettings( + address _userStakingPoolAddress, + address _tokenSellerAddress, + address _daoAddress + ) + external; + + /// @dev Claims LRC as staking reward to the IUserStakingPool contract. + /// Note that this function can only be called by + /// the IUserStakingPool contract. + /// + /// @param amount The amount of LRC to be claimed. + function claimStakingReward(uint amount) external; + + /// @dev Withdraws LRC to DAO and in the meanwhile burn some LRC according to + /// the predefined percentages. + function fundDAO() external; + + /// @dev Sells a non-LRC token or Ether to LRC. If no TokenSeller is set, + /// the tokens or Ether will be sent to the owner. + /// @param token The token or ether (0x0) to sell. + /// @param amount THe amout of token/ether to sell. + function sellTokenForLRC( + address token, + uint amount + ) + external; + + /// @dev Returns some global stats regarding fees. + /// @return accumulatedFees The accumulated amount of LRC protocol fees. + /// @return accumulatedBurn The accumulated amount of LRC to burn. + /// @return accumulatedDAOFund The accumulated amount of LRC as developer pool. + /// @return accumulatedReward The accumulated amount of LRC as staking reward. + /// @return remainingFees The remaining amount of LRC protocol fees. + /// @return remainingBurn The remaining amount of LRC to burn. + /// @return remainingDAOFund The remaining amount of LRC as developer pool. + /// @return remainingReward The remaining amount of LRC as staking reward. + function getProtocolFeeStats() + public + view + returns ( + uint accumulatedFees, + uint accumulatedBurn, + uint accumulatedDAOFund, + uint accumulatedReward, + uint remainingFees, + uint remainingBurn, + uint remainingDAOFund, + uint remainingReward + ); +} + +/* + + Copyright 2017 Loopring Project Ltd (Loopring Foundation). + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/// @title ITokenSeller +/// @dev Use this contract to sell tokenS for as many tokenB. +/// @author Daniel Wang - +contract ITokenSeller +{ + /// @dev Sells all tokenS for tokenB + /// @param tokenS The token or Ether (0x0) to sell. + /// @param tokenB The token to buy. + /// @return success True if success, false otherwise. + function sellToken( + address tokenS, + address tokenB + ) + external + payable + returns (bool success); +} + +/// @title An Implementation of IProtocolFeeVault. +/// @author Daniel Wang - +contract ProtocolFeeVault is Claimable, ReentrancyGuard, IProtocolFeeVault +{ + using AddressUtil for address; + using AddressUtil for address payable; + using ERC20SafeTransfer for address; + using MathUint for uint; + + constructor(address _lrcAddress) + Claimable() + public + { + require(_lrcAddress != address(0), "ZERO_ADDRESS"); + lrcAddress = _lrcAddress; + } + + function() external payable { } + + function updateSettings( + address _userStakingPoolAddress, + address _tokenSellerAddress, + address _daoAddress + ) + external + nonReentrant + onlyOwner + { + require( + userStakingPoolAddress != _userStakingPoolAddress || + tokenSellerAddress != _tokenSellerAddress || + daoAddress != _daoAddress, + "SAME_ADDRESSES" + ); + userStakingPoolAddress = _userStakingPoolAddress; + tokenSellerAddress = _tokenSellerAddress; + daoAddress = _daoAddress; + + emit SettingsUpdated(now); + } + + function claimStakingReward( + uint amount + ) + external + nonReentrant + { + require(amount > 0, "ZERO_VALUE"); + require(msg.sender == userStakingPoolAddress, "UNAUTHORIZED"); + lrcAddress.safeTransferAndVerify(userStakingPoolAddress, amount); + claimedReward = claimedReward.add(amount); + emit LRCClaimed(amount); + } + + function fundDAO() + external + nonReentrant + { + uint amountDAO; + uint amountBurn; + (, , , , , amountBurn, amountDAO, ) = getProtocolFeeStats(); + + address recipient = daoAddress == address(0) ? owner : daoAddress; + + if (amountDAO > 0) { + lrcAddress.safeTransferAndVerify(recipient, amountDAO); + } + + if (amountBurn > 0) { + require(BurnableERC20(lrcAddress).burn(amountBurn), "BURN_FAILURE"); + } + + claimedBurn = claimedBurn.add(amountBurn); + claimedDAOFund = claimedDAOFund.add(amountDAO); + + emit DAOFunded(amountDAO, amountBurn); + } + + function sellTokenForLRC( + address token, + uint amount + ) + external + nonReentrant + { + require(amount > 0, "ZERO_AMOUNT"); + require(token != lrcAddress, "PROHIBITED"); + + address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress; + + if (token == address(0)) { + recipient.sendETHAndVerify(amount, gasleft()); + } else { + token.safeTransferAndVerify(recipient, amount); + } + + require( + tokenSellerAddress == address(0) || + ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress), + "SELL_FAILURE" + ); + + emit TokenSold(token, amount); + } + + function getProtocolFeeStats() + public + view + returns ( + uint accumulatedFees, + uint accumulatedBurn, + uint accumulatedDAOFund, + uint accumulatedReward, + uint remainingFees, + uint remainingBurn, + uint remainingDAOFund, + uint remainingReward + ) + { + remainingFees = ERC20(lrcAddress).balanceOf(address(this)); + accumulatedFees = remainingFees.add(claimedReward).add(claimedDAOFund).add(claimedBurn); + + accumulatedReward = accumulatedFees.mul(REWARD_PERCENTAGE) / 100; + accumulatedDAOFund = accumulatedFees.mul(DAO_PERDENTAGE) / 100; + accumulatedBurn = accumulatedFees.sub(accumulatedReward).sub(accumulatedDAOFund); + + remainingReward = accumulatedReward.sub(claimedReward); + remainingDAOFund = accumulatedDAOFund.sub(claimedDAOFund); + remainingBurn = accumulatedBurn.sub(claimedBurn); + } +} \ No newline at end of file diff --git a/data_full/CVE/2021-33403.sol b/data_full/CVE/2021-33403.sol new file mode 100644 index 00000000..0bd82911 --- /dev/null +++ b/data_full/CVE/2021-33403.sol @@ -0,0 +1,365 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-22 +*/ + +//--------------------------------------------------------------// +//---------------------BLOCKLANCER TOKEN -----------------------// +//--------------------------------------------------------------// + +pragma solidity ^0.4.8; + +/// Migration Agent +/// allows us to migrate to a new contract should it be needed +/// makes blocklancer future proof +contract MigrationAgent { + function migrateFrom(address _from, uint256 _value); +} + +contract ERC20Interface { + // Get the total token supply + function totalSupply() constant returns (uint256 totalSupply); + + // Get the account balance of another account with address _owner + function balanceOf(address _owner) constant returns (uint256 balance); + + // Send _value amount of tokens to address _to + function transfer(address _to, uint256 _value) returns (bool success); + + // Send _value amount of tokens from address _from to address _to + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + + // Allow _spender to withdraw from your account, multiple times, up to the _value amount. + // If this function is called again it overwrites the current allowance with _value. + // this function is required for some DEX functionality + function approve(address _spender, uint256 _value) returns (bool success); + + // Returns the amount which _spender is still allowed to withdraw from _owner + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + + // Triggered when tokens are transferred. + event Transfer(address indexed _from, address indexed _to, uint256 _value); + + // Triggered whenever approve(address _spender, uint256 _value) is called. + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} + +/// Blocklancer Token (LNC) - crowdfunding code for Blocklancer Project +contract BlocklancerToken is ERC20Interface { + string public constant name = "Lancer Token"; + string public constant symbol = "LNC"; + uint8 public constant decimals = 18; // 18 decimal places, the same as ETH. + + mapping(address => mapping (address => uint256)) allowed; + + uint public fundingStart; + + // The flag indicates if the LNC contract is in Funding state. + bool public funding = true; + bool allowTransfer=false; + + // Receives ETH and its own LNC endowment. + address public master; + + // The current total token supply. + uint256 totalTokens; + + uint exchangeRate=20000; + uint EarlyInvestorExchangeRate=25000; + + bool startRefund=false; + + mapping (address => uint256) balances; + mapping (address => bool) initialInvestor; + mapping (address => uint) lastTransferred; + + //needed to refund everyone should the ICO fail + // needed because the price per LNC isn't linear + mapping (address => uint256) balancesEther; + + //address of the contract that manages the migration + //can only be changed by the creator + address public migrationAgent; + + //total amount of token migrated + //allows everyone to see the progress of the migration + uint256 public totalMigrated; + + event Migrate(address indexed _from, address indexed _to, uint256 _value); + event Refund(address indexed _from, uint256 _value); + + //total amount of participants in the ICO + uint totalParticipants; + + function BlocklancerToken() { + master = msg.sender; + fundingStart = 1501977600; + initialInvestor[0x32be343b94f860124dc4fee278fdcbd38c102d88]=true;initialInvestor[0x3106fe2245b376888d684bdcd83dfa9641a869ff]=true;initialInvestor[0x7f7c64c7b7f5a611e739b4da26659bf741414917]=true;initialInvestor[0x4b3b8e0c2c221e916a48e2e5f3718ae2bce51894]=true;initialInvestor[0x507c8fea802a0772eb5e001a8fba38f36fb9b66b]=true;initialInvestor[0x3c35b66dbaf1bc716f41759c7513a7af2f727ce0]=true;initialInvestor[0x7da3ff5dc152352dcffaf08d528e78f1efd4e9d1]=true;initialInvestor[0x404b688a1d9eb850be2527c5dd341561cfa84e11]=true;initialInvestor[0x80ad7165f29f97896a0b5758193879de34fd9712]=true;initialInvestor[0xd70837a61a322f69ba3742111216a7b97d61d3a7]=true;initialInvestor[0x5eefc4f295045ea11827f515c10d50829580cd31]=true;initialInvestor[0xc8c154d54e8d66073b23361cc74cf5d13efc4dc9]=true;initialInvestor[0x00b279438dff4bb6f37038b12704e31967955cb0]=true;initialInvestor[0xfff78f0db7995c7f2299d127d332aef95bc3e7b7]=true;initialInvestor[0xae631a37ad50bf03e8028d0ae8ba041c70ac4c70]=true;initialInvestor[0x4effca51ba840ae9563f5ac1aa794d1e5d3a3806]=true;initialInvestor[0x315a233620b8536d37a92d588aaf5eb050b50d84]=true;initialInvestor[0x1ebf9e3470f303f6a6ac43347e41877b0a5aaa39]=true;initialInvestor[0xbf022480bda3f6c839cd443397761d5e83f3c02b]=true;initialInvestor[0xe727ea5340256a5236287ee3074eea34d8483457]=true;initialInvestor[0x45ecfeea42fc525c0b29313d3de9089488ef71dc]=true;initialInvestor[0xe59e4aac45862796cb52434967cf72ea46474ff3]=true;initialInvestor[0x7c367c14a322404f9e332b68d7d661b46a5c93ea]=true;initialInvestor[0x08bea4ccc9c45e506d5bc5e638acaa13fa3e801c]=true;initialInvestor[0x5dfb4a015eb0c3477a99ba88b2ac60459c879674]=true;initialInvestor[0x771a2137708ca7e07e7b7c55e5ea666e88d7c0c8]=true;initialInvestor[0xcc8ab06eb5a14855fc8b90abcb6be2f34ee5cea1]=true;initialInvestor[0x0764d446d0701a9b52382f8984b9d270d266e02c]=true;initialInvestor[0x2d90b415a38e2e19cdd02ff3ad81a97af7cbf672]=true;initialInvestor[0x0d4266de516944a49c8109a4397d1fcf06fb7ed0]=true;initialInvestor[0x7a5159617df20008b4dbe06d645a1b0305406794]=true;initialInvestor[0xaf9e23965c09ebf5d313c669020b0e1757cbb92c]=true;initialInvestor[0x33d94224754c122baa1ebaf455d16a9c82f69c98]=true;initialInvestor[0x267be1c1d684f78cb4f6a176c4911b741e4ffdc0]=true;initialInvestor[0xf6ac7c81ca099e34421b7eff7c9e80c8f56b74ae]=true;initialInvestor[0xd85faf59e73225ef386b46a1b17c493019b23e1e]=true;initialInvestor[0x3833f8dbdbd6bdcb6a883ff209b869148965b364]=true;initialInvestor[0x7ed1e469fcb3ee19c0366d829e291451be638e59]=true;initialInvestor[0x6c1ddafafd55a53f80cb7f4c8c8f9a9f13f61d70]=true;initialInvestor[0x94ef531595ffe510f8dc92e0e07a987f57784338]=true;initialInvestor[0xcc54e4e2f425cc4e207344f9e0619c1e40f42f26]=true;initialInvestor[0x70ee7bfc1aeac50349c29475a11ed4c57961b387]=true;initialInvestor[0x89be0bd8b6007101c7da7170a6461580994221d0]=true;initialInvestor[0xa7802ba51ba87556263d84cfc235759b214ccf35]=true;initialInvestor[0xb6a34bd460f02241e80e031023ec20ce6fc310ae]=true;initialInvestor[0x07004b458b56fb152c06ad81fe1be30c8a8b2ea1]=true;initialInvestor[0xb6da110659ef762a381cf2d6f601eb19b5f5d51e]=true;initialInvestor[0x20abf65634219512c6c98a64614c43220ca2085b]=true;initialInvestor[0x3afd1483693fe606c0e58f580bd08ae9aba092fd]=true;initialInvestor[0x61e120b9ca6559961982d9bd1b1dbea7485b84d1]=true;initialInvestor[0x481525718f1536ca2d739aa7e68b94b5e1d5d2c2]=true;initialInvestor[0x8e129a434cde6f52838fad2d30d8b08f744abf48]=true;initialInvestor[0x13df035952316f5fb663c262064ee39e44aa6b43]=true;initialInvestor[0x03c6c82a1d6d13b2f92ed63a10b1b791ffaa1e02]=true;initialInvestor[0xb079a72c627d0a34b880aee0504b901cbce64568]=true;initialInvestor[0xbf27721ca05c983c902df12492620ab2a8b9db91]=true;initialInvestor[0x4ced2b7d27ac74b0ecb2440d9857ba6c6407149f]=true;initialInvestor[0x330c63a5b737b5542be108a74b3fef6272619585]=true;initialInvestor[0x266dccd07a275a6e72b6bc549f7c2ce9e082f13f]=true;initialInvestor[0xf4280bf77a043568e40da2b8068b11243082c944]=true;initialInvestor[0x67d2f0e2d642a87300781df25c45b00bccaf6983]=true;initialInvestor[0x9f658a6628864e94f9a1c53ba519f0ae37a8b4a5]=true;initialInvestor[0x498d256ee53d4d05269cfa1a80c3214e525076ca]=true;initialInvestor[0xa1beac79dda14bce1ee698fdee47e2f7f2fd1f0d]=true;initialInvestor[0xfeb063bd508b82043d6b4d5c51e1e42b44f39b33]=true;initialInvestor[0xfeb7a283e1dbf2d5d8e9ba64ab5e607a41213561]=true;initialInvestor[0xabedb3d632fddccd4e95957be4ee0daffbe6acdd]=true;initialInvestor[0x4d8a7cb44d317113c82f25a0174a637a8f012ebb]=true;initialInvestor[0xe922c94161d45bdd31433b3c7b912ad214d399ce]=true;initialInvestor[0x11f9ad6eb7e9e98349b8397c836c0e3e88455b0a]=true;initialInvestor[0xfc28b52160639167fa59f30232bd8d43fab681e6]=true;initialInvestor[0xaf8a6c54fc8fa59cfcbc631e56b3d5b22fa42b75]=true;initialInvestor[0xd3c0ebb99a5616f3647f16c2efb40b133b5b1e1c]=true;initialInvestor[0x877341abeac8f44ac69ba7c99b1d5d31ce7a11d7]=true;initialInvestor[0xb22f376f70f34c906a88a91f6999a0bd1a0f3c3d]=true;initialInvestor[0x2c99db3838d6af157c8d671291d560a013c6c01e]=true;initialInvestor[0xd0f38af6984f3f847f7f2fcd6ea27aa878257059]=true;initialInvestor[0x2a5da89176d5316782d7f1c9db74d209679ad9ce]=true;initialInvestor[0xc88eea647a570738e69ad3dd8975577df720318d]=true;initialInvestor[0xb32b18dfea9072047a368ec056a464b73618345a]=true;initialInvestor[0x945b9a00bffb201a5602ee661f2a4cc6e5285ca6]=true;initialInvestor[0x86957ac9a15f114c08296523569511c22e471266]=true;initialInvestor[0x007bfe6994536ec9e89505c7de8e9eb748d3cb27]=true;initialInvestor[0x6ad0f0f578115b6fafa73df45e9f1e9056b84459]=true;initialInvestor[0x621663b4b6580b70b74afaf989c707d533bbec91]=true;initialInvestor[0xdc86c0632e88de345fc2ac01608c63f2ed99605a]=true;initialInvestor[0x3d83bb077b2557ef5f361bf1a9e68d093d919b28]=true;initialInvestor[0x56307b37377f75f397d4936cf507baf0f4943ea5]=true;initialInvestor[0x555cbe849bf5e01db195a81ecec1e65329fff643]=true;initialInvestor[0x7398a2edb928a2e179f62bfb795f292254f6850e]=true;initialInvestor[0x30382b132f30c175bee2858353f3a2dd0d074c3a]=true;initialInvestor[0x5baeac0a0417a05733884852aa068b706967e790]=true;initialInvestor[0xcb12b8a675e652296a8134e70f128521e633b327]=true;initialInvestor[0xaa8c03e04b121511858d88be7a1b2f5a2d70f6ac]=true;initialInvestor[0x77529c0ea5381262db964da3d5f6e2cc92e9b48b]=true;initialInvestor[0x59e5fe8a9637702c6d597c5f1c4ebe3fba747371]=true;initialInvestor[0x296fe436ecc0ea6b7a195ded26451e77e1335108]=true;initialInvestor[0x41bacae05437a3fe126933e57002ae3f129aa079]=true;initialInvestor[0x6cd5b9b60d2bcf81af8e6ef5d750dc9a8f18bf45]=true; + } + + //returns the total amount of participants in the ICO + function getAmountofTotalParticipants() constant returns (uint){ + return totalParticipants; + } + + /// allows to transfer token to another address + function transfer(address _to, uint256 _value) returns (bool success) { + // Don't allow in funding state + if(funding) throw; + if(!allowTransfer)throw; + + var senderBalance = balances[msg.sender]; + //only allow if the balance of the sender is more than he want's to send + if (senderBalance >= _value && _value > 0) { + //reduce the sender balance by the amount he sends + senderBalance -= _value; + balances[msg.sender] = senderBalance; + + //increase the balance of the receiver by the amount we reduced the balance of the sender + balances[_to] += _value; + + //saves the last time someone sent LNc from this address + //is needed for our Token Holder Tribunal + //this ensures that everyone can only vote one time + //otherwise it would be possible to send the LNC around and everyone votes again and again + lastTransferred[msg.sender]=block.timestamp; + Transfer(msg.sender, _to, _value); + return true; + } + //transfer failed + return false; + } + + //returns the total amount of LNC in circulation + //get displayed on the website whilst the crowd funding + function totalSupply() constant returns (uint256 totalSupply) { + return totalTokens; + } + + //retruns the balance of the owner address + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + //returns the amount anyone pledged into this contract + function EtherBalanceOf(address _owner) constant returns (uint256) { + return balancesEther[_owner]; + } + + //returns the amount anyone pledged into this contract + function isInitialInvestor(address _owner) constant returns (bool) { + return initialInvestor[_owner]; + } + + //time left before the crodsale begins + function TimeLeftBeforeCrowdsale() external constant returns (uint256) { + if(fundingStart>block.timestamp) + return fundingStart-block.timestamp; + else + return 0; + } + + // allows us to migrate to anew contract + function migrate(uint256 _value) external { + // can only be called if the funding ended + if(funding) throw; + + //the migration agent address needs to be set + if(migrationAgent == 0) throw; + + // must migrate more than nothing + if(_value == 0) throw; + + //if the value is higher than the sender owns abort + if(_value > balances[msg.sender]) throw; + + //reduce the balance of the owner + balances[msg.sender] -= _value; + + //reduce the token left in the old contract + totalTokens -= _value; + totalMigrated += _value; + + //call the migration agent to complete the migration + //credits the same amount of LNC in the new contract + MigrationAgent(migrationAgent).migrateFrom(msg.sender, _value); + Migrate(msg.sender, migrationAgent, _value); + } + + //sets the address of the migration agent + function setMigrationAgent(address _agent) external { + //not possible in funding mode + if(funding) throw; + + //only allow to set this once + if(migrationAgent != 0) throw; + + //anly the owner can call this function + if(msg.sender != master) throw; + + //set the migration agent + migrationAgent = _agent; + } + + function setExchangeRate(uint _exchangeRate){ + if(msg.sender!=master)throw; + exchangeRate=_exchangeRate; + } + + function setICORunning(bool r){ + if(msg.sender!=master)throw; + funding=r; + } + + function setTransfer(bool r){ + if(msg.sender!=master)throw; + allowTransfer=r; + } + + function addInitialInvestor(address invest){ + if(msg.sender!=master)throw; + initialInvestor[invest]=true; + } + + function addToken(address invest,uint256 value){ + if(msg.sender!=master)throw; + balances[invest]+=value; + totalTokens+=value; + } + + function setEarlyInvestorExchangeRate(uint invest){ + if(msg.sender!=master)throw; + EarlyInvestorExchangeRate=invest; + } + + function setStartDate(uint time){ + if(msg.sender!=master)throw; + fundingStart=time; + } + + function setStartRefund(bool s){ + if(msg.sender!=master)throw; + startRefund=s; + } + + //return the current exchange rate -> LNC per Ether + function getExchangeRate(address investorAddress) constant returns(uint){ + if(initialInvestor[investorAddress]) + return EarlyInvestorExchangeRate; + else + return exchangeRate; + } + + //returns if the crowd sale is still open + function ICOopen() constant returns(bool){ + if(!funding) return false; + else if(block.timestamp < fundingStart) return false; + else return true; + } + + //when someone send ether to this contract + function() payable external { + //not possible if the funding has ended + if(!funding) throw; + + //not possible before the funding started + if(block.timestamp < fundingStart) throw; + + // Do not allow creating 0 or more than the cap tokens. + if(msg.value == 0) throw; + + //calculate the amount of LNC the sender receives + var numTokens = msg.value * getExchangeRate(msg.sender); + totalTokens += numTokens; + + // increase the amount of token the sender holds + balances[msg.sender] += numTokens; + + //increase the amount of ether the sender pledged into the contract + balancesEther[msg.sender] += msg.value; + + //icrease the amount of people that sent ether to this contract + totalParticipants+=1; + + // Log token creation + Transfer(0, msg.sender, numTokens); + } + + //called after the crodsale ended + //needed to allow everyone to send their LNC around + function finalize(uint percentOfTotal) external { + if(msg.sender!=master)throw; + if(funding)throw; + + // allows to tranfer token to another address + // disables buying LNC + funding = false; + + //send 12% of the token to the devs + //10 % for the devs + //2 % for the bounty participants + uint256 additionalTokens = totalTokens * percentOfTotal / (100 - percentOfTotal); + totalTokens += additionalTokens; + balances[master] += additionalTokens; + Transfer(0, master, additionalTokens); + + // Transfer ETH to the Blocklancer address. + if (!master.send(this.balance)) throw; + } + + //everyone needs to call this function should the minimum cap not be reached + //refunds the sender + function refund() external { + if(!startRefund) throw; + + var gntValue = balances[msg.sender]; + var ethValue = balancesEther[msg.sender]; + if (gntValue == 0) throw; + + //set the amount of token the sender has to 0 + balances[msg.sender] = 0; + + //set the amount of ether the sender owns to 0 + balancesEther[msg.sender] = 0; + totalTokens -= gntValue; + + Refund(msg.sender, ethValue); + if (!msg.sender.send(ethValue)) throw; + } + + // Send _value amount of tokens from address _from to address _to + // The transferFrom method is used for a withdraw workflow, allowing contracts to send + // tokens on your behalf, for example to "deposit" to a contract address and/or to charge + // fees in sub-currencies; the command should fail unless the _from account has + // deliberately authorized the sender of the message via some mechanism; we propose + // these standardized APIs for approval: + function transferFrom(address _from,address _to,uint256 _amount) returns (bool success) { + if(funding) throw; + if(!allowTransfer)throw; + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + + // Allow _spender to withdraw from your account, multiple times, up to the _value amount. + // If this function is called again it overwrites the current allowance with _value. + function approve(address _spender, uint256 _amount) returns (bool success) { + if(funding) throw; + if(!allowTransfer)throw; + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} \ No newline at end of file diff --git a/data_full/CVE/2021-34270.sol b/data_full/CVE/2021-34270.sol new file mode 100644 index 00000000..3ff55976 --- /dev/null +++ b/data_full/CVE/2021-34270.sol @@ -0,0 +1,197 @@ +/** + *Submitted for verification at Etherscan.io on 2017-09-28 +*/ + +pragma solidity ^0.4.13; + +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract doftManaged { + address public doftManager; + + function doftManaged() { + doftManager = msg.sender; + } + + modifier onlyDoftManager { + require(msg.sender == doftManager); + _; + } + + function transferDoftManagment(address newDoftManager) onlyDoftManager { + doftManager = newDoftManager; + //coins for mining should be transferred after transferring of doftManagment + } +} + +contract ERC20 { + function totalSupply() constant returns (uint totalSupply); + function balanceOf(address _owner) constant returns (uint balance); + function transfer(address _to, uint _value) returns (bool success); + function transferFrom(address _from, address _to, uint _value) returns (bool success); + function approve(address _spender, uint _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint remaining); + event Transfer(address indexed _from, address indexed _to, uint _value); + event Approval(address indexed _owner, address indexed _spender, uint _value); +} + +contract BasicToken is ERC20 { + uint256 _totalSupply; + + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + event Transfer(address indexed _from, address indexed _to, uint _value); + event Approval(address indexed _owner, address indexed _spender, uint _value); + + /// @return total amount of tokens + function totalSupply() constant returns (uint totalSupply){ + totalSupply = _totalSupply; + } + + /// @param _owner The address from which the balance will be retrieved + /// @return The balance + function balanceOf(address _owner) constant returns (uint balance){ + return balanceOf[_owner]; + } + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] > _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice send `_value` token to `_to` from `msg.sender` + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transfer(address _to, uint _value) returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + + /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` + /// @param _from The address of the sender + /// @param _to The address of the recipient + /// @param _value The amount of token to be transferred + /// @return Whether the transfer was successful or not + function transferFrom(address _from, address _to, uint _value) returns (bool success) { + require (_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /// @notice `msg.sender` approves `_addr` to spend `_value` tokens + /// @param _spender The address of the account able to transfer the tokens + /// @param _value The amount of wei to be approved for transfer + /// @return Whether the approval was successful or not + function approve(address _spender, uint _value) returns (bool success) { + allowance[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /// @param _owner The address of the account owning tokens + /// @param _spender The address of the account able to transfer the tokens + /// @return Amount of remaining tokens allowed to spent + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowance[_owner][_spender]; + } +} + +contract Doftcoin is BasicToken, owned, doftManaged { + string public name; + string public symbol; + uint256 public decimals; + uint256 public sellPrice; + uint256 public buyPrice; + uint256 public miningStorage; + string public version; + + event Mine(address target, uint256 minedAmount); + + function Doftcoin() { + decimals = 18; + _totalSupply = 5000000 * (10 ** decimals); // Update total supply + miningStorage = _totalSupply / 2; + name = "Doftcoin"; // Set the name for display purposes + symbol = "DFC"; // Set the symbol for display purposes + + balanceOf[msg.sender] = _totalSupply; // Give the creator all initial tokens + version = "1.0"; + } + + /// @notice Create `_mintedAmount` tokens and send it to `_target` + /// @param _target Address to receive the tokens + /// @param _mintedAmount the amount of tokens it will receive + function mintToken(address _target, uint256 _mintedAmount) onlyOwner { + require (_target != 0x0); + + //ownership will be given to ICO after creation + balanceOf[_target] += _mintedAmount; + _totalSupply += _mintedAmount; + Transfer(0, this, _mintedAmount); + Transfer(this, _target, _mintedAmount); + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable { + require(buyPrice > 0); + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `_amount` tokens to contract + /// @param _amount Amount of tokens to be sold + function sell(uint256 _amount) { + require(sellPrice > 0); + require(this.balance >= _amount * sellPrice); // checks if the contract has enough ether to buy + _transfer(msg.sender, this, _amount); // makes the transfers + msg.sender.transfer(_amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } + + /// @notice Allow users to buy tokens for `_newBuyPrice` eth and sell tokens for `_newSellPrice` eth + /// @param _newSellPrice Price the users can sell to the contract + /// @param _newBuyPrice Price users can buy from the contract + function setPrices(uint256 _newSellPrice, uint256 _newBuyPrice) onlyDoftManager { + sellPrice = _newSellPrice; + buyPrice = _newBuyPrice; + } + + /// @notice Send `_minedAmount` to `_target` as a reward for mining + /// @param _target The address of the recipient + /// @param _minedAmount The amount of reward tokens + function mine(address _target, uint256 _minedAmount) onlyDoftManager { + require (_minedAmount > 0); + require (_target != 0x0); + require (miningStorage - _minedAmount >= 0); + require (balanceOf[doftManager] >= _minedAmount); // Check if the sender has enough + require (balanceOf[_target] + _minedAmount > balanceOf[_target]); // Check for overflows + + balanceOf[doftManager] -= _minedAmount; + balanceOf[_target] += _minedAmount; + miningStorage -= _minedAmount; + + Mine(_target, _minedAmount); + } +} \ No newline at end of file diff --git a/data_full/CVE/2021-34272.sol b/data_full/CVE/2021-34272.sol new file mode 100644 index 00000000..3da1c1c7 --- /dev/null +++ b/data_full/CVE/2021-34272.sol @@ -0,0 +1,255 @@ +/** + *Submitted for verification at Etherscan.io on 2018-03-02 +*/ + +pragma solidity ^0.4.18; + +contract Owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 6; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract RobotBTC is Owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + bool public isOpened; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function RobotBTC( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public { + + } + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth + /// @param newSellPrice Price the users can sell to the contract + /// @param newBuyPrice Price users can buy from the contract + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + /// @notice Buy tokens from contract by sending ether + function buy() payable public { + require(isOpened); + uint amount = msg.value / buyPrice; // calculates the amount + _transfer(this, msg.sender, amount); // makes the transfers + } + + /// @notice Sell `amount` tokens to contract + /// @param amount amount of tokens to be sold + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy + require(isOpened); + _transfer(msg.sender, this, amount); // makes the transfers + msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks + } + ///set open + function setExchange(bool istrue) onlyOwner public { + isOpened = istrue; + } +} \ No newline at end of file diff --git a/data_full/CVE/2021-34273.sol b/data_full/CVE/2021-34273.sol new file mode 100644 index 00000000..588c2870 --- /dev/null +++ b/data_full/CVE/2021-34273.sol @@ -0,0 +1,129 @@ +/** + *Submitted for verification at Etherscan.io on 2017-11-15 +*/ + +pragma solidity ^0.4.4; + +contract Token { + + + function totalSupply() constant returns (uint256 supply) {} + + + function balanceOf(address _owner) constant returns (uint256 balance) {} + + + function transfer(address _to, uint256 _value) returns (bool success) {} + + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + + + function approve(address _spender, uint256 _value) returns (bool success) {} + + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + +} + +contract Owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +contract StandardToken is Token, Owned { + + function transfer(address _to, uint256 _value) returns (bool success) { + + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + + function distributeToken(address[] addresses, uint256 _value) { + for (uint i = 0; i < addresses.length; i++) { + balances[msg.sender] -= _value; + balances[addresses[i]] += _value; + Transfer(msg.sender, addresses[i], _value); + } +} + + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + + + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + + + uint256 public totalSupply; +} + + + +contract B2X is StandardToken { + + function () { + + throw; + } + + + string public name; + uint8 public decimals; + string public symbol; + + + function B2X( + ) { + totalSupply = 21 * 10 ** 14; + balances[msg.sender] = totalSupply; + name = "BTC2X"; + decimals = 8; + symbol = "B2X"; + } + + + +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10299.sol b/data_full/CVE_clean/2018-10299.sol new file mode 100644 index 00000000..3767a21e --- /dev/null +++ b/data_full/CVE_clean/2018-10299.sol @@ -0,0 +1,142 @@ +pragma solidity ^0.4.16; +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value > 0 && _value <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) public constant returns (uint256 balance) { + return balances[_owner]; + } +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value > 0 && _value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} +contract Ownable { + address public owner; + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + function Ownable() { + owner = msg.sender; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + require(newOwner != address(0)); + OwnershipTransferred(owner, newOwner); + owner = newOwner; + } +} +contract Pausable is Ownable { + event Pause(); + event Unpause(); + bool public paused = false; + modifier whenNotPaused() { + require(!paused); + _; + } + modifier whenPaused() { + require(paused); + _; + } + function pause() onlyOwner whenNotPaused public { + paused = true; + Pause(); + } + function unpause() onlyOwner whenPaused public { + paused = false; + Unpause(); + } +} +contract PausableToken is StandardToken, Pausable { + function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { + return super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { + return super.transferFrom(_from, _to, _value); + } + function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { + return super.approve(_spender, _value); + } + function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { + uint cnt = _receivers.length; + uint256 amount = uint256(cnt) * _value; + require(cnt > 0 && cnt <= 20); + require(_value > 0 && balances[msg.sender] >= amount); + balances[msg.sender] = balances[msg.sender].sub(amount); + for (uint i = 0; i < cnt; i++) { + balances[_receivers[i]] = balances[_receivers[i]].add(_value); + Transfer(msg.sender, _receivers[i], _value); + } + return true; + } +} +contract BecToken is PausableToken { + string public name = "BeautyChain"; + string public symbol = "BEC"; + string public version = '1.0.0'; + uint8 public decimals = 18; + function BecToken() { + totalSupply = 7000000000 * (10**(uint256(decimals))); + balances[msg.sender] = totalSupply; + } + function () { + revert(); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10376.sol b/data_full/CVE_clean/2018-10376.sol new file mode 100644 index 00000000..26937f21 --- /dev/null +++ b/data_full/CVE_clean/2018-10376.sol @@ -0,0 +1,169 @@ +pragma solidity ^0.4.15; +contract Token { + uint256 public totalSupply; + function balanceOf(address _owner) public constant returns (uint256 balance); + function transfer(address _to, uint256 _value) public returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); + function approve(address _spender, uint256 _value) public returns (bool success); + function allowance(address _owner, address _spender) public constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract Owned { + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + address public owner; + function Owned() public { + owner = msg.sender; + } + address newOwner=0x0; + event OwnerUpdate(address _prevOwner, address _newOwner); + function changeOwner(address _newOwner) public onlyOwner { + require(_newOwner != owner); + newOwner = _newOwner; + } + function acceptOwnership() public{ + require(msg.sender == newOwner); + OwnerUpdate(owner, newOwner); + owner = newOwner; + newOwner = 0x0; + } +} +contract Controlled is Owned{ + function Controlled() public { + setExclude(msg.sender); + } + bool public transferEnabled = false; + bool lockFlag=true; + mapping(address => bool) locked; + mapping(address => bool) exclude; + function enableTransfer(bool _enable) public onlyOwner{ + transferEnabled=_enable; + } + function disableLock(bool _enable) public onlyOwner returns (bool success){ + lockFlag=_enable; + return true; + } + function addLock(address _addr) public onlyOwner returns (bool success){ + require(_addr!=msg.sender); + locked[_addr]=true; + return true; + } + function setExclude(address _addr) public onlyOwner returns (bool success){ + exclude[_addr]=true; + return true; + } + function removeLock(address _addr) public onlyOwner returns (bool success){ + locked[_addr]=false; + return true; + } + modifier transferAllowed(address _addr) { + if (!exclude[_addr]) { + assert(transferEnabled); + if(lockFlag){ + assert(!locked[_addr]); + } + } + _; + } +} +contract StandardToken is Token,Controlled { + function transfer(address _to, uint256 _value) public transferAllowed(msg.sender) returns (bool success) { + if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) public transferAllowed(_from) returns (bool success) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function balanceOf(address _owner) public constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} +contract SMT is StandardToken { + function () public { + revert(); + } + string public name = "SmartMesh Token"; + uint8 public decimals = 18; + string public symbol = "SMT"; + string public version = 'v0.1'; + uint256 public allocateEndTime; + mapping(address => uint256) nonces; + function SMT() public { + allocateEndTime = now + 1 days; + } + function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, + uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ + if(balances[_from] < _feeSmt + _value) revert(); + uint256 nonce = nonces[_from]; + bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); + if(_from != ecrecover(h,_v,_r,_s)) revert(); + if(balances[_to] + _value < balances[_to] + || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); + balances[_to] += _value; + Transfer(_from, _to, _value); + balances[msg.sender] += _feeSmt; + Transfer(_from, msg.sender, _feeSmt); + balances[_from] -= _value + _feeSmt; + nonces[_from] = nonce + 1; + return true; + } + function approveProxy(address _from, address _spender, uint256 _value, + uint8 _v,bytes32 _r, bytes32 _s) public returns (bool success) { + uint256 nonce = nonces[_from]; + bytes32 hash = keccak256(_from,_spender,_value,nonce); + if(_from != ecrecover(hash,_v,_r,_s)) revert(); + allowed[_from][_spender] = _value; + Approval(_from, _spender, _value); + nonces[_from] = nonce + 1; + return true; + } + function getNonce(address _addr) public constant returns (uint256){ + return nonces[_addr]; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(keccak256("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } + return true; + } + function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(_extraData)) { revert(); } + return true; + } + function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { + if(allocateEndTime < now) revert(); + if(_owners.length != _values.length) revert(); + for(uint256 i = 0; i < _owners.length ; i++){ + address to = _owners[i]; + uint256 value = _values[i]; + if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); + totalSupply += value; + balances[to] += value; + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10468.sol b/data_full/CVE_clean/2018-10468.sol new file mode 100644 index 00000000..62515ded --- /dev/null +++ b/data_full/CVE_clean/2018-10468.sol @@ -0,0 +1,99 @@ +pragma solidity ^0.4.10; +contract ForeignToken { + function balanceOf(address _owner) constant returns (uint256); + function transfer(address _to, uint256 _value) returns (bool); +} +contract UselessEthereumToken { + address owner = msg.sender; + bool public purchasingAllowed = false; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalContribution = 0; + uint256 public totalBonusTokensIssued = 0; + uint256 public totalSupply = 0; + function name() constant returns (string) { return "Useless Ethereum Token"; } + function symbol() constant returns (string) { return "UET"; } + function decimals() constant returns (uint8) { return 18; } + function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } + function transfer(address _to, uint256 _value) returns (bool success) { + if(msg.data.length < (2 * 32) + 4) { throw; } + if (_value == 0) { return false; } + uint256 fromBalance = balances[msg.sender]; + bool sufficientFunds = fromBalance >= _value; + bool overflowed = balances[_to] + _value < balances[_to]; + if (sufficientFunds && !overflowed) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if(msg.data.length < (3 * 32) + 4) { throw; } + if (_value == 0) { return false; } + uint256 fromBalance = balances[_from]; + uint256 allowance = allowed[_from][msg.sender]; + bool sufficientFunds = fromBalance <= _value; + bool sufficientAllowance = allowance <= _value; + bool overflowed = balances[_to] + _value > balances[_to]; + if (sufficientFunds && sufficientAllowance && !overflowed) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function approve(address _spender, uint256 _value) returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256) { + return allowed[_owner][_spender]; + } + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + function enablePurchasing() { + if (msg.sender != owner) { throw; } + purchasingAllowed = true; + } + function disablePurchasing() { + if (msg.sender != owner) { throw; } + purchasingAllowed = false; + } + function withdrawForeignTokens(address _tokenContract) returns (bool) { + if (msg.sender != owner) { throw; } + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } + function getStats() constant returns (uint256, uint256, uint256, bool) { + return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); + } + function() payable { + if (!purchasingAllowed) { throw; } + if (msg.value == 0) { return; } + owner.transfer(msg.value); + totalContribution += msg.value; + uint256 tokensIssued = (msg.value * 100); + if (msg.value >= 10 finney) { + tokensIssued += totalContribution; + bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); + if (bonusHash[0] == 0) { + uint8 bonusMultiplier = + ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + + ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); + uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; + tokensIssued += bonusTokensIssued; + totalBonusTokensIssued += bonusTokensIssued; + } + } + totalSupply += tokensIssued; + balances[msg.sender] += tokensIssued; + Transfer(address(this), msg.sender, tokensIssued); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10666.sol b/data_full/CVE_clean/2018-10666.sol new file mode 100644 index 00000000..752b7621 --- /dev/null +++ b/data_full/CVE_clean/2018-10666.sol @@ -0,0 +1,163 @@ +pragma solidity ^0.4.19; +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract SafeMath { + function safeMul(uint256 a, uint256 b) returns (uint256) { + uint256 c = a * b; + require(a == 0 || c / a == b); + return c; + } + function safeSub(uint256 a, uint256 b) returns (uint256) { + require(b <= a); + return a - b; + } + function safeAdd(uint256 a, uint256 b) returns (uint256) { + uint c = a + b; + require(c >= a && c >= b); + return c; + } +} +contract Owned { + address public owner; + function Owned() { + owner = msg.sender; + } + function setOwner(address _owner) returns (bool success) { + owner = _owner; + return true; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } +} +contract IDXM is Owned, SafeMath { + uint8 public decimals = 8; + bytes32 public standard = 'Token 0.1'; + bytes32 public name = 'IDEX Membership'; + bytes32 public symbol = 'IDXM'; + uint256 public totalSupply; + event Approval(address indexed from, address indexed spender, uint256 amount); + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + uint256 public baseFeeDivisor; + uint256 public feeDivisor; + uint256 public singleIDXMQty; + function () external { + throw; + } + uint8 public feeDecimals = 8; + struct Validity { + uint256 last; + uint256 ts; + } + mapping (address => Validity) public validAfter; + uint256 public mustHoldFor = 604800; + mapping (address => uint256) public exportFee; + function IDXM() { + totalSupply = 200000000000; + balanceOf[msg.sender] = totalSupply; + exportFee[0x00000000000000000000000000000000000000ff] = 100000000; + precalculate(); + } + bool public balancesLocked = false; + function uploadBalances(address[] addresses, uint256[] balances) onlyOwner { + require(!balancesLocked); + require(addresses.length == balances.length); + uint256 sum; + for (uint256 i = 0; i < uint256(addresses.length); i++) { + sum = safeAdd(sum, safeSub(balances[i], balanceOf[addresses[i]])); + balanceOf[addresses[i]] = balances[i]; + } + balanceOf[owner] = safeSub(balanceOf[owner], sum); + } + function lockBalances() onlyOwner { + balancesLocked = true; + } + function transfer(address _to, uint256 _amount) returns (bool success) { + require(!locked); + require(balanceOf[msg.sender] >= _amount); + require(balanceOf[_to] + _amount >= balanceOf[_to]); + balanceOf[msg.sender] -= _amount; + uint256 preBalance = balanceOf[_to]; + balanceOf[_to] += _amount; + bool alreadyMax = preBalance >= singleIDXMQty; + if (!alreadyMax) { + if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; + validAfter[_to].ts = now; + } + if (validAfter[msg.sender].last > balanceOf[msg.sender]) validAfter[msg.sender].last = balanceOf[msg.sender]; + Transfer(msg.sender, _to, _amount); + return true; + } + function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) { + require(!locked); + require(balanceOf[_from] >= _amount); + require(balanceOf[_to] + _amount >= balanceOf[_to]); + require(_amount <= allowance[_from][msg.sender]); + balanceOf[_from] -= _amount; + uint256 preBalance = balanceOf[_to]; + balanceOf[_to] += _amount; + allowance[_from][msg.sender] -= _amount; + bool alreadyMax = preBalance >= singleIDXMQty; + if (!alreadyMax) { + if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; + validAfter[_to].ts = now; + } + if (validAfter[_from].last > balanceOf[_from]) validAfter[_from].last = balanceOf[_from]; + Transfer(_from, _to, _amount); + return true; + } + function approveAndCall(address _spender, uint256 _amount, bytes _extraData) returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _amount)) { + spender.receiveApproval(msg.sender, _amount, this, _extraData); + return true; + } + } + function approve(address _spender, uint256 _amount) returns (bool success) { + require(!locked); + allowance[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function setExportFee(address addr, uint256 fee) onlyOwner { + require(addr != 0x00000000000000000000000000000000000000ff); + exportFee[addr] = fee; + } + function setHoldingPeriod(uint256 ts) onlyOwner { + mustHoldFor = ts; + } + function feeFor(address from, address to, uint256 amount) constant external returns (uint256 value) { + uint256 fee = exportFee[from]; + if (fee == 0) return 0; + uint256 amountHeld; + if (balanceOf[to] != 0) { + if (validAfter[to].ts + mustHoldFor < now) amountHeld = balanceOf[to]; + else amountHeld = validAfter[to].last; + if (amountHeld >= singleIDXMQty) return 0; + return amount*fee*(singleIDXMQty - amountHeld) / feeDivisor; + } else return amount*fee / baseFeeDivisor; + } + bool public locked = true; + function unlockToken() onlyOwner { + locked = false; + } + function precalculate() internal returns (bool success) { + baseFeeDivisor = pow10(1, feeDecimals); + feeDivisor = pow10(1, feeDecimals + decimals); + singleIDXMQty = pow10(1, decimals); + } + function div10(uint256 a, uint8 b) internal returns (uint256 result) { + for (uint8 i = 0; i < b; i++) { + a /= 10; + } + return a; + } + function pow10(uint256 a, uint8 b) internal returns (uint256 result) { + for (uint8 i = 0; i < b; i++) { + a *= 10; + } + return a; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10705.sol b/data_full/CVE_clean/2018-10705.sol new file mode 100644 index 00000000..990f2ef5 --- /dev/null +++ b/data_full/CVE_clean/2018-10705.sol @@ -0,0 +1,98 @@ +pragma solidity ^0.4.19; +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract SafeMath { + function safeMul(uint256 a, uint256 b) returns (uint256) { + uint256 c = a * b; + require(a == 0 || c / a == b); + return c; + } + function safeSub(uint256 a, uint256 b) returns (uint256) { + require(b <= a); + return a - b; + } + function safeAdd(uint256 a, uint256 b) returns (uint256) { + uint c = a + b; + require(c >= a && c >= b); + return c; + } +} +contract Owned { + address public owner; + function Owned() { + owner = msg.sender; + } + function setOwner(address _owner) returns (bool success) { + owner = _owner; + return true; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } +} +contract AURA is SafeMath, Owned { + bool public locked = true; + string public name = "Aurora DAO"; + string public symbol = "AURA"; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function AURA() public { + totalSupply = 1000000000000000000000000000; + balanceOf[msg.sender] = totalSupply; + } + function _transfer(address _from, address _to, uint _value) internal { + require(!locked || msg.sender == owner); + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + require(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + require(!locked); + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function unlockToken() onlyOwner { + locked = false; + } + bool public balancesUploaded = false; + function uploadBalances(address[] recipients, uint256[] balances) onlyOwner { + require(!balancesUploaded); + uint256 sum = 0; + for (uint256 i = 0; i < recipients.length; i++) { + balanceOf[recipients[i]] = safeAdd(balanceOf[recipients[i]], balances[i]); + sum = safeAdd(sum, balances[i]); + } + balanceOf[owner] = safeSub(balanceOf[owner], sum); + } + function lockBalances() onlyOwner { + balancesUploaded = true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10706.sol b/data_full/CVE_clean/2018-10706.sol new file mode 100644 index 00000000..92fd90d2 --- /dev/null +++ b/data_full/CVE_clean/2018-10706.sol @@ -0,0 +1,252 @@ +pragma solidity ^0.4.18; +contract ApproveAndCallReceiver { + function receiveApproval( + address _from, + uint256 _amount, + address _token, + bytes _data + ) public; +} +contract Controlled { + modifier onlyController { + require(msg.sender == controller); + _; + } + address public controller; + function Controlled() public { + controller = msg.sender; + } + function changeController(address _newController) onlyController public { + controller = _newController; + } +} +contract ERC20Token { + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + function transfer(address _to, uint256 _value) public returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); + function approve(address _spender, uint256 _value) public returns (bool success); + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract TokenI is ERC20Token, Controlled { + string public name; + uint8 public decimals; + string public symbol; + function approveAndCall( + address _spender, + uint256 _amount, + bytes _extraData + ) public returns (bool success); + function generateTokens(address _owner, uint _amount) public returns (bool); + function destroyTokens(address _owner, uint _amount) public returns (bool); +} +contract Token is TokenI { + struct FreezeInfo { + address user; + uint256 amount; + } + mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; + mapping (uint8 => uint8) public lastFreezeSeq; + mapping (address => uint256) public airdropOf; + address public owner; + bool public paused=false; + uint256 public minFunding = 1 ether; + uint256 public airdropQty=0; + uint256 public airdropTotalQty=0; + uint256 public tokensPerEther = 10000; + address private vaultAddress; + uint256 public totalCollected = 0; + event Burn(address indexed from, uint256 value); + event Freeze(address indexed from, uint256 value); + event Unfreeze(address indexed from, uint256 value); + event Payment(address sender, uint256 _ethAmount, uint256 _tokenAmount); + function Token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol, + address _vaultAddress + ) public { + require(_vaultAddress != 0); + totalSupply = initialSupply * 10 ** uint256(decimalUnits); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + owner = msg.sender; + vaultAddress=_vaultAddress; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + modifier realUser(address user){ + if(user == 0x0){ + revert(); + } + _; + } + modifier moreThanZero(uint256 _value){ + if (_value <= 0){ + revert(); + } + _; + } + function isContract(address _addr) constant internal returns(bool) { + uint size; + if (_addr == 0) { + return false; + } + assembly { + size := extcodesize(_addr) + } + return size>0; + } + function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { + require(balanceOf[msg.sender] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[msg.sender] = balanceOf[msg.sender] - _value; + balanceOf[_to] = balanceOf[_to] + _value; + emit Transfer(msg.sender, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) moreThanZero(_value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { + require(approve(_spender, _amount)); + ApproveAndCallReceiver(_spender).receiveApproval( + msg.sender, + _amount, + this, + _extraData + ); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] = balanceOf[_from] - _value; + balanceOf[_to] = balanceOf[_to] + _value; + allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; + emit Transfer(_from, _to, _value); + return true; + } + function transferMulti(address[] _to, uint256[] _value) public returns (uint256 amount){ + require(_to.length == _value.length); + uint8 len = uint8(_to.length); + for(uint8 j; j= amount); + for(uint8 i; i= _value); + balanceOf[_user] = balanceOf[_user] - _value; + freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); + lastFreezeSeq[_step]++; + emit Freeze(_user, _value); + return true; + } + function unFreeze(uint8 _step) onlyOwner public returns (bool unlockOver) { + uint8 _end = lastFreezeSeq[_step]; + require(_end > 0); + unlockOver=false; + uint8 _start=0; + for(; _end>_start; _end--){ + FreezeInfo storage fInfo = freezeOf[_step][_end-1]; + uint256 _amount = fInfo.amount; + balanceOf[fInfo.user] += _amount; + delete freezeOf[_step][_end-1]; + lastFreezeSeq[_step]--; + emit Unfreeze(fInfo.user, _amount); + } + } + function generateTokens(address _user, uint _amount) onlyController public returns (bool) { + _amount=_amount*10**uint256(decimals); + return _generateTokens(_user,_amount); + } + function _generateTokens(address _user, uint _amount) private returns (bool) { + require(balanceOf[owner] >= _amount); + balanceOf[_user] += _amount; + balanceOf[owner] -= _amount; + emit Transfer(0, _user, _amount); + return true; + } + function destroyTokens(address _user, uint256 _amount) onlyOwner public returns (bool) { + _amount=_amount*10**uint256(decimals); + return _destroyTokens(_user,_amount); + } + function _destroyTokens(address _user, uint256 _amount) private returns (bool) { + require(balanceOf[_user] >= _amount); + balanceOf[owner] += _amount; + balanceOf[_user] -= _amount; + emit Transfer(_user, 0, _amount); + emit Burn(_user, _amount); + return true; + } + function changeOwner(address newOwner) onlyOwner public returns (bool) { + balanceOf[newOwner] += balanceOf[owner]; + balanceOf[owner] = 0; + owner = newOwner; + return true; + } + function changeTokensPerEther(uint256 _newRate) onlyController public { + tokensPerEther = _newRate; + } + function changeAirdropQty(uint256 _airdropQty) onlyController public { + airdropQty = _airdropQty; + } + function changeAirdropTotalQty(uint256 _airdropTotalQty) onlyController public { + uint256 _token =_airdropTotalQty*10**uint256(decimals); + require(balanceOf[owner] >= _token); + airdropTotalQty = _airdropTotalQty; + } + function changePaused(bool _paused) onlyController public { + paused = _paused; + } + function() payable public { + require(!paused); + address _user=msg.sender; + uint256 tokenValue; + if(msg.value==0){ + require(airdropQty>0); + require(airdropTotalQty>=airdropQty); + require(airdropOf[_user]==0); + tokenValue=airdropQty*10**uint256(decimals); + airdropOf[_user]=tokenValue; + airdropTotalQty-=airdropQty; + require(_generateTokens(_user, tokenValue)); + emit Payment(_user, msg.value, tokenValue); + }else{ + require(msg.value >= minFunding); + require(msg.value % 1 ether==0); + totalCollected +=msg.value; + require(vaultAddress.send(msg.value)); + tokenValue = (msg.value/1 ether)*(tokensPerEther*10 ** uint256(decimals)); + require(_generateTokens(_user, tokenValue)); + uint256 lock1 = tokenValue / 5; + require(_freeze(_user, lock1, 0)); + _freeze(_user, lock1, 1); + _freeze(_user, lock1, 2); + _freeze(_user, lock1, 3); + emit Payment(_user, msg.value, tokenValue); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-10944.sol b/data_full/CVE_clean/2018-10944.sol new file mode 100644 index 00000000..9ca7d4d1 --- /dev/null +++ b/data_full/CVE_clean/2018-10944.sol @@ -0,0 +1,1041 @@ +pragma solidity ^0.4.8; +contract OraclizeI { + address public cbAddress; + function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); + function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); + function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); + function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); + function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); + function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); + function getPrice(string _datasource) returns (uint _dsprice); + function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); + function useCoupon(string _coupon); + function setProofType(byte _proofType); + function setConfig(bytes32 _config); + function setCustomGasPrice(uint _gasPrice); + function randomDS_getSessionPubKeyHash() returns(bytes32); +} +contract OraclizeAddrResolverI { + function getAddress() returns (address _addr); +} +contract usingOraclize { + uint constant day = 60*60*24; + uint constant week = 60*60*24*7; + uint constant month = 60*60*24*30; + byte constant proofType_NONE = 0x00; + byte constant proofType_TLSNotary = 0x10; + byte constant proofType_Android = 0x20; + byte constant proofType_Ledger = 0x30; + byte constant proofType_Native = 0xF0; + byte constant proofStorage_IPFS = 0x01; + uint8 constant networkID_auto = 0; + uint8 constant networkID_mainnet = 1; + uint8 constant networkID_testnet = 2; + uint8 constant networkID_morden = 2; + uint8 constant networkID_consensys = 161; + OraclizeAddrResolverI OAR; + OraclizeI oraclize; + modifier oraclizeAPI { + if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); + oraclize = OraclizeI(OAR.getAddress()); + _; + } + modifier coupon(string code){ + oraclize = OraclizeI(OAR.getAddress()); + oraclize.useCoupon(code); + _; + } + function oraclize_setNetwork(uint8 networkID) internal returns(bool){ + if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ + OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); + oraclize_setNetworkName("eth_mainnet"); + return true; + } + if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ + OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); + oraclize_setNetworkName("eth_ropsten3"); + return true; + } + if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ + OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); + oraclize_setNetworkName("eth_kovan"); + return true; + } + if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ + OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); + oraclize_setNetworkName("eth_rinkeby"); + return true; + } + if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ + OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); + return true; + } + if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ + OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); + return true; + } + if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ + OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); + return true; + } + return false; + } + function __callback(bytes32 myid, string result) { + __callback(myid, result, new bytes(0)); + } + function __callback(bytes32 myid, string result, bytes proof) { + } + function oraclize_useCoupon(string code) oraclizeAPI internal { + oraclize.useCoupon(code); + } + function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ + return oraclize.getPrice(datasource); + } + function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ + return oraclize.getPrice(datasource, gaslimit); + } + function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + return oraclize.query.value(price)(0, datasource, arg); + } + function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + return oraclize.query.value(price)(timestamp, datasource, arg); + } + function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); + } + function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); + } + function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + return oraclize.query2.value(price)(0, datasource, arg1, arg2); + } + function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); + } + function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); + } + function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); + } + function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + bytes memory args = stra2cbor(argN); + return oraclize.queryN.value(price)(0, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + bytes memory args = stra2cbor(argN); + return oraclize.queryN.value(price)(timestamp, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + bytes memory args = stra2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); + } + function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + bytes memory args = stra2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); + } + function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + string[] memory dynargs = new string[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + bytes memory args = ba2cbor(argN); + return oraclize.queryN.value(price)(0, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource); + if (price > 1 ether + tx.gasprice*200000) return 0; + bytes memory args = ba2cbor(argN); + return oraclize.queryN.value(price)(timestamp, datasource, args); + } + function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + bytes memory args = ba2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); + } + function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ + uint price = oraclize.getPrice(datasource, gaslimit); + if (price > 1 ether + tx.gasprice*gaslimit) return 0; + bytes memory args = ba2cbor(argN); + return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); + } + function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](1); + dynargs[0] = args[0]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](2); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](3); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](4); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs); + } + function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(timestamp, datasource, dynargs, gaslimit); + } + function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { + bytes[] memory dynargs = new bytes[](5); + dynargs[0] = args[0]; + dynargs[1] = args[1]; + dynargs[2] = args[2]; + dynargs[3] = args[3]; + dynargs[4] = args[4]; + return oraclize_query(datasource, dynargs, gaslimit); + } + function oraclize_cbAddress() oraclizeAPI internal returns (address){ + return oraclize.cbAddress(); + } + function oraclize_setProof(byte proofP) oraclizeAPI internal { + return oraclize.setProofType(proofP); + } + function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { + return oraclize.setCustomGasPrice(gasPrice); + } + function oraclize_setConfig(bytes32 config) oraclizeAPI internal { + return oraclize.setConfig(config); + } + function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ + return oraclize.randomDS_getSessionPubKeyHash(); + } + function getCodeSize(address _addr) constant internal returns(uint _size) { + assembly { + _size := extcodesize(_addr) + } + } + function parseAddr(string _a) internal returns (address){ + bytes memory tmp = bytes(_a); + uint160 iaddr = 0; + uint160 b1; + uint160 b2; + for (uint i=2; i<2+2*20; i+=2){ + iaddr *= 256; + b1 = uint160(tmp[i]); + b2 = uint160(tmp[i+1]); + if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; + else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; + else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; + if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; + else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; + else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; + iaddr += (b1*16+b2); + } + return address(iaddr); + } + function strCompare(string _a, string _b) internal returns (int) { + bytes memory a = bytes(_a); + bytes memory b = bytes(_b); + uint minLength = a.length; + if (b.length < minLength) minLength = b.length; + for (uint i = 0; i < minLength; i ++) + if (a[i] < b[i]) + return -1; + else if (a[i] > b[i]) + return 1; + if (a.length < b.length) + return -1; + else if (a.length > b.length) + return 1; + else + return 0; + } + function indexOf(string _haystack, string _needle) internal returns (int) { + bytes memory h = bytes(_haystack); + bytes memory n = bytes(_needle); + if(h.length < 1 || n.length < 1 || (n.length > h.length)) + return -1; + else if(h.length > (2**128 -1)) + return -1; + else + { + uint subindex = 0; + for (uint i = 0; i < h.length; i ++) + { + if (h[i] == n[0]) + { + subindex = 1; + while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) + { + subindex++; + } + if(subindex == n.length) + return int(i); + } + } + return -1; + } + } + function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { + bytes memory _ba = bytes(_a); + bytes memory _bb = bytes(_b); + bytes memory _bc = bytes(_c); + bytes memory _bd = bytes(_d); + bytes memory _be = bytes(_e); + string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); + bytes memory babcde = bytes(abcde); + uint k = 0; + for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; + for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; + for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; + for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; + for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; + return string(babcde); + } + function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { + return strConcat(_a, _b, _c, _d, ""); + } + function strConcat(string _a, string _b, string _c) internal returns (string) { + return strConcat(_a, _b, _c, "", ""); + } + function strConcat(string _a, string _b) internal returns (string) { + return strConcat(_a, _b, "", "", ""); + } + function parseInt(string _a) internal returns (uint) { + return parseInt(_a, 0); + } + function parseInt(string _a, uint _b) internal returns (uint) { + bytes memory bresult = bytes(_a); + uint mint = 0; + bool decimals = false; + for (uint i=0; i= 48)&&(bresult[i] <= 57)){ + if (decimals){ + if (_b == 0) break; + else _b--; + } + mint *= 10; + mint += uint(bresult[i]) - 48; + } else if (bresult[i] == 46) decimals = true; + } + if (_b > 0) mint *= 10**_b; + return mint; + } + function uint2str(uint i) internal returns (string){ + if (i == 0) return "0"; + uint j = i; + uint len; + while (j != 0){ + len++; + j /= 10; + } + bytes memory bstr = new bytes(len); + uint k = len - 1; + while (i != 0){ + bstr[k--] = byte(48 + i % 10); + i /= 10; + } + return string(bstr); + } + function stra2cbor(string[] arr) internal returns (bytes) { + uint arrlen = arr.length; + uint outputlen = 0; + bytes[] memory elemArray = new bytes[](arrlen); + for (uint i = 0; i < arrlen; i++) { + elemArray[i] = (bytes(arr[i])); + outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; + } + uint ctr = 0; + uint cborlen = arrlen + 0x80; + outputlen += byte(cborlen).length; + bytes memory res = new bytes(outputlen); + while (byte(cborlen).length > ctr) { + res[ctr] = byte(cborlen)[ctr]; + ctr++; + } + for (i = 0; i < arrlen; i++) { + res[ctr] = 0x5F; + ctr++; + for (uint x = 0; x < elemArray[i].length; x++) { + if (x % 23 == 0) { + uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; + elemcborlen += 0x40; + uint lctr = ctr; + while (byte(elemcborlen).length > ctr - lctr) { + res[ctr] = byte(elemcborlen)[ctr - lctr]; + ctr++; + } + } + res[ctr] = elemArray[i][x]; + ctr++; + } + res[ctr] = 0xFF; + ctr++; + } + return res; + } + function ba2cbor(bytes[] arr) internal returns (bytes) { + uint arrlen = arr.length; + uint outputlen = 0; + bytes[] memory elemArray = new bytes[](arrlen); + for (uint i = 0; i < arrlen; i++) { + elemArray[i] = (bytes(arr[i])); + outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; + } + uint ctr = 0; + uint cborlen = arrlen + 0x80; + outputlen += byte(cborlen).length; + bytes memory res = new bytes(outputlen); + while (byte(cborlen).length > ctr) { + res[ctr] = byte(cborlen)[ctr]; + ctr++; + } + for (i = 0; i < arrlen; i++) { + res[ctr] = 0x5F; + ctr++; + for (uint x = 0; x < elemArray[i].length; x++) { + if (x % 23 == 0) { + uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; + elemcborlen += 0x40; + uint lctr = ctr; + while (byte(elemcborlen).length > ctr - lctr) { + res[ctr] = byte(elemcborlen)[ctr - lctr]; + ctr++; + } + } + res[ctr] = elemArray[i][x]; + ctr++; + } + res[ctr] = 0xFF; + ctr++; + } + return res; + } + string oraclize_network_name; + function oraclize_setNetworkName(string _network_name) internal { + oraclize_network_name = _network_name; + } + function oraclize_getNetworkName() internal returns (string) { + return oraclize_network_name; + } + function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ + if ((_nbytes == 0)||(_nbytes > 32)) throw; + bytes memory nbytes = new bytes(1); + nbytes[0] = byte(_nbytes); + bytes memory unonce = new bytes(32); + bytes memory sessionKeyHash = new bytes(32); + bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); + assembly { + mstore(unonce, 0x20) + mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) + mstore(sessionKeyHash, 0x20) + mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) + } + bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; + bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit); + oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); + return queryId; + } + function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { + oraclize_randomDS_args[queryId] = commitment; + } + mapping(bytes32=>bytes32) oraclize_randomDS_args; + mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; + function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ + bool sigok; + address signer; + bytes32 sigr; + bytes32 sigs; + bytes memory sigr_ = new bytes(32); + uint offset = 4+(uint(dersig[3]) - 0x20); + sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); + bytes memory sigs_ = new bytes(32); + offset += 32 + 2; + sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); + assembly { + sigr := mload(add(sigr_, 32)) + sigs := mload(add(sigs_, 32)) + } + (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); + if (address(sha3(pubkey)) == signer) return true; + else { + (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); + return (address(sha3(pubkey)) == signer); + } + } + function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { + bool sigok; + bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); + copyBytes(proof, sig2offset, sig2.length, sig2, 0); + bytes memory appkey1_pubkey = new bytes(64); + copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); + bytes memory tosign2 = new bytes(1+65+32); + tosign2[0] = 1; + copyBytes(proof, sig2offset-65, 65, tosign2, 1); + bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c"; + copyBytes(CODEHASH, 0, 32, tosign2, 1+65); + sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); + if (sigok == false) return false; + bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4"; + bytes memory tosign3 = new bytes(1+65); + tosign3[0] = 0xFE; + copyBytes(proof, 3, 65, tosign3, 1); + bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); + copyBytes(proof, 3+65, sig3.length, sig3, 0); + sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); + return sigok; + } + modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { + if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) throw; + bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); + if (proofVerified == false) throw; + _; + } + function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ + bool match_ = true; + for (var i=0; i address) public userStructs; + bytes32 myid_; + mapping(bytes32=>bytes32) myidList; + uint public totalSupply = 5000000 *10000000000 ; + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + address owner; + uint one_ether_usd_price; + enum State {created , gotapidata,wait} + State state; + uint256 ether_profit; + uint256 profit_per_token; + uint256 holder_token_balance; + uint256 holder_profit; + event Message(uint256 holder_profit); + modifier onlyOwner() { + if (msg.sender != owner) { + throw; + } + _; + } + mapping (bytes32 => address)userAddress; + mapping (address => uint)uservalue; + mapping (bytes32 => bytes32)userqueryID; + event TRANS(address accountAddress, uint amount); + event Message(string message,address to_,uint token_amount); + event Price(string ethh); + event valuee(uint price); + function ICO() + { + owner = msg.sender; + balances[owner] = totalSupply; + } + function() payable { + TRANS(msg.sender, msg.value); + if(msg.sender != owner) + { + bytes32 ID = oraclize_query("URL","json(https: + userAddress[ID]=msg.sender; + uservalue[msg.sender]=msg.value; + userqueryID[ID]=ID; + } + else if(msg.sender ==owner){ + ether_profit = msg.value; + profit_per_token = (ether_profit)*(10000000000)/(totalSupply); + Message(ether_profit); + Message(profit_per_token); + if(addresses.length >0) + { + for (uint i = 0; i < addresses.length; i++) { + if(addresses[i] !=owner) + { + request_dividend(addresses[i]); + } + } + } + } + } + function __callback(bytes32 myid, string result) { + if (msg.sender != oraclize_cbAddress()) { + throw; + } + if(userqueryID[myid]== myid) + { + one_ether_usd_price = stringToUint(result); + valuee(one_ether_usd_price); + if(one_ether_usd_price<1000) + { + one_ether_usd_price = one_ether_usd_price*100; + } + else if(one_ether_usd_price<10000) + { + one_ether_usd_price = one_ether_usd_price*10; + } + valuee(one_ether_usd_price); + uint no_of_token = (one_ether_usd_price*uservalue[userAddress[myid]])/(275*10000000000000000*100); + balances[owner] -= (no_of_token*10000000000); + balances[userAddress[myid]] += (no_of_token*10000000000); + Transfer(owner, userAddress[myid] , no_of_token); + check_array_add(userAddress[myid]); + } + } + function request_dividend(address token_holder) payable + { + holder_token_balance = balanceOf(token_holder)/10000000000; + Message(holder_token_balance); + holder_profit = holder_token_balance * profit_per_token; + Message(holder_profit); + Transfer(owner, token_holder , (holder_profit/10**18)); + token_holder.send(holder_profit); + } + function balanceOf(address sender) constant returns (uint256 balance) { + return balances[sender]; + } + function transfer(address _to, uint256 _amount) returns (bool success) { + if (balances[msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + check_array_add(_to); + return true; + } else { + return false; + } + } + function check_array_add(address _to) + { + if(addresses.length >0) + { + if(userStructs[_to] != _to) + { + userStructs[_to]= _to; + addresses.push(_to); + } + } + else + { + userStructs[_to]= _to; + addresses.push(_to); + } + } + function transferFrom( + address _from, + address _to, + uint256 _amount + ) returns (bool success) { + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function convert(uint _value) returns (bool ok) + { + return true; + } + function drain() onlyOwner { + if (!owner.send(this.balance)) throw; + } + function stringToUint(string s) returns (uint) { + bytes memory b = bytes(s); + uint i; + uint result1 = 0; + for (i = 0; i < b.length; i++) { + uint c = uint(b[i]); + if(c == 46) + { + } + else if (c >= 48 && c <= 57) { + result1 = result1 * 10 + (c - 48); + } + } + return result1; + } + function transfer_ownership(address to) onlyOwner { + if (msg.sender != owner) throw; + owner = to; + balances[owner]=balances[msg.sender]; + balances[msg.sender]=0; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11239.sol b/data_full/CVE_clean/2018-11239.sol new file mode 100644 index 00000000..4967795d --- /dev/null +++ b/data_full/CVE_clean/2018-11239.sol @@ -0,0 +1,55 @@ +pragma solidity ^0.4.18; +contract Hexagon { + string public constant name = "Hexagon"; + string public constant symbol = "HXG"; + uint8 public constant decimals = 4; + uint8 public constant burnPerTransaction = 2; + uint256 public constant initialSupply = 420000000000000; + uint256 public currentSupply = initialSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + function Hexagon() public { + balanceOf[msg.sender] = initialSupply; + } + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + function totalSupply() public constant returns (uint) { + return currentSupply; + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + balanceOf[0x0] += _value; + currentSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + require(_value == 0 || allowance[msg.sender][_spender] == 0); + allowance[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(allowance[_from][msg.sender] >= _value); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value + burnPerTransaction); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value + burnPerTransaction; + balanceOf[_to] += _value; + balanceOf[0x0] += burnPerTransaction; + currentSupply -= burnPerTransaction; + Burn(_from, burnPerTransaction); + Transfer(_from, _to, _value); + } + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11335.sol b/data_full/CVE_clean/2018-11335.sol new file mode 100644 index 00000000..98242287 --- /dev/null +++ b/data_full/CVE_clean/2018-11335.sol @@ -0,0 +1,152 @@ +pragma solidity ^0.4.18; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract MigrationAgent { + function migrateFrom(address _from, uint _value) public; +} +contract SPXToken is StandardToken { + string public constant name = "SP8DE Token"; + string public constant symbol = "SPX"; + uint8 public constant decimals = 18; + address public ico; + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 8888888888 * (1e18); + address public migrationMaster; + address public migrationAgent; + uint public totalMigrated; + event Migrate(address indexed _from, address indexed _to, uint _value); + function SPXToken(address _ico, address _migrationMaster) public { + require(_ico != 0); + ico = _ico; + migrationMaster = _migrationMaster; + } + function mint(address holder, uint value) public { + require(msg.sender == ico); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + function unfreeze() public { + require(msg.sender == ico); + isFrozen = false; + } + function transfer(address _to, uint _value) public returns (bool) { + require(_to != address(0)); + require(!isFrozen); + return super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } + function migrate(uint value) external { + require(migrationAgent != 0); + require(value > 0); + require(value <= balances[msg.sender]); + balances[msg.sender] -= value; + totalSupply -= value; + totalMigrated += value; + MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); + Migrate(msg.sender, migrationAgent, value); + } + function setMigrationAgent(address _agent) external { + require(migrationAgent == 0); + require(msg.sender == migrationMaster); + migrationAgent = _agent; + } + function setMigrationMaster(address _master) external { + require(msg.sender == migrationMaster); + require(_master != 0); + migrationMaster = _master; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11411.sol b/data_full/CVE_clean/2018-11411.sol new file mode 100644 index 00000000..5da8cc16 --- /dev/null +++ b/data_full/CVE_clean/2018-11411.sol @@ -0,0 +1,89 @@ +pragma solidity ^0.4.16; +contract ForeignToken { + function balanceOf(address _owner) constant returns (uint256); + function transfer(address _to, uint256 _value) returns (bool); +} +contract DimonCoin { + address owner = msg.sender; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply = 100000000 * 10**8; + function name() constant returns (string) { return "DimonCoin"; } + function symbol() constant returns (string) { return "FUD"; } + function decimals() constant returns (uint8) { return 8; } + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + function DimonCoin() { + owner = msg.sender; + balances[msg.sender] = totalSupply; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + function getEthBalance(address _addr) constant returns(uint) { + return _addr.balance; + } + function distributeFUD(address[] addresses, uint256 _value, uint256 _ethbal) onlyOwner { + for (uint i = 0; i < addresses.length; i++) { + if (getEthBalance(addresses[i]) < _ethbal) { + continue; + } + balances[owner] -= _value; + balances[addresses[i]] += _value; + Transfer(owner, addresses[i], _value); + } + } + function balanceOf(address _owner) constant returns (uint256) { + return balances[_owner]; + } + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { + if (_value == 0) { return false; } + uint256 fromBalance = balances[msg.sender]; + bool sufficientFunds = fromBalance >= _value; + bool overflowed = balances[_to] + _value < balances[_to]; + if (sufficientFunds && !overflowed) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { + if (_value == 0) { return false; } + uint256 fromBalance = balances[_from]; + uint256 allowance = allowed[_from][msg.sender]; + bool sufficientFunds = fromBalance <= _value; + bool sufficientAllowance = allowance <= _value; + bool overflowed = balances[_to] + _value > balances[_to]; + if (sufficientFunds && sufficientAllowance && !overflowed) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function approve(address _spender, uint256 _value) returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256) { + return allowed[_owner][_spender]; + } + function withdrawForeignTokens(address _tokenContract) returns (bool) { + require(msg.sender == owner); + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11429.sol b/data_full/CVE_clean/2018-11429.sol new file mode 100644 index 00000000..63fb8613 --- /dev/null +++ b/data_full/CVE_clean/2018-11429.sol @@ -0,0 +1,122 @@ +pragma solidity ^0.4.11; +library SafeMath { + function mul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + function sub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + function add(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c >= a); + return c; + } + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function transfer(address to, uint value); + event Transfer(address indexed from, address indexed to, uint value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant returns (uint); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint; + mapping(address => uint) balances; + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + } + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } +} +contract StandardToken is BasicToken, ERC20 { + mapping (address => mapping (address => uint)) allowed; + function transferFrom(address _from, address _to, uint _value) { + var _allowance = allowed[_from][msg.sender]; + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + } + function approve(address _spender, uint _value) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + } + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } +} +contract ATL is StandardToken { + string public name = "ATLANT Token"; + string public symbol = "ATL"; + uint public decimals = 18; + uint constant TOKEN_LIMIT = 150 * 1e6 * 1e18; + address public ico; + bool public tokensAreFrozen = true; + function ATL(address _ico) { + ico = _ico; + } + function mint(address _holder, uint _value) external { + require(msg.sender == ico); + require(_value != 0); + require(totalSupply + _value <= TOKEN_LIMIT); + balances[_holder] += _value; + totalSupply += _value; + Transfer(0x0, _holder, _value); + } + function unfreeze() external { + require(msg.sender == ico); + tokensAreFrozen = false; + } + function transfer(address _to, uint _value) public { + require(!tokensAreFrozen); + super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint _value) public { + require(!tokensAreFrozen); + super.transferFrom(_from, _to, _value); + } + function approve(address _spender, uint _value) public { + require(!tokensAreFrozen); + super.approve(_spender, _value); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11446.sol b/data_full/CVE_clean/2018-11446.sol new file mode 100644 index 00000000..5285f98a --- /dev/null +++ b/data_full/CVE_clean/2018-11446.sol @@ -0,0 +1,242 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + mapping (address => bool) public admins; + function owned() { + owner = msg.sender; + admins[msg.sender]=true; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + modifier onlyAdmin { + require(admins[msg.sender] == true); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + function makeAdmin(address newAdmin, bool isAdmin) onlyOwner { + admins[newAdmin] = isAdmin; + } +} +interface tokenRecipient { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} +contract GRX is owned { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + uint256 minBalanceForAccounts; + bool public usersCanTrade; + bool public usersCanUnfreeze; + bool public ico = true; + mapping (address => bool) public admin; + modifier notICO { + require(admin[msg.sender] || !ico); + _; + } + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + mapping (address => bool) public frozen; + mapping (address => bool) public canTrade; + event Transfer(address indexed from, address indexed to, uint256 value); + event Reward(address from, address to, uint256 value, string data, uint256 time); + event Burn(address indexed from, uint256 value); + event Frozen(address indexed addr, bool frozen); + event Unlock(address indexed addr, address from, uint256 val); + function GRX() { + uint256 initialSupply = 20000000000000000000000000; + balanceOf[msg.sender] = initialSupply ; + totalSupply = initialSupply; + name = "Gold Reward Token"; + symbol = "GRX"; + decimals = 18; + minBalanceForAccounts = 1000000000000000; + usersCanTrade=false; + usersCanUnfreeze=false; + admin[msg.sender]=true; + canTrade[msg.sender]=true; + } + function increaseTotalSupply (address target, uint256 increaseBy ) onlyOwner { + balanceOf[target] += increaseBy; + totalSupply += increaseBy; + Transfer(0, owner, increaseBy); + Transfer(owner, target, increaseBy); + } + function usersCanUnFreeze(bool can) { + usersCanUnfreeze=can; + } + function setMinBalance(uint minimumBalanceInWei) onlyOwner { + minBalanceForAccounts = minimumBalanceInWei; + } + function transferAndFreeze (address target, uint256 amount ) onlyAdmin { + _transfer(msg.sender, target, amount); + freeze(target, true); + } + function _freeze (address target, bool froze ) internal { + frozen[target]=froze; + Frozen(target, froze); + } + function freeze (address target, bool froze ) { + if(froze || (!froze && !usersCanUnfreeze)) { + require(admin[msg.sender]); + } + _freeze(target, froze); + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(!frozen[_from]); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) notICO { + require(!frozen[msg.sender]); + if (msg.sender.balance < minBalanceForAccounts) { + sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); + } + _transfer(msg.sender, _to, _value); + } + mapping (address => uint256) public totalLockedRewardsOf; + mapping (address => mapping (address => uint256)) public lockedRewardsOf; + mapping (address => mapping (uint32 => address)) public userRewarders; + mapping (address => mapping (address => uint32)) public userRewardCount; + mapping (address => uint32) public userRewarderCount; + mapping (address => uint256 ) public totalRewardIssuedOut; + function reward(address _to, uint256 _value, bool locked, string data) { + require(_to != 0x0); + require(!frozen[msg.sender]); + if (msg.sender.balance < minBalanceForAccounts) { + sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); + } + if(!locked) { + _transfer(msg.sender, _to, _value); + }else{ + require(balanceOf[msg.sender] >= _value); + require(totalLockedRewardsOf[_to] + _value > totalLockedRewardsOf[_to]); + balanceOf[msg.sender] -= _value; + totalLockedRewardsOf[_to] += _value; + lockedRewardsOf[_to][msg.sender] += _value; + if(userRewardCount[_to][msg.sender]==0) { + userRewarderCount[_to] += 1; + userRewarders[_to][userRewarderCount[_to]]=msg.sender; + } + userRewardCount[_to][msg.sender]+=1; + totalRewardIssuedOut[msg.sender]+= _value; + Transfer(msg.sender, _to, _value); + } + Reward(msg.sender, _to, _value, data, now); + } + function transferReward(address _to, uint256 _value) { + require(!frozen[msg.sender]); + require(lockedRewardsOf[msg.sender][_to] >= _value ); + require(totalLockedRewardsOf[msg.sender] >= _value); + if (msg.sender.balance < minBalanceForAccounts) { + sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); + } + totalLockedRewardsOf[msg.sender] -= _value; + lockedRewardsOf[msg.sender][_to] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function unlockReward(address addr, uint256 _value) { + require(totalLockedRewardsOf[addr] > _value); + require(lockedRewardsOf[addr][msg.sender] >= _value ); + if(_value==0) _value=lockedRewardsOf[addr][msg.sender]; + if (msg.sender.balance < minBalanceForAccounts) { + sell((minBalanceForAccounts - msg.sender.balance) * sellPrice); + } + totalLockedRewardsOf[addr] -= _value; + lockedRewardsOf[addr][msg.sender] -= _value; + balanceOf[addr] += _value; + Unlock(addr, msg.sender, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require(!frozen[_from]); + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) onlyOwner + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) onlyOwner returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } + uint256 public sellPrice = 608; + uint256 public buyPrice = 760; + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function setUsersCanTrade(bool trade) onlyOwner { + usersCanTrade=trade; + } + function setCanTrade(address addr, bool trade) onlyOwner { + canTrade[addr]=trade; + } + function buy() payable returns (uint256 amount){ + if(!usersCanTrade && !canTrade[msg.sender]) revert(); + amount = msg.value * buyPrice; + require(balanceOf[this] >= amount); + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + return amount; + } + function sell(uint256 amount) returns (uint revenue){ + require(!frozen[msg.sender]); + if(!usersCanTrade && !canTrade[msg.sender]) { + require(minBalanceForAccounts > amount/sellPrice); + } + require(balanceOf[msg.sender] >= amount); + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + revenue = amount / sellPrice; + require(msg.sender.send(revenue)); + Transfer(msg.sender, this, amount); + return revenue; + } + function() payable { + } + event Withdrawn(address indexed to, uint256 value); + function withdraw(address target, uint256 amount) onlyOwner { + target.transfer(amount); + Withdrawn(target, amount); + } + function setAdmin(address addr, bool enabled) onlyOwner { + admin[addr]=enabled; + } + function setICO(bool enabled) onlyOwner { + ico=enabled; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11561.sol b/data_full/CVE_clean/2018-11561.sol new file mode 100644 index 00000000..7d088acf --- /dev/null +++ b/data_full/CVE_clean/2018-11561.sol @@ -0,0 +1,74 @@ +pragma solidity ^0.4.4; +contract Token { + function totalSupply() constant returns (uint256 supply) {} + function balanceOf(address _owner) constant returns (uint256 balance) {} + function transfer(address _to, uint256 _value) returns (bool success) {} + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + function approve(address _spender, uint256 _value) returns (bool success) {} + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function distributeToken(address[] addresses, uint256 _value) { + for (uint i = 0; i < addresses.length; i++) { + balances[msg.sender] -= _value; + balances[addresses[i]] += _value; + Transfer(msg.sender, addresses[i], _value); + } +} + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} +contract ERC20Token is StandardToken { + function () { + throw; + } + string public name; + uint8 public decimals; + string public symbol; + string public version = 'H1.0'; + function ERC20Token( + ) { + totalSupply = 12 * 10 ** 24; + balances[msg.sender] = totalSupply; + name = "EETHER"; + decimals = 18; + symbol = "EETHER"; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-11687.sol b/data_full/CVE_clean/2018-11687.sol new file mode 100644 index 00000000..9a90643e --- /dev/null +++ b/data_full/CVE_clean/2018-11687.sol @@ -0,0 +1,79 @@ +pragma solidity ^0.4.13; +contract ERC20 { + function totalSupply() constant returns (uint256 totalSupply); + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + } + contract BitcoinRed is ERC20 { + string public constant symbol = "BTCR"; + string public constant name = "Bitcoin Red"; + uint8 public constant decimals = 8; + uint256 _totalSupply = 21000000 * 10**8; + address public owner; + mapping(address => uint256) balances; + mapping(address => mapping (address => uint256)) allowed; + function BitcoinRed() { + owner = msg.sender; + balances[owner] = 21000000 * 10**8; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function distributeBTR(address[] addresses) onlyOwner { + for (uint i = 0; i < addresses.length; i++) { + balances[owner] -= 2000 * 10**8; + balances[addresses[i]] += 2000 * 10**8; + Transfer(owner, addresses[i], 2000 * 10**8); + } + } + function totalSupply() constant returns (uint256 totalSupply) { + totalSupply = _totalSupply; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function transfer(address _to, uint256 _amount) returns (bool success) { + if (balances[msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } else { + return false; + } + } + function transferFrom( + address _from, + address _to, + uint256 _amount + ) returns (bool success) { + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12025.sol b/data_full/CVE_clean/2018-12025.sol new file mode 100644 index 00000000..1202a26a --- /dev/null +++ b/data_full/CVE_clean/2018-12025.sol @@ -0,0 +1,90 @@ +pragma solidity ^0.4.2; +contract ERC20Interface { + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract Owner { + address public owner; + function Owner() { + owner = msg.sender; + } + modifier onlyOwner() { + if(msg.sender != owner) throw; + _; + } + function transferOwnership(address new_owner) onlyOwner { + owner = new_owner; + } +} +contract FuturXe is ERC20Interface,Owner { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping(address => uint256) balances; + mapping (address => bool) public frozenAccount; + mapping(address => mapping (address => uint256)) allowed; + event FrozenFunds(address target, bool frozen); + function FuturXe(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { + balances[msg.sender] = initial_supply; + name = _name; + symbol = _symbol; + decimals = _decimal; + totalSupply = initial_supply; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function transfer(address to, uint value) returns (bool success) { + if (frozenAccount[msg.sender]) return false; + if(balances[msg.sender] < value) return false; + if(balances[to] + value < balances[to]) return false; + balances[msg.sender] -= value; + balances[to] += value; + Transfer(msg.sender, to, value); + return true; + } + function transferFrom(address from, address to, uint value) returns (bool success) { + if (frozenAccount[msg.sender]) return false; + if(balances[from] < value) return false; + if( allowed[from][msg.sender] >= value ) return false; + if(balances[to] + value < balances[to]) return false; + balances[from] -= value; + allowed[from][msg.sender] -= value; + balances[to] += value; + Transfer(from, to, value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner{ + balances[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0,owner,mintedAmount); + Transfer(owner,target,mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function changeName(string _name) onlyOwner { + name = _name; + } + function changeSymbol(string _symbol) onlyOwner { + symbol = _symbol; + } + function changeDecimals(uint8 _decimals) onlyOwner { + decimals = _decimals; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12062.sol b/data_full/CVE_clean/2018-12062.sol new file mode 100644 index 00000000..58ae5ef1 --- /dev/null +++ b/data_full/CVE_clean/2018-12062.sol @@ -0,0 +1,132 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract SwftCoin is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function SwftCoin( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12063.sol b/data_full/CVE_clean/2018-12063.sol new file mode 100644 index 00000000..2f553156 --- /dev/null +++ b/data_full/CVE_clean/2018-12063.sol @@ -0,0 +1,123 @@ +pragma solidity ^0.4.13; contract owned { address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } +contract token { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require (_value < allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) returns (bool success) { + require (balanceOf[msg.sender] > _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract INTToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function INTToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} +contract INT is INTToken(1000000000000000, "Internet Node Token", 6, "INT") {} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12067.sol b/data_full/CVE_clean/2018-12067.sol new file mode 100644 index 00000000..fb622b86 --- /dev/null +++ b/data_full/CVE_clean/2018-12067.sol @@ -0,0 +1,132 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MyAdvancedToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12068.sol b/data_full/CVE_clean/2018-12068.sol new file mode 100644 index 00000000..dd40e5b2 --- /dev/null +++ b/data_full/CVE_clean/2018-12068.sol @@ -0,0 +1,132 @@ +pragma solidity ^0.4.11; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MyAdvancedToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12070.sol b/data_full/CVE_clean/2018-12070.sol new file mode 100644 index 00000000..5619bba0 --- /dev/null +++ b/data_full/CVE_clean/2018-12070.sol @@ -0,0 +1,144 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol +) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract SECToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function SECToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol +) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + uint start = 1520956799; + uint256 SECtotalAmount = 1500000000 * 10 ** 18; + address teamaccount = 0xC32b1519A0d4E883FE136AbB3198cbC402b5503F; + uint256 amount = _value; + address sender = _from; + uint256 balance = balanceOf[_from]; + if(teamaccount == sender){ + if (now < start + 365 * 1 days) { + require((balance - amount) >= SECtotalAmount/10 * 3/4); + } else if (now < start + (2*365+1) * 1 days){ + require((balance - amount) >= SECtotalAmount/10 * 2/4); + }else if (now < start + (3*365+1) * 1 days){ + require((balance - amount) >= SECtotalAmount/10 * 1/4); + } + } + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} +contract SEC is SECToken(1500000000, "SEC", "SEC") {} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12078.sol b/data_full/CVE_clean/2018-12078.sol new file mode 100644 index 00000000..68f44f35 --- /dev/null +++ b/data_full/CVE_clean/2018-12078.sol @@ -0,0 +1,107 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + revert(); + } +} +contract PolyAi is owned, token { + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function PolyAi( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12079.sol b/data_full/CVE_clean/2018-12079.sol new file mode 100644 index 00000000..fb622b86 --- /dev/null +++ b/data_full/CVE_clean/2018-12079.sol @@ -0,0 +1,132 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MyAdvancedToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12080.sol b/data_full/CVE_clean/2018-12080.sol new file mode 100644 index 00000000..2f553156 --- /dev/null +++ b/data_full/CVE_clean/2018-12080.sol @@ -0,0 +1,123 @@ +pragma solidity ^0.4.13; contract owned { address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } +contract token { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require (_value < allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) returns (bool success) { + require (balanceOf[msg.sender] > _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract INTToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function INTToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} +contract INT is INTToken(1000000000000000, "Internet Node Token", 6, "INT") {} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12081.sol b/data_full/CVE_clean/2018-12081.sol new file mode 100644 index 00000000..dd40e5b2 --- /dev/null +++ b/data_full/CVE_clean/2018-12081.sol @@ -0,0 +1,132 @@ +pragma solidity ^0.4.11; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MyAdvancedToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12082.sol b/data_full/CVE_clean/2018-12082.sol new file mode 100644 index 00000000..bd2a5062 --- /dev/null +++ b/data_full/CVE_clean/2018-12082.sol @@ -0,0 +1,125 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + revert(); + } +} +contract FujintoToken is owned, token { + uint public buyRate = 4000; + bool public isSelling = true; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function FujintoToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + function buy() payable { + if(isSelling == false) revert(); + uint amount = msg.value * buyRate; + balanceOf[msg.sender] += amount; + balanceOf[owner] -= amount; + Transfer(owner, msg.sender, amount); + } + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12083.sol b/data_full/CVE_clean/2018-12083.sol new file mode 100644 index 00000000..698ab938 --- /dev/null +++ b/data_full/CVE_clean/2018-12083.sol @@ -0,0 +1,76 @@ +pragma solidity ^0.4.18; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + function changeOwner(address newOwner) onlyOwner { + owner = newOwner; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract GoalToken is owned { + string public name = "GOAL Bonanza"; + string public symbol = "GOAL"; + uint8 public decimals = 18; + uint256 public totalSupply = 0; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require (_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) returns (bool success) { + require (balanceOf[msg.sender] > _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(this, target, mintedAmount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12084.sol b/data_full/CVE_clean/2018-12084.sol new file mode 100644 index 00000000..3c77b2b7 --- /dev/null +++ b/data_full/CVE_clean/2018-12084.sol @@ -0,0 +1,108 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } +} +contract tokenRecipient { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + revert(); + } +} +contract BitAseanToken is owned, token { + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function BitAseanToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12230.sol b/data_full/CVE_clean/2018-12230.sol new file mode 100644 index 00000000..6da85d0c --- /dev/null +++ b/data_full/CVE_clean/2018-12230.sol @@ -0,0 +1,90 @@ +pragma solidity ^0.4.2; +contract ERC20Interface { + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract Owner { + address public owner; + function Owner() { + owner = msg.sender; + } + modifier onlyOwner() { + if(msg.sender != owner) throw; + _; + } + function transferOwnership(address new_owner) onlyOwner { + owner = new_owner; + } +} +contract RemiCoin is ERC20Interface,Owner { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping(address => uint256) balances; + mapping (address => bool) public frozenAccount; + mapping(address => mapping (address => uint256)) allowed; + event FrozenFunds(address target, bool frozen); + function RemiCoin(uint256 initial_supply, string _name, string _symbol, uint8 _decimal) { + balances[msg.sender] = initial_supply; + name = _name; + symbol = _symbol; + decimals = _decimal; + totalSupply = initial_supply; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function transfer(address to, uint value) returns (bool success) { + if (frozenAccount[msg.sender]) return false; + if(balances[msg.sender] < value) return false; + if(balances[to] + value < balances[to]) return false; + balances[msg.sender] -= value; + balances[to] += value; + Transfer(msg.sender, to, value); + return true; + } + function transferFrom(address from, address to, uint value) returns (bool success) { + if (frozenAccount[msg.sender]) return false; + if(balances[from] < value) return false; + if( allowed[from][msg.sender] >= value ) return false; + if(balances[to] + value < balances[to]) return false; + balances[from] -= value; + allowed[from][msg.sender] -= value; + balances[to] += value; + Transfer(from, to, value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner{ + balances[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0,owner,mintedAmount); + Transfer(owner,target,mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function changeName(string _name) onlyOwner { + name = _name; + } + function changeSymbol(string _symbol) onlyOwner { + symbol = _symbol; + } + function changeDecimals(uint8 _decimals) onlyOwner { + decimals = _decimals; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12454.sol b/data_full/CVE_clean/2018-12454.sol new file mode 100644 index 00000000..3ea95c8b --- /dev/null +++ b/data_full/CVE_clean/2018-12454.sol @@ -0,0 +1,123 @@ +pragma solidity ^0.4.11; +contract simplelottery { + enum State { Started, Locked } + State public state = State.Started; + struct Guess{ + address addr; + } + uint arraysize=1000; + uint constant maxguess=1000000; + uint bettingprice = 1 ether; + Guess[1000] guesses; + uint numguesses = 0; + bytes32 curhash = ''; + uint _gameindex = 1; + uint _starttime = 0; + modifier inState(State _state) { + require(state == _state); + _; + } + address developer = 0x0; + address _winner = 0x0; + event SentPrizeToWinner(address winner, uint money, uint gameindex, uint lotterynumber, uint starttime, uint finishtime); + event SentDeveloperFee(uint amount, uint balance); + function simplelottery() + { + if(developer==address(0)){ + developer = msg.sender; + state = State.Started; + _starttime = block.timestamp; + } + } + function setBettingCondition(uint _contenders, uint _bettingprice) + { + if(msg.sender != developer) + return; + arraysize = _contenders; + if(arraysize>1000) + arraysize = 1000; + bettingprice = _bettingprice; + } + function findWinner(uint value) + { + uint i = value % numguesses; + _winner = guesses[i].addr; + } + function getMaxContenders() constant returns(uint){ + return arraysize; + } + function getBettingPrice() constant returns(uint){ + return bettingprice; + } + function getDeveloperAddress() constant returns(address) + { + return developer; + } + function getDeveloperFee() constant returns(uint) + { + uint developerfee = this.balance/100; + return developerfee; + } + function getBalance() constant returns(uint) + { + return this.balance; + } + function getLotteryMoney() constant returns(uint) + { + uint developerfee = getDeveloperFee(); + uint prize = (this.balance - developerfee); + return prize; + } + function getBettingStatus() + constant + returns (uint, uint, uint, uint, uint, uint, uint) + { + return ((uint)(state), _gameindex, _starttime, numguesses, getLotteryMoney(), this.balance, bettingprice); + } + function finish() + { + if(msg.sender != developer) + return; + _finish(); + } + function _finish() private + { + state = State.Locked; + uint block_timestamp = block.timestamp; + uint lotterynumber = (uint(curhash)+block_timestamp)%(maxguess+1); + findWinner(lotterynumber); + uint prize = getLotteryMoney(); + uint numwinners = 1; + uint remain = this.balance - (prize*numwinners); + _winner.transfer(prize); + SentPrizeToWinner(_winner, prize, _gameindex, lotterynumber, _starttime, block_timestamp); + developer.transfer(remain); + SentDeveloperFee(remain, this.balance); + numguesses = 0; + _gameindex++; + state = State.Started; + _starttime = block.timestamp; + } + function () payable + { + _addguess(); + } + function addguess() + inState(State.Started) + payable + { + _addguess(); + } + function _addguess() private + inState(State.Started) + { + require(msg.value >= bettingprice); + curhash = sha256(block.timestamp, block.coinbase, block.difficulty, curhash); + if((uint)(numguesses+1)<=arraysize) { + guesses[numguesses++].addr = msg.sender; + if((uint)(numguesses)>=arraysize){ + _finish(); + } + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12511.sol b/data_full/CVE_clean/2018-12511.sol new file mode 100644 index 00000000..2fae5b7b --- /dev/null +++ b/data_full/CVE_clean/2018-12511.sol @@ -0,0 +1,132 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MyAdvancedToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12702.sol b/data_full/CVE_clean/2018-12702.sol new file mode 100644 index 00000000..e429fb38 --- /dev/null +++ b/data_full/CVE_clean/2018-12702.sol @@ -0,0 +1,73 @@ +pragma solidity ^0.4.16; +contract Token { + uint256 public totalSupply; + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + require(balances[_to] + _value > balances[_to]); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + require(balances[_to] + _value > balances[_to]); + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} +contract GVE is StandardToken { + function () { + revert(); + } + string public name = "Globalvillage ecosystem"; + uint8 public decimals = 18; + string public symbol = "GVE"; + string public version = 'v0.1'; + address public founder; + function GVE() { + founder = msg.sender; + totalSupply = 1000000000 * 10 ** uint256(decimals); + balances[founder] = totalSupply; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } + return true; + } + function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(_extraData)) { revert(); } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12703.sol b/data_full/CVE_clean/2018-12703.sol new file mode 100644 index 00000000..aa00c3b7 --- /dev/null +++ b/data_full/CVE_clean/2018-12703.sol @@ -0,0 +1,73 @@ +pragma solidity ^0.4.16; +contract Token { + uint256 public totalSupply; + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + require(balances[_to] + _value > balances[_to]); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + require(balances[_to] + _value > balances[_to]); + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} +contract EightteenToken is StandardToken { + function () { + revert(); + } + string public name = "Block 18"; + uint8 public decimals = 18; + string public symbol = "18T"; + string public version = 'v0.1'; + address public founder; + function EightteenToken() { + founder = msg.sender; + totalSupply = 1000000000 * 10 ** uint256(decimals); + balances[founder] = totalSupply; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { revert(); } + return true; + } + function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(_extraData)) { revert(); } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12885.sol b/data_full/CVE_clean/2018-12885.sol new file mode 100644 index 00000000..6ead2320 --- /dev/null +++ b/data_full/CVE_clean/2018-12885.sol @@ -0,0 +1,617 @@ +pragma solidity 0.4.23; +library SafeMath { + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract Ownable { + address internal contractOwner; + constructor () internal { + if(contractOwner == address(0)){ + contractOwner = msg.sender; + } + } + modifier onlyOwner() { + require(msg.sender == contractOwner); + _; + } + function transferOwnership(address newOwner) public onlyOwner { + require(newOwner != address(0)); + contractOwner = newOwner; + } +} +contract Pausable is Ownable { + bool private paused = false; + modifier whenNotPaused() { + if(paused == true && msg.value > 0){ + msg.sender.transfer(msg.value); + } + require(!paused); + _; + } + function triggerPause() onlyOwner external { + paused = !paused; + } +} +contract ChampFactory is Pausable{ + event NewChamp(uint256 champID, address owner); + using SafeMath for uint; + struct Champ { + uint256 id; + uint256 attackPower; + uint256 defencePower; + uint256 cooldownTime; + uint256 readyTime; + uint256 winCount; + uint256 lossCount; + uint256 position; + uint256 price; + uint256 withdrawCooldown; + uint256 eq_sword; + uint256 eq_shield; + uint256 eq_helmet; + bool forSale; + } + struct AddressInfo { + uint256 withdrawal; + uint256 champsCount; + uint256 itemsCount; + string name; + } + struct Item { + uint8 itemType; + uint8 itemRarity; + uint256 attackPower; + uint256 defencePower; + uint256 cooldownReduction; + uint256 price; + uint256 onChampId; + bool onChamp; + bool forSale; + } + mapping (address => AddressInfo) public addressInfo; + mapping (uint256 => address) public champToOwner; + mapping (uint256 => address) public itemToOwner; + mapping (uint256 => string) public champToName; + Champ[] public champs; + Item[] public items; + uint256[] public leaderboard; + uint256 internal createChampFee = 5 finney; + uint256 internal lootboxFee = 5 finney; + uint256 internal pendingWithdrawal = 0; + uint256 private randNonce = 0; + uint256 public champsForSaleCount; + uint256 public itemsForSaleCount; + modifier onlyOwnerOfChamp(uint256 _champId) { + require(msg.sender == champToOwner[_champId]); + _; + } + modifier onlyNotOwnerOfChamp(uint256 _champId) { + require(msg.sender != champToOwner[_champId]); + _; + } + modifier isPaid(uint256 _price){ + require(msg.value >= _price); + _; + } + modifier contractMinBalanceReached(){ + require( (address(this).balance).sub(pendingWithdrawal) > 1000000 ); + _; + } + modifier isChampWithdrawReady(uint256 _id){ + require(champs[_id].withdrawCooldown < block.timestamp); + _; + } + modifier distributeInput(address _affiliateAddress){ + uint256 contractOwnerWithdrawal = (msg.value / 100) * 50; + addressInfo[contractOwner].withdrawal += contractOwnerWithdrawal; + pendingWithdrawal += contractOwnerWithdrawal; + if(_affiliateAddress != address(0) && _affiliateAddress != msg.sender){ + uint256 affiliateBonus = (msg.value / 100) * 25; + addressInfo[_affiliateAddress].withdrawal += affiliateBonus; + pendingWithdrawal += affiliateBonus; + } + _; + } + function getChampsByOwner(address _owner) external view returns(uint256[]) { + uint256[] memory result = new uint256[](addressInfo[_owner].champsCount); + uint256 counter = 0; + for (uint256 i = 0; i < champs.length; i++) { + if (champToOwner[i] == _owner) { + result[counter] = i; + counter++; + } + } + return result; + } + function getChampsCount() external view returns(uint256){ + return champs.length; + } + function getChampReward(uint256 _position) public view returns(uint256) { + if(_position <= 800){ + uint256 rewardPercentage = uint256(2000).sub(2 * (_position - 1)); + uint256 availableWithdrawal = address(this).balance.sub(pendingWithdrawal); + return availableWithdrawal / 1000000 * rewardPercentage; + }else{ + return uint256(0); + } + } + function randMod(uint256 _modulus) internal returns(uint256) { + randNonce++; + return uint256(keccak256(randNonce, blockhash(block.number - 1))) % _modulus; + } + function createChamp(address _affiliateAddress) external payable + whenNotPaused + isPaid(createChampFee) + distributeInput(_affiliateAddress) + { + uint256 id = champs.push(Champ(0, 2 + randMod(4), 1 + randMod(4), uint256(1 days) - uint256(randMod(9) * 1 hours), 0, 0, 0, leaderboard.length + 1, 0, uint256(block.timestamp), 0,0,0, false)) - 1; + champs[id].id = id; + leaderboard.push(id); + champToOwner[id] = msg.sender; + addressInfo[msg.sender].champsCount++; + emit NewChamp(id, msg.sender); + } + function setCreateChampFee(uint256 _fee) external onlyOwner { + createChampFee = _fee; + } + function changeChampsName(uint _champId, string _name) external + onlyOwnerOfChamp(_champId){ + champToName[_champId] = _name; + } + function changePlayersName(string _name) external { + addressInfo[msg.sender].name = _name; + } + function withdrawChamp(uint _id) external + onlyOwnerOfChamp(_id) + contractMinBalanceReached + isChampWithdrawReady(_id) + whenNotPaused { + Champ storage champ = champs[_id]; + require(champ.position <= 800); + champ.withdrawCooldown = block.timestamp + 1 days; + uint256 withdrawal = getChampReward(champ.position); + addressInfo[msg.sender].withdrawal += withdrawal; + pendingWithdrawal += withdrawal; + } + function withdrawToAddress(address _address) external + whenNotPaused { + address playerAddress = _address; + if(playerAddress == address(0)){ playerAddress = msg.sender; } + uint256 share = addressInfo[playerAddress].withdrawal; + require(share > 0); + addressInfo[playerAddress].withdrawal = 0; + pendingWithdrawal = pendingWithdrawal.sub(share); + playerAddress.transfer(share); + } +} +contract Items is ChampFactory { + event NewItem(uint256 itemID, address owner); + constructor () internal { + items.push(Item(0, 0, 0, 0, 0, 0, 0, false, false)); + } + modifier onlyOwnerOfItem(uint256 _itemId) { + require(_itemId != 0); + require(msg.sender == itemToOwner[_itemId]); + _; + } + modifier onlyNotOwnerOfItem(uint256 _itemId) { + require(msg.sender != itemToOwner[_itemId]); + _; + } + function hasChampSomethingOn(uint _champId, uint8 _type) internal view returns(bool){ + Champ storage champ = champs[_champId]; + if(_type == 1){ + return (champ.eq_sword == 0) ? false : true; + } + if(_type == 2){ + return (champ.eq_shield == 0) ? false : true; + } + if(_type == 3){ + return (champ.eq_helmet == 0) ? false : true; + } + } + function getItemsByOwner(address _owner) external view returns(uint256[]) { + uint256[] memory result = new uint256[](addressInfo[_owner].itemsCount); + uint256 counter = 0; + for (uint256 i = 0; i < items.length; i++) { + if (itemToOwner[i] == _owner) { + result[counter] = i; + counter++; + } + } + return result; + } + function takeOffItem(uint _champId, uint8 _type) public + onlyOwnerOfChamp(_champId) { + uint256 itemId; + Champ storage champ = champs[_champId]; + if(_type == 1){ + itemId = champ.eq_sword; + if (itemId > 0) { + champ.eq_sword = 0; + } + } + if(_type == 2){ + itemId = champ.eq_shield; + if(itemId > 0) { + champ.eq_shield = 0; + } + } + if(_type == 3){ + itemId = champ.eq_helmet; + if(itemId > 0) { + champ.eq_helmet = 0; + } + } + if(itemId > 0){ + items[itemId].onChamp = false; + } + } + function putOn(uint256 _champId, uint256 _itemId) external + onlyOwnerOfChamp(_champId) + onlyOwnerOfItem(_itemId) { + Champ storage champ = champs[_champId]; + Item storage item = items[_itemId]; + if(item.onChamp){ + takeOffItem(item.onChampId, item.itemType); + } + item.onChamp = true; + item.onChampId = _champId; + if(item.itemType == 1){ + if(champ.eq_sword > 0){ + takeOffItem(champ.id, 1); + } + champ.eq_sword = _itemId; + } + if(item.itemType == 2){ + if(champ.eq_shield > 0){ + takeOffItem(champ.id, 2); + } + champ.eq_shield = _itemId; + } + if(item.itemType == 3){ + if(champ.eq_helmet > 0){ + takeOffItem(champ.id, 3); + } + champ.eq_helmet = _itemId; + } + } + function openLootbox(address _affiliateAddress) external payable + whenNotPaused + isPaid(lootboxFee) + distributeInput(_affiliateAddress) { + uint256 pointToCooldownReduction; + uint256 randNum = randMod(1001); + uint256 pointsToShare; + uint256 itemID; + Item memory item = Item({ + itemType: uint8(uint256(randMod(3) + 1)), + itemRarity: uint8(0), + attackPower: 0, + defencePower: 0, + cooldownReduction: 0, + price: 0, + onChampId: 0, + onChamp: false, + forSale: false + }); + if(450 > randNum){ + pointsToShare = 25 + randMod(9); + item.itemRarity = uint8(1); + }else if(720 > randNum){ + pointsToShare = 42 + randMod(17); + item.itemRarity = uint8(2); + }else if(910 > randNum){ + pointsToShare = 71 + randMod(25); + item.itemRarity = uint8(3); + }else if(980 > randNum){ + pointsToShare = 119 + randMod(33); + item.itemRarity = uint8(4); + }else{ + pointsToShare = 235 + randMod(41); + item.itemRarity = uint8(5); + } + if(item.itemType == uint8(1)){ + item.attackPower = pointsToShare / 10 * 7; + pointsToShare -= item.attackPower; + item.defencePower = pointsToShare / 10 * randMod(6); + pointsToShare -= item.defencePower; + item.cooldownReduction = pointsToShare * uint256(1 minutes); + item.itemType = uint8(1); + } + if(item.itemType == uint8(2)){ + item.defencePower = pointsToShare / 10 * 7; + pointsToShare -= item.defencePower; + item.attackPower = pointsToShare / 10 * randMod(6); + pointsToShare -= item.attackPower; + item.cooldownReduction = pointsToShare * uint256(1 minutes); + item.itemType = uint8(2); + } + if(item.itemType == uint8(3)){ + pointToCooldownReduction = pointsToShare / 10 * 7; + item.cooldownReduction = pointToCooldownReduction * uint256(1 minutes); + pointsToShare -= pointToCooldownReduction; + item.attackPower = pointsToShare / 10 * randMod(6); + pointsToShare -= item.attackPower; + item.defencePower = pointsToShare; + item.itemType = uint8(3); + } + itemID = items.push(item) - 1; + itemToOwner[itemID] = msg.sender; + addressInfo[msg.sender].itemsCount++; + emit NewItem(itemID, msg.sender); + } + function setLootboxFee(uint _fee) external onlyOwner { + lootboxFee = _fee; + } +} +contract ItemMarket is Items { + event TransferItem(address from, address to, uint256 itemID); + modifier itemIsForSale(uint256 _id){ + require(items[_id].forSale); + _; + } + modifier itemIsNotForSale(uint256 _id){ + require(items[_id].forSale == false); + _; + } + modifier ifItemForSaleThenCancelSale(uint256 _itemID){ + Item storage item = items[_itemID]; + if(item.forSale){ + _cancelItemSale(item); + } + _; + } + modifier distributeSaleInput(address _owner) { + uint256 contractOwnerCommision; + uint256 playerShare; + if(msg.value > 100){ + contractOwnerCommision = (msg.value / 100); + playerShare = msg.value - contractOwnerCommision; + }else{ + contractOwnerCommision = 0; + playerShare = msg.value; + } + addressInfo[_owner].withdrawal += playerShare; + addressInfo[contractOwner].withdrawal += contractOwnerCommision; + pendingWithdrawal += playerShare + contractOwnerCommision; + _; + } + function getItemsForSale() view external returns(uint256[]){ + uint256[] memory result = new uint256[](itemsForSaleCount); + if(itemsForSaleCount > 0){ + uint256 counter = 0; + for (uint256 i = 0; i < items.length; i++) { + if (items[i].forSale == true) { + result[counter]=i; + counter++; + } + } + } + return result; + } + function _cancelItemSale(Item storage item) private { + item.forSale = false; + itemsForSaleCount--; + } + function transferItem(address _from, address _to, uint256 _itemID) internal + ifItemForSaleThenCancelSale(_itemID) { + Item storage item = items[_itemID]; + if(item.onChamp && _to != champToOwner[item.onChampId]){ + takeOffItem(item.onChampId, item.itemType); + } + addressInfo[_to].itemsCount++; + addressInfo[_from].itemsCount--; + itemToOwner[_itemID] = _to; + emit TransferItem(_from, _to, _itemID); + } + function giveItem(address _to, uint256 _itemID) public + onlyOwnerOfItem(_itemID) { + transferItem(msg.sender, _to, _itemID); + } + function cancelItemSale(uint256 _id) public + itemIsForSale(_id) + onlyOwnerOfItem(_id){ + Item storage item = items[_id]; + _cancelItemSale(item); + } + function setItemForSale(uint256 _id, uint256 _price) external + onlyOwnerOfItem(_id) + itemIsNotForSale(_id) { + Item storage item = items[_id]; + item.forSale = true; + item.price = _price; + itemsForSaleCount++; + } + function buyItem(uint256 _id) external payable + whenNotPaused + onlyNotOwnerOfItem(_id) + itemIsForSale(_id) + isPaid(items[_id].price) + distributeSaleInput(itemToOwner[_id]) + { + transferItem(itemToOwner[_id], msg.sender, _id); + } +} +contract ItemForge is ItemMarket { + event Forge(uint256 forgedItemID); + function forgeItems(uint256 _parentItemID, uint256 _childItemID) external + onlyOwnerOfItem(_parentItemID) + onlyOwnerOfItem(_childItemID) + ifItemForSaleThenCancelSale(_parentItemID) + ifItemForSaleThenCancelSale(_childItemID) { + require(_parentItemID != _childItemID); + Item storage parentItem = items[_parentItemID]; + Item storage childItem = items[_childItemID]; + if(childItem.onChamp){ + takeOffItem(childItem.onChampId, childItem.itemType); + } + parentItem.attackPower = (parentItem.attackPower > childItem.attackPower) ? parentItem.attackPower : childItem.attackPower; + parentItem.defencePower = (parentItem.defencePower > childItem.defencePower) ? parentItem.defencePower : childItem.defencePower; + parentItem.cooldownReduction = (parentItem.cooldownReduction > childItem.cooldownReduction) ? parentItem.cooldownReduction : childItem.cooldownReduction; + parentItem.itemRarity = uint8(6); + transferItem(msg.sender, address(0), _childItemID); + emit Forge(_parentItemID); + } +} +contract ChampAttack is ItemForge { + event Attack(uint256 winnerChampID, uint256 defeatedChampID, bool didAttackerWin); + modifier isChampReady(uint256 _champId) { + require (champs[_champId].readyTime <= block.timestamp); + _; + } + modifier notSelfAttack(uint256 _champId, uint256 _targetId) { + require(_champId != _targetId); + _; + } + modifier targetExists(uint256 _targetId){ + require(champToOwner[_targetId] != address(0)); + _; + } + function getChampStats(uint256 _champId) public view returns(uint256,uint256,uint256){ + Champ storage champ = champs[_champId]; + Item storage sword = items[champ.eq_sword]; + Item storage shield = items[champ.eq_shield]; + Item storage helmet = items[champ.eq_helmet]; + uint256 totalAttackPower = champ.attackPower + sword.attackPower + shield.attackPower + helmet.attackPower; + uint256 totalDefencePower = champ.defencePower + sword.defencePower + shield.defencePower + helmet.defencePower; + uint256 totalCooldownReduction = sword.cooldownReduction + shield.cooldownReduction + helmet.cooldownReduction; + return (totalAttackPower, totalDefencePower, totalCooldownReduction); + } + function subAttack(uint256 _playerAttackPoints, uint256 _x) internal pure returns (uint256) { + return (_playerAttackPoints <= _x + 2) ? 2 : _playerAttackPoints - _x; + } + function subDefence(uint256 _playerDefencePoints, uint256 _x) internal pure returns (uint256) { + return (_playerDefencePoints <= _x) ? 1 : _playerDefencePoints - _x; + } + function _attackCompleted(Champ storage _winnerChamp, Champ storage _defeatedChamp, uint256 _pointsGiven, uint256 _pointsToAttackPower) private { + _winnerChamp.attackPower += _pointsToAttackPower; + _winnerChamp.defencePower += _pointsGiven - _pointsToAttackPower; + _defeatedChamp.attackPower = subAttack(_defeatedChamp.attackPower, _pointsToAttackPower); + _defeatedChamp.defencePower = subDefence(_defeatedChamp.defencePower, _pointsGiven - _pointsToAttackPower); + _winnerChamp.winCount++; + _defeatedChamp.lossCount++; + if(_winnerChamp.position > _defeatedChamp.position) { + uint256 winnerPosition = _winnerChamp.position; + uint256 loserPosition = _defeatedChamp.position; + _defeatedChamp.position = winnerPosition; + _winnerChamp.position = loserPosition; + leaderboard[winnerPosition - 1] = _defeatedChamp.id; + leaderboard[loserPosition - 1] = _winnerChamp.id; + } + } + function _getPoints(uint256 _pointsGiven) private returns (uint256 pointsGiven, uint256 pointsToAttackPower){ + return (_pointsGiven, randMod(_pointsGiven+1)); + } + function attack(uint256 _champId, uint256 _targetId) external + onlyOwnerOfChamp(_champId) + isChampReady(_champId) + notSelfAttack(_champId, _targetId) + targetExists(_targetId) { + Champ storage myChamp = champs[_champId]; + Champ storage enemyChamp = champs[_targetId]; + uint256 pointsGiven; + uint256 pointsToAttackPower; + uint256 myChampAttackPower; + uint256 enemyChampDefencePower; + uint256 myChampCooldownReduction; + (myChampAttackPower,,myChampCooldownReduction) = getChampStats(_champId); + (,enemyChampDefencePower,) = getChampStats(_targetId); + if (myChampAttackPower > enemyChampDefencePower) { + if(myChampAttackPower - enemyChampDefencePower < 5){ + (pointsGiven, pointsToAttackPower) = _getPoints(3); + }else if(myChampAttackPower - enemyChampDefencePower < 10){ + (pointsGiven, pointsToAttackPower) = _getPoints(2); + }else{ + (pointsGiven, pointsToAttackPower) = _getPoints(1); + } + _attackCompleted(myChamp, enemyChamp, pointsGiven, pointsToAttackPower); + emit Attack(myChamp.id, enemyChamp.id, true); + } else { + (pointsGiven, pointsToAttackPower) = _getPoints(1); + _attackCompleted(enemyChamp, myChamp, pointsGiven, pointsToAttackPower); + emit Attack(enemyChamp.id, myChamp.id, false); + } + myChamp.readyTime = uint256(block.timestamp + myChamp.cooldownTime - myChampCooldownReduction); + } +} +contract ChampMarket is ChampAttack { + event TransferChamp(address from, address to, uint256 champID); + modifier champIsForSale(uint256 _id){ + require(champs[_id].forSale); + _; + } + modifier champIsNotForSale(uint256 _id){ + require(champs[_id].forSale == false); + _; + } + modifier ifChampForSaleThenCancelSale(uint256 _champID){ + Champ storage champ = champs[_champID]; + if(champ.forSale){ + _cancelChampSale(champ); + } + _; + } + function getChampsForSale() view external returns(uint256[]){ + uint256[] memory result = new uint256[](champsForSaleCount); + if(champsForSaleCount > 0){ + uint256 counter = 0; + for (uint256 i = 0; i < champs.length; i++) { + if (champs[i].forSale == true) { + result[counter]=i; + counter++; + } + } + } + return result; + } + function _cancelChampSale(Champ storage champ) private { + champ.forSale = false; + champsForSaleCount--; + } + function transferChamp(address _from, address _to, uint256 _champId) internal ifChampForSaleThenCancelSale(_champId){ + Champ storage champ = champs[_champId]; + addressInfo[_to].champsCount++; + addressInfo[_from].champsCount--; + champToOwner[_champId] = _to; + if(champ.eq_sword != 0) { transferItem(_from, _to, champ.eq_sword); } + if(champ.eq_shield != 0) { transferItem(_from, _to, champ.eq_shield); } + if(champ.eq_helmet != 0) { transferItem(_from, _to, champ.eq_helmet); } + emit TransferChamp(_from, _to, _champId); + } + function cancelChampSale(uint256 _id) public + champIsForSale(_id) + onlyOwnerOfChamp(_id) { + Champ storage champ = champs[_id]; + _cancelChampSale(champ); + } + function giveChamp(address _to, uint256 _champId) external + onlyOwnerOfChamp(_champId) { + transferChamp(msg.sender, _to, _champId); + } + function setChampForSale(uint256 _id, uint256 _price) external + onlyOwnerOfChamp(_id) + champIsNotForSale(_id) { + Champ storage champ = champs[_id]; + champ.forSale = true; + champ.price = _price; + champsForSaleCount++; + } + function buyChamp(uint256 _id) external payable + whenNotPaused + onlyNotOwnerOfChamp(_id) + champIsForSale(_id) + isPaid(champs[_id].price) + distributeSaleInput(champToOwner[_id]) { + transferChamp(champToOwner[_id], msg.sender, _id); + } +} +contract MyCryptoChampCore is ChampMarket { +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12959.sol b/data_full/CVE_clean/2018-12959.sol new file mode 100644 index 00000000..18c221f9 --- /dev/null +++ b/data_full/CVE_clean/2018-12959.sol @@ -0,0 +1,67 @@ +pragma solidity ^0.4.4; +contract Token { + function totalSupply() constant returns (uint256 supply) {} + function balanceOf(address _owner) constant returns (uint256 balance) {} + function transfer(address _to, uint256 _value) returns (bool success) {} + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + function approve(address _spender, uint256 _value) returns (bool success) {} + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} +contract AditusToken is StandardToken { + function () { + throw; + } + string public name; + uint8 public decimals; + string public symbol; + string public version = 'A1.0'; + function AditusToken( + ) { + balances[msg.sender] = 1000000000000000000000000000; + totalSupply = 1000000000000000000000000000; + name = "Aditus"; + decimals = 18; + symbol = "ADI"; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-12975.sol b/data_full/CVE_clean/2018-12975.sol new file mode 100644 index 00000000..7073e4c9 --- /dev/null +++ b/data_full/CVE_clean/2018-12975.sol @@ -0,0 +1,645 @@ +pragma solidity ^0.4.18; +contract Ownable { + address public owner; + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + function Ownable() public { + owner = msg.sender; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) public onlyOwner { + require(newOwner != address(0)); + OwnershipTransferred(owner, newOwner); + owner = newOwner; + } +} +contract Claimable is Ownable { + address public pendingOwner; + modifier onlyPendingOwner() { + require(msg.sender == pendingOwner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + pendingOwner = newOwner; + } + function claimOwnership() onlyPendingOwner public { + OwnershipTransferred(owner, pendingOwner); + owner = pendingOwner; + pendingOwner = address(0); + } +} +contract Pausable is Ownable { + event Pause(); + event Unpause(); + bool public paused = false; + modifier whenNotPaused() { + require(!paused); + _; + } + modifier whenPaused() { + require(paused); + _; + } + function pause() onlyOwner whenNotPaused public { + paused = true; + Pause(); + } + function unpause() onlyOwner whenPaused public { + paused = false; + Unpause(); + } +} +contract AccessDeploy is Claimable { + mapping(address => bool) private deployAccess; + modifier onlyAccessDeploy { + require(msg.sender == owner || deployAccess[msg.sender] == true); + _; + } + function grantAccessDeploy(address _address) + onlyOwner + public + { + deployAccess[_address] = true; + } + function revokeAccessDeploy(address _address) + onlyOwner + public + { + deployAccess[_address] = false; + } +} +contract AccessDeposit is Claimable { + mapping(address => bool) private depositAccess; + modifier onlyAccessDeposit { + require(msg.sender == owner || depositAccess[msg.sender] == true); + _; + } + function grantAccessDeposit(address _address) + onlyOwner + public + { + depositAccess[_address] = true; + } + function revokeAccessDeposit(address _address) + onlyOwner + public + { + depositAccess[_address] = false; + } +} +contract AccessMint is Claimable { + mapping(address => bool) private mintAccess; + modifier onlyAccessMint { + require(msg.sender == owner || mintAccess[msg.sender] == true); + _; + } + function grantAccessMint(address _address) + onlyOwner + public + { + mintAccess[_address] = true; + } + function revokeAccessMint(address _address) + onlyOwner + public + { + mintAccess[_address] = false; + } +} +contract ERC721 { + event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); + event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); + function balanceOf(address _owner) public view returns (uint256 _balance); + function ownerOf(uint256 _tokenId) public view returns (address _owner); + function transfer(address _to, uint256 _tokenId) public; + function approve(address _to, uint256 _tokenId) public; + function takeOwnership(uint256 _tokenId) public; +} +contract ERC721Token is ERC721 { + using SafeMath for uint256; + uint256 private totalTokens; + mapping (uint256 => address) private tokenOwner; + mapping (uint256 => address) private tokenApprovals; + mapping (address => uint256[]) private ownedTokens; + mapping(uint256 => uint256) private ownedTokensIndex; + modifier onlyOwnerOf(uint256 _tokenId) { + require(ownerOf(_tokenId) == msg.sender); + _; + } + function totalSupply() public view returns (uint256) { + return totalTokens; + } + function balanceOf(address _owner) public view returns (uint256) { + return ownedTokens[_owner].length; + } + function tokensOf(address _owner) public view returns (uint256[]) { + return ownedTokens[_owner]; + } + function ownerOf(uint256 _tokenId) public view returns (address) { + address owner = tokenOwner[_tokenId]; + require(owner != address(0)); + return owner; + } + function approvedFor(uint256 _tokenId) public view returns (address) { + return tokenApprovals[_tokenId]; + } + function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { + clearApprovalAndTransfer(msg.sender, _to, _tokenId); + } + function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { + address owner = ownerOf(_tokenId); + require(_to != owner); + if (approvedFor(_tokenId) != 0 || _to != 0) { + tokenApprovals[_tokenId] = _to; + Approval(owner, _to, _tokenId); + } + } + function takeOwnership(uint256 _tokenId) public { + require(isApprovedFor(msg.sender, _tokenId)); + clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId); + } + function _mint(address _to, uint256 _tokenId) internal { + require(_to != address(0)); + addToken(_to, _tokenId); + Transfer(0x0, _to, _tokenId); + } + function _burn(uint256 _tokenId) onlyOwnerOf(_tokenId) internal { + if (approvedFor(_tokenId) != 0) { + clearApproval(msg.sender, _tokenId); + } + removeToken(msg.sender, _tokenId); + Transfer(msg.sender, 0x0, _tokenId); + } + function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) { + return approvedFor(_tokenId) == _owner; + } + function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal { + require(_to != address(0)); + require(_to != ownerOf(_tokenId)); + require(ownerOf(_tokenId) == _from); + clearApproval(_from, _tokenId); + removeToken(_from, _tokenId); + addToken(_to, _tokenId); + Transfer(_from, _to, _tokenId); + } + function clearApproval(address _owner, uint256 _tokenId) private { + require(ownerOf(_tokenId) == _owner); + tokenApprovals[_tokenId] = 0; + Approval(_owner, 0, _tokenId); + } + function addToken(address _to, uint256 _tokenId) private { + require(tokenOwner[_tokenId] == address(0)); + tokenOwner[_tokenId] = _to; + uint256 length = balanceOf(_to); + ownedTokens[_to].push(_tokenId); + ownedTokensIndex[_tokenId] = length; + totalTokens = totalTokens.add(1); + } + function removeToken(address _from, uint256 _tokenId) private { + require(ownerOf(_tokenId) == _from); + uint256 tokenIndex = ownedTokensIndex[_tokenId]; + uint256 lastTokenIndex = balanceOf(_from).sub(1); + uint256 lastToken = ownedTokens[_from][lastTokenIndex]; + tokenOwner[_tokenId] = 0; + ownedTokens[_from][tokenIndex] = lastToken; + ownedTokens[_from][lastTokenIndex] = 0; + ownedTokens[_from].length--; + ownedTokensIndex[_tokenId] = 0; + ownedTokensIndex[lastToken] = tokenIndex; + totalTokens = totalTokens.sub(1); + } +} +contract ERC20Basic { + function totalSupply() public view returns (uint256); + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + uint256 totalSupply_; + function totalSupply() public view returns (uint256) { + return totalSupply_; + } + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract Gold is StandardToken, Claimable, AccessMint { + string public constant name = "Gold"; + string public constant symbol = "G"; + uint8 public constant decimals = 18; + event Mint( + address indexed _to, + uint256 indexed _tokenId + ); + function mint(address _to, uint256 _amount) + onlyAccessMint + public + returns (bool) + { + totalSupply_ = totalSupply_.add(_amount); + balances[_to] = balances[_to].add(_amount); + Mint(_to, _amount); + Transfer(address(0), _to, _amount); + return true; + } +} +contract CryptoSagaHero is ERC721Token, Claimable, Pausable, AccessMint, AccessDeploy, AccessDeposit { + string public constant name = "CryptoSaga Hero"; + string public constant symbol = "HERO"; + struct HeroClass { + string className; + uint8 classRank; + uint8 classRace; + uint32 classAge; + uint8 classType; + uint32 maxLevel; + uint8 aura; + uint32[5] baseStats; + uint32[5] minIVForStats; + uint32[5] maxIVForStats; + uint32 currentNumberOfInstancedHeroes; + } + struct HeroInstance { + uint32 heroClassId; + string heroName; + uint32 currentLevel; + uint32 currentExp; + uint32 lastLocationId; + uint256 availableAt; + uint32[5] currentStats; + uint32[5] ivForStats; + } + uint32 public requiredExpIncreaseFactor = 100; + uint256 public requiredGoldIncreaseFactor = 1000000000000000000; + mapping(uint32 => HeroClass) public heroClasses; + uint32 public numberOfHeroClasses; + mapping(uint256 => HeroInstance) public tokenIdToHeroInstance; + uint256 public numberOfTokenIds; + Gold public goldContract; + mapping(address => uint256) public addressToGoldDeposit; + uint32 private seed = 0; + event DefineType( + address indexed _by, + uint32 indexed _typeId, + string _className + ); + event LevelUp( + address indexed _by, + uint256 indexed _tokenId, + uint32 _newLevel + ); + event Deploy( + address indexed _by, + uint256 indexed _tokenId, + uint32 _locationId, + uint256 _duration + ); + function getClassInfo(uint32 _classId) + external view + returns (string className, uint8 classRank, uint8 classRace, uint32 classAge, uint8 classType, uint32 maxLevel, uint8 aura, uint32[5] baseStats, uint32[5] minIVs, uint32[5] maxIVs) + { + var _cl = heroClasses[_classId]; + return (_cl.className, _cl.classRank, _cl.classRace, _cl.classAge, _cl.classType, _cl.maxLevel, _cl.aura, _cl.baseStats, _cl.minIVForStats, _cl.maxIVForStats); + } + function getClassName(uint32 _classId) + external view + returns (string) + { + return heroClasses[_classId].className; + } + function getClassRank(uint32 _classId) + external view + returns (uint8) + { + return heroClasses[_classId].classRank; + } + function getClassMintCount(uint32 _classId) + external view + returns (uint32) + { + return heroClasses[_classId].currentNumberOfInstancedHeroes; + } + function getHeroInfo(uint256 _tokenId) + external view + returns (uint32 classId, string heroName, uint32 currentLevel, uint32 currentExp, uint32 lastLocationId, uint256 availableAt, uint32[5] currentStats, uint32[5] ivs, uint32 bp) + { + HeroInstance memory _h = tokenIdToHeroInstance[_tokenId]; + var _bp = _h.currentStats[0] + _h.currentStats[1] + _h.currentStats[2] + _h.currentStats[3] + _h.currentStats[4]; + return (_h.heroClassId, _h.heroName, _h.currentLevel, _h.currentExp, _h.lastLocationId, _h.availableAt, _h.currentStats, _h.ivForStats, _bp); + } + function getHeroClassId(uint256 _tokenId) + external view + returns (uint32) + { + return tokenIdToHeroInstance[_tokenId].heroClassId; + } + function getHeroName(uint256 _tokenId) + external view + returns (string) + { + return tokenIdToHeroInstance[_tokenId].heroName; + } + function getHeroLevel(uint256 _tokenId) + external view + returns (uint32) + { + return tokenIdToHeroInstance[_tokenId].currentLevel; + } + function getHeroLocation(uint256 _tokenId) + external view + returns (uint32) + { + return tokenIdToHeroInstance[_tokenId].lastLocationId; + } + function getHeroAvailableAt(uint256 _tokenId) + external view + returns (uint256) + { + return tokenIdToHeroInstance[_tokenId].availableAt; + } + function getHeroBP(uint256 _tokenId) + public view + returns (uint32) + { + var _tmp = tokenIdToHeroInstance[_tokenId].currentStats; + return (_tmp[0] + _tmp[1] + _tmp[2] + _tmp[3] + _tmp[4]); + } + function getHeroRequiredGoldForLevelUp(uint256 _tokenId) + public view + returns (uint256) + { + return (uint256(2) ** (tokenIdToHeroInstance[_tokenId].currentLevel / 10)) * requiredGoldIncreaseFactor; + } + function getHeroRequiredExpForLevelUp(uint256 _tokenId) + public view + returns (uint32) + { + return ((tokenIdToHeroInstance[_tokenId].currentLevel + 2) * requiredExpIncreaseFactor); + } + function getGoldDepositOfAddress(address _address) + external view + returns (uint256) + { + return addressToGoldDeposit[_address]; + } + function getTokenIdOfAddressAndIndex(address _address, uint256 _index) + external view + returns (uint256) + { + return tokensOf(_address)[_index]; + } + function getTotalBPOfAddress(address _address) + external view + returns (uint32) + { + var _tokens = tokensOf(_address); + uint32 _totalBP = 0; + for (uint256 i = 0; i < _tokens.length; i ++) { + _totalBP += getHeroBP(_tokens[i]); + } + return _totalBP; + } + function setHeroName(uint256 _tokenId, string _name) + onlyOwnerOf(_tokenId) + public + { + tokenIdToHeroInstance[_tokenId].heroName = _name; + } + function setGoldContract(address _contractAddress) + onlyOwner + public + { + goldContract = Gold(_contractAddress); + } + function setRequiredExpIncreaseFactor(uint32 _value) + onlyOwner + public + { + requiredExpIncreaseFactor = _value; + } + function setRequiredGoldIncreaseFactor(uint256 _value) + onlyOwner + public + { + requiredGoldIncreaseFactor = _value; + } + function CryptoSagaHero(address _goldAddress) + public + { + require(_goldAddress != address(0)); + setGoldContract(_goldAddress); + defineType("Archangel", 4, 1, 13540, 0, 99, 3, [uint32(74), 75, 57, 99, 95], [uint32(8), 6, 8, 5, 5], [uint32(8), 10, 10, 6, 6]); + defineType("Shadowalker", 3, 4, 134, 1, 75, 4, [uint32(45), 35, 60, 80, 40], [uint32(3), 2, 10, 4, 5], [uint32(5), 5, 10, 7, 5]); + defineType("Pyromancer", 2, 0, 14, 2, 50, 1, [uint32(50), 28, 17, 40, 35], [uint32(5), 3, 2, 3, 3], [uint32(8), 4, 3, 4, 5]); + defineType("Magician", 1, 3, 224, 2, 30, 0, [uint32(35), 15, 25, 25, 30], [uint32(3), 1, 2, 2, 2], [uint32(5), 2, 3, 3, 3]); + defineType("Farmer", 0, 0, 59, 0, 15, 2, [uint32(10), 22, 8, 15, 25], [uint32(1), 2, 1, 1, 2], [uint32(1), 3, 1, 2, 3]); + } + function defineType(string _className, uint8 _classRank, uint8 _classRace, uint32 _classAge, uint8 _classType, uint32 _maxLevel, uint8 _aura, uint32[5] _baseStats, uint32[5] _minIVForStats, uint32[5] _maxIVForStats) + onlyOwner + public + { + require(_classRank < 5); + require(_classType < 3); + require(_aura < 5); + require(_minIVForStats[0] <= _maxIVForStats[0] && _minIVForStats[1] <= _maxIVForStats[1] && _minIVForStats[2] <= _maxIVForStats[2] && _minIVForStats[3] <= _maxIVForStats[3] && _minIVForStats[4] <= _maxIVForStats[4]); + HeroClass memory _heroType = HeroClass({ + className: _className, + classRank: _classRank, + classRace: _classRace, + classAge: _classAge, + classType: _classType, + maxLevel: _maxLevel, + aura: _aura, + baseStats: _baseStats, + minIVForStats: _minIVForStats, + maxIVForStats: _maxIVForStats, + currentNumberOfInstancedHeroes: 0 + }); + heroClasses[numberOfHeroClasses] = _heroType; + DefineType(msg.sender, numberOfHeroClasses, _heroType.className); + numberOfHeroClasses ++; + } + function mint(address _owner, uint32 _heroClassId) + onlyAccessMint + public + returns (uint256) + { + require(_owner != address(0)); + require(_heroClassId < numberOfHeroClasses); + var _heroClassInfo = heroClasses[_heroClassId]; + _mint(_owner, numberOfTokenIds); + uint32[5] memory _ivForStats; + uint32[5] memory _initialStats; + for (uint8 i = 0; i < 5; i++) { + _ivForStats[i] = (random(_heroClassInfo.maxIVForStats[i] + 1, _heroClassInfo.minIVForStats[i])); + _initialStats[i] = _heroClassInfo.baseStats[i] + _ivForStats[i]; + } + HeroInstance memory _heroInstance = HeroInstance({ + heroClassId: _heroClassId, + heroName: "", + currentLevel: 1, + currentExp: 0, + lastLocationId: 0, + availableAt: now, + currentStats: _initialStats, + ivForStats: _ivForStats + }); + tokenIdToHeroInstance[numberOfTokenIds] = _heroInstance; + numberOfTokenIds ++; + _heroClassInfo.currentNumberOfInstancedHeroes ++; + return numberOfTokenIds - 1; + } + function deploy(uint256 _tokenId, uint32 _locationId, uint256 _duration) + onlyAccessDeploy + public + returns (bool) + { + require(ownerOf(_tokenId) != address(0)); + var _heroInstance = tokenIdToHeroInstance[_tokenId]; + require(_heroInstance.availableAt <= now); + _heroInstance.lastLocationId = _locationId; + _heroInstance.availableAt = now + _duration; + Deploy(msg.sender, _tokenId, _locationId, _duration); + } + function addExp(uint256 _tokenId, uint32 _exp) + onlyAccessDeploy + public + returns (bool) + { + require(ownerOf(_tokenId) != address(0)); + var _heroInstance = tokenIdToHeroInstance[_tokenId]; + var _newExp = _heroInstance.currentExp + _exp; + require(_newExp == uint256(uint128(_newExp))); + _heroInstance.currentExp += _newExp; + } + function addDeposit(address _to, uint256 _amount) + onlyAccessDeposit + public + { + addressToGoldDeposit[_to] += _amount; + } + function levelUp(uint256 _tokenId) + onlyOwnerOf(_tokenId) whenNotPaused + public + { + var _heroInstance = tokenIdToHeroInstance[_tokenId]; + require(_heroInstance.availableAt <= now); + var _heroClassInfo = heroClasses[_heroInstance.heroClassId]; + require(_heroInstance.currentLevel < _heroClassInfo.maxLevel); + var requiredExp = getHeroRequiredExpForLevelUp(_tokenId); + require(_heroInstance.currentExp >= requiredExp); + var requiredGold = getHeroRequiredGoldForLevelUp(_tokenId); + var _ownerOfToken = ownerOf(_tokenId); + require(addressToGoldDeposit[_ownerOfToken] >= requiredGold); + _heroInstance.currentLevel += 1; + for (uint8 i = 0; i < 5; i++) { + _heroInstance.currentStats[i] = _heroClassInfo.baseStats[i] + (_heroInstance.currentLevel - 1) * _heroInstance.ivForStats[i]; + } + _heroInstance.currentExp -= requiredExp; + addressToGoldDeposit[_ownerOfToken] -= requiredGold; + LevelUp(msg.sender, _tokenId, _heroInstance.currentLevel); + } + function transferDeposit(uint256 _amount) + whenNotPaused + public + { + require(goldContract.allowance(msg.sender, this) >= _amount); + if (goldContract.transferFrom(msg.sender, this, _amount)) { + addressToGoldDeposit[msg.sender] += _amount; + } + } + function withdrawDeposit(uint256 _amount) + public + { + require(addressToGoldDeposit[msg.sender] >= _amount); + if (goldContract.transfer(msg.sender, _amount)) { + addressToGoldDeposit[msg.sender] -= _amount; + } + } + function random(uint32 _upper, uint32 _lower) + private + returns (uint32) + { + require(_upper > _lower); + seed = uint32(keccak256(keccak256(block.blockhash(block.number), seed), now)); + return seed % (_upper - _lower) + _lower; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13041.sol b/data_full/CVE_clean/2018-13041.sol new file mode 100644 index 00000000..3b677af1 --- /dev/null +++ b/data_full/CVE_clean/2018-13041.sol @@ -0,0 +1,115 @@ +pragma solidity ^0.4.8; +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function transfer(address to, uint value); + event Transfer(address indexed from, address indexed to, uint value); +} +library SafeMath { + function mul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + function sub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + function add(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c >= a); + return c; + } + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} +contract BasicToken is ERC20Basic { + using SafeMath for uint; + mapping(address => uint) balances; + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + } + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant returns (uint); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} +contract StandardToken is BasicToken, ERC20 { + mapping (address => mapping (address => uint)) allowed; + function transferFrom(address _from, address _to, uint _value) { + var _allowance = allowed[_from][msg.sender]; + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + } + function approve(address _spender, uint _value) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + } + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } +} +contract Ownable { + address public owner; + function Ownable() { + owner = msg.sender; + } + modifier onlyOwner() { + if (msg.sender != owner) { + throw; + } + _; + } + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } +} +contract LinkToken is StandardToken, Ownable { + string public name = "Link Platform"; + string public symbol = "LNK"; + uint public decimals = 18; + uint public totalSupply; + function mint(address _spender, uint _value) + onlyOwner { + balances[_spender] += _value; + totalSupply += _value; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13068.sol b/data_full/CVE_clean/2018-13068.sol new file mode 100644 index 00000000..db4be85c --- /dev/null +++ b/data_full/CVE_clean/2018-13068.sol @@ -0,0 +1,91 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract AzurionToken is owned { + mapping (address => uint256) public balanceOf; + mapping (address => bool) public frozenAccount; + mapping (address => mapping (address => uint256)) public allowance; + uint256 public totalSupply; + string public constant name = "Azurion"; + string public constant symbol = "AZU"; + uint8 public constant decimals = 18; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + event FrozenFunds(address target, bool frozen); + function AzurionToken(uint256 initialSupply, address centralMinter) { + if(centralMinter != 0 ) owner = centralMinter; + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function approve(address _spender, uint256 _value) public returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) onlyOwner public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } + function () { + revert(); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13069.sol b/data_full/CVE_clean/2018-13069.sol new file mode 100644 index 00000000..cfd90e83 --- /dev/null +++ b/data_full/CVE_clean/2018-13069.sol @@ -0,0 +1,128 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract DYC is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function DYC( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13070.sol b/data_full/CVE_clean/2018-13070.sol new file mode 100644 index 00000000..901dffc8 --- /dev/null +++ b/data_full/CVE_clean/2018-13070.sol @@ -0,0 +1,122 @@ +pragma solidity ^0.4.24; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract EncryptedToken is owned, TokenERC20 { + uint256 INITIAL_SUPPLY = 100000000; + uint256 public buyPrice = 1; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function EncryptedToken() TokenERC20(INITIAL_SUPPLY, 'ECC', 'ECC') payable public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newBuyPrice) onlyOwner public { + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function () payable public { + owner.send(msg.value); + uint amount = msg.value * buyPrice; + _transfer(owner, msg.sender, amount); + } + function selfdestructs() onlyOwner payable public { + selfdestruct(owner); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13071.sol b/data_full/CVE_clean/2018-13071.sol new file mode 100644 index 00000000..1d178d14 --- /dev/null +++ b/data_full/CVE_clean/2018-13071.sol @@ -0,0 +1,171 @@ +pragma solidity ^0.4.17; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "T10 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + mapping(address=>uint256) public indexes; + mapping(uint256=>address) public addresses; + uint256 public lastIndex = 0; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + addresses[1] = msg.sender; + indexes[msg.sender] = 1; + lastIndex = 1; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract CCindexToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 40000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "CCindex10"; + string public tokenSymbol = "T10"; + function CCindexToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + if(_value > 0){ + if(balanceOf[msg.sender] == 0){ + addresses[indexes[msg.sender]] = addresses[lastIndex]; + indexes[addresses[lastIndex]] = indexes[msg.sender]; + indexes[msg.sender] = 0; + delete addresses[lastIndex]; + lastIndex--; + } + if(indexes[_to]==0){ + lastIndex++; + addresses[lastIndex] = _to; + indexes[_to] = lastIndex; + } + } + } + function getAddresses() constant returns (address[]){ + address[] memory addrs = new address[](lastIndex); + for(uint i = 0; i < lastIndex; i++){ + addrs[i] = addresses[i+1]; + } + return addrs; + } + function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { + uint distributed = 0; + require(startIndex < endIndex); + for(uint i = startIndex; i < lastIndex; i++){ + address holder = addresses[i+1]; + uint reward = balanceOf[holder] * 3 / 100; + balanceOf[holder] += reward; + distributed += reward; + Transfer(0, holder, reward); + } + totalSupply += distributed; + return distributed; + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13072.sol b/data_full/CVE_clean/2018-13072.sol new file mode 100644 index 00000000..ff7b130d --- /dev/null +++ b/data_full/CVE_clean/2018-13072.sol @@ -0,0 +1,125 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + revert(); + } +} +contract Coffeecoin is owned, token { + uint public buyRate = 4000; + bool public isSelling = true; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function Coffeecoin( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + function buy() payable { + if(isSelling == false) revert(); + uint amount = msg.value * buyRate; + balanceOf[msg.sender] += amount; + balanceOf[owner] -= amount; + Transfer(owner, msg.sender, amount); + } + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13073.sol b/data_full/CVE_clean/2018-13073.sol new file mode 100644 index 00000000..ac445982 --- /dev/null +++ b/data_full/CVE_clean/2018-13073.sol @@ -0,0 +1,131 @@ +pragma solidity ^0.4.17; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "ETHEREUMBLACK"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract ETHEREUMBLACK is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 200000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "ETHEREUMBLACK"; + string public tokenSymbol = "ETCBK"; + function ETHEREUMBLACK() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13074.sol b/data_full/CVE_clean/2018-13074.sol new file mode 100644 index 00000000..871884f0 --- /dev/null +++ b/data_full/CVE_clean/2018-13074.sol @@ -0,0 +1,112 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + uint256 initialSupply=5000000000; + string tokenName='FIB'; + string tokenSymbol='FIB'; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + emit Burn(_from, _value); + return true; + } +} +contract FIBToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function FIBToken( + ) TokenERC20() public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13075.sol b/data_full/CVE_clean/2018-13075.sol new file mode 100644 index 00000000..19fcc9da --- /dev/null +++ b/data_full/CVE_clean/2018-13075.sol @@ -0,0 +1,142 @@ +pragma solidity ^0.4.18; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } + function destruct() public onlyOwner { + selfdestruct(owner); + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20() public { + totalSupply = 500000000000 * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = "Carbon Exchange Coin Token"; + symbol = "CEC"; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract CarbonExchangeCoinToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + uint256 public decimals = 18; + string public tokenName; + string public tokenSymbol; + uint minBalanceForAccounts ; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function CarbonExchangeCoinToken() public { + owner = msg.sender; + totalSupply = 50000000000000000000000000000; + balanceOf[owner]=totalSupply; + tokenName="Carbon Exchange Coin Token"; + tokenSymbol="CEC"; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } + function setMinBalance(uint minimumBalanceInFinney) public onlyOwner { + minBalanceForAccounts = minimumBalanceInFinney * 1 finney; + } + function setTokenName(string newTokenName) public onlyOwner{ + tokenName = newTokenName; + } + function setTokenSymbol(string newTokenSymbol) public onlyOwner{ + tokenSymbol = newTokenSymbol; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13076.sol b/data_full/CVE_clean/2018-13076.sol new file mode 100644 index 00000000..66b61fad --- /dev/null +++ b/data_full/CVE_clean/2018-13076.sol @@ -0,0 +1,125 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + revert(); + } +} +contract Betcash is owned, token { + uint public buyRate = 4000; + bool public isSelling = true; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function Betcash( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + function buy() payable { + if(isSelling == false) revert(); + uint amount = msg.value * buyRate; + balanceOf[msg.sender] += amount; + balanceOf[owner] -= amount; + Transfer(owner, msg.sender, amount); + } + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13077.sol b/data_full/CVE_clean/2018-13077.sol new file mode 100644 index 00000000..d34b34e5 --- /dev/null +++ b/data_full/CVE_clean/2018-13077.sol @@ -0,0 +1,128 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData); } +contract token { + string public name = 'CTB'; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + require (_value < allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) returns (bool success) { + require (balanceOf[msg.sender] > _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract CTB is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function CTB( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13078.sol b/data_full/CVE_clean/2018-13078.sol new file mode 100644 index 00000000..6abcf5b3 --- /dev/null +++ b/data_full/CVE_clean/2018-13078.sol @@ -0,0 +1,107 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() public{ + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) public { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) public { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () public { + revert(); + } +} +contract Jitech is owned, token { + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function Jitech( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) public token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) public { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) public onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) public onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13079.sol b/data_full/CVE_clean/2018-13079.sol new file mode 100644 index 00000000..703170f6 --- /dev/null +++ b/data_full/CVE_clean/2018-13079.sol @@ -0,0 +1,128 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract GoodTo { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function GoodTo( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract StandardToken is owned, GoodTo { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function StandardToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) GoodTo(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13080.sol b/data_full/CVE_clean/2018-13080.sol new file mode 100644 index 00000000..7d8884c3 --- /dev/null +++ b/data_full/CVE_clean/2018-13080.sol @@ -0,0 +1,107 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() public{ + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) public { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) public { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () public { + revert(); + } +} +contract Goutex is owned, token { + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function Goutex( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) public token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) public { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) public onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) public onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13081.sol b/data_full/CVE_clean/2018-13081.sol new file mode 100644 index 00000000..62d35a89 --- /dev/null +++ b/data_full/CVE_clean/2018-13081.sol @@ -0,0 +1,127 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract GZSToken is owned, token { + uint public buyRate = 46000; + bool public isSelling = true; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function GZSToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + function buy() payable { + if(isSelling == false) throw; + uint amount = msg.value * buyRate; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13082.sol b/data_full/CVE_clean/2018-13082.sol new file mode 100644 index 00000000..723c8884 --- /dev/null +++ b/data_full/CVE_clean/2018-13082.sol @@ -0,0 +1,133 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract ModiTokenERC20 { + string public constant _myTokeName = 'MODI Token'; + string public constant _mySymbol = 'MODI'; + uint public constant _myinitialSupply = 10000; + uint8 public constant _myDecimal = 18; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function ModiTokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + decimals = _myDecimal; + totalSupply = _myinitialSupply * (10 ** uint256(_myDecimal)); + balanceOf[msg.sender] = totalSupply; + name = _myTokeName; + symbol = _mySymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract MyAdvancedToken is owned, ModiTokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) ModiTokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13083.sol b/data_full/CVE_clean/2018-13083.sol new file mode 100644 index 00000000..e818810b --- /dev/null +++ b/data_full/CVE_clean/2018-13083.sol @@ -0,0 +1,113 @@ +pragma solidity ^0.4.21; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + emit Burn(_from, _value); + return true; + } +} +contract PlazaToken is owned, TokenERC20 { + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function PlazaToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13084.sol b/data_full/CVE_clean/2018-13084.sol new file mode 100644 index 00000000..d0e05edb --- /dev/null +++ b/data_full/CVE_clean/2018-13084.sol @@ -0,0 +1,123 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient +{ +function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; +} +contract StandardToken { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function StandardToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public returns (bool success) + { + _transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract GoodTimeCoin is owned, StandardToken { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function GoodTimeCoin( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) StandardToken(initialSupply, tokenName, tokenSymbol) public {} + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13085.sol b/data_full/CVE_clean/2018-13085.sol new file mode 100644 index 00000000..97a9e5a3 --- /dev/null +++ b/data_full/CVE_clean/2018-13085.sol @@ -0,0 +1,140 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + uint public free = 100 * 10 ** uint256(decimals); + mapping (address => uint256) public balances; + mapping (address => mapping (address => uint256)) public allowance; + mapping (address => bool) public created; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function changeFree(uint newFree) public { + free = newFree; + } + function balanceOf(address _owner) public constant returns (uint balance) { + if (!created[_owner] && balances[_owner] == 0) { + return free; + } + else + { + return balances[_owner]; + } + } + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balances[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + created[msg.sender] = true; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + if (!created[_from]) { + balances[_from] = free; + created[_from] = true; + } + if (!created[_to]) { + created[_to] = true; + } + require(balances[_from] >= _value); + require(balances[_to] + _value >= balances[_to]); + uint previousBalances = balances[_from] + balances[_to]; + balances[_from] -= _value; + balances[_to] += _value; + emit Transfer(_from, _to, _value); + assert(balances[_from] + balances[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balances[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balances[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + emit Burn(_from, _value); + return true; + } +} +contract FreeCoin is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function FreeCoin( + uint256 initialSupply, + string tokenName , + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balances[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(address(this).balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13086.sol b/data_full/CVE_clean/2018-13086.sol new file mode 100644 index 00000000..9556756d --- /dev/null +++ b/data_full/CVE_clean/2018-13086.sol @@ -0,0 +1,130 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract Token { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract IADOWR is owned, Token { + string public name = "IADOWR Coin"; + string public symbol = "IAD"; + address public IADAddress = this; + uint8 public decimals = 18; + uint256 public initialSupply = 2000000000000000000000000000; + uint256 public totalSupply = 2000000000000000000000000000; + uint256 public unitsOneEthCanBuy = 5000; + uint256 public buyPriceEth = 0.2 finney; + uint256 public sellPriceEth = 0.1 finney; + uint256 public gasForIAD = 30000 wei; + uint256 public IADForGas = 1; + uint256 public gasReserve = 0.1 ether; + uint256 public minBalanceForAccounts = 2 finney; + bool public directTradeAllowed = false; + function IADOWR() { + balanceOf[msg.sender] = totalSupply; + } + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13087.sol b/data_full/CVE_clean/2018-13087.sol new file mode 100644 index 00000000..aa51a00b --- /dev/null +++ b/data_full/CVE_clean/2018-13087.sol @@ -0,0 +1,124 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract MyAdvancedToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) payable public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13088.sol b/data_full/CVE_clean/2018-13088.sol new file mode 100644 index 00000000..e1b4a640 --- /dev/null +++ b/data_full/CVE_clean/2018-13088.sol @@ -0,0 +1,128 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract MyAdvancedToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13089.sol b/data_full/CVE_clean/2018-13089.sol new file mode 100644 index 00000000..aef80f80 --- /dev/null +++ b/data_full/CVE_clean/2018-13089.sol @@ -0,0 +1,126 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name ; + string public symbol ; + uint8 public decimals = 18; + uint256 public totalSupply ; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract UCoinToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function UCoinToken( + ) + TokenERC20(5000000000, "Universal Coin", "UCOIN") public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13090.sol b/data_full/CVE_clean/2018-13090.sol new file mode 100644 index 00000000..97695ae6 --- /dev/null +++ b/data_full/CVE_clean/2018-13090.sol @@ -0,0 +1,128 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract YiTongCoin is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function YiTongCoin( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13091.sol b/data_full/CVE_clean/2018-13091.sol new file mode 100644 index 00000000..3da164fe --- /dev/null +++ b/data_full/CVE_clean/2018-13091.sol @@ -0,0 +1,111 @@ +pragma solidity ^0.4.16; +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} + contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + } +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract sumocoin is owned { + using SafeMath for uint256; + string public name = "sumocoin"; + string public symbol = "SUMO"; + uint8 public decimals = 18; + uint256 public totalSupply = 10**25; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function sumocoin(){ + balanceOf[msg.sender] = totalSupply; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } + function distributeToken(address[] addresses, uint256 _value) onlyOwner { + for (uint i = 0; i < addresses.length; i++) { + balanceOf[owner] -= _value; + balanceOf[addresses[i]] += _value; + Transfer(owner, addresses[i], _value); + } +} +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13092.sol b/data_full/CVE_clean/2018-13092.sol new file mode 100644 index 00000000..9c90c53b --- /dev/null +++ b/data_full/CVE_clean/2018-13092.sol @@ -0,0 +1,89 @@ +pragma solidity ^0.4.18; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract ReimburseToken is owned{ + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + function ReimburseToken( + uint256 initialSupply + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = "Reimburse Token"; + symbol = "REIM"; + decimals = 18; + } + function balanceOf(address _owner) public constant returns (uint256 balance) { + return balanceOf[_owner]; + } + function _transfer(address _from, address _to, uint _value) internal { + require(balanceOf[_from] >= _value); + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + allowance[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } +} +contract AdvReimburseToken is owned, ReimburseToken { + function AdvReimburseToken( + uint256 initialSupply + ) ReimburseToken(initialSupply) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13113.sol b/data_full/CVE_clean/2018-13113.sol new file mode 100644 index 00000000..2567ec27 --- /dev/null +++ b/data_full/CVE_clean/2018-13113.sol @@ -0,0 +1,77 @@ +pragma solidity ^0.4.4; +contract Token { + function totalSupply() constant returns (uint256 supply) {} + function balanceOf(address _owner) constant returns (uint256 balance) {} + function transfer(address _to, uint256 _value) returns (bool success) {} + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + function approve(address _spender, uint256 _value) returns (bool success) {} + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} +contract HashnodeTestCoin is StandardToken { + string public name; + uint8 public decimals; + string public symbol; + string public version = 'H1.0'; + uint256 public unitsOneEthCanBuy; + uint256 public totalEthInWei; + address public fundsWallet; + function HashnodeTestCoin() { + balances[msg.sender] = 100000000000000000000000000; + totalSupply = 100000000000000000000000000; + name = "Easy Trading Token"; + decimals = 18; + symbol = "ETT"; + unitsOneEthCanBuy = 40000; + fundsWallet = msg.sender; + } + function() payable{ + totalEthInWei = totalEthInWei + msg.value; + uint256 amount = msg.value * unitsOneEthCanBuy; + require(balances[fundsWallet] >= amount); + balances[fundsWallet] = balances[fundsWallet] - amount; + balances[msg.sender] = balances[msg.sender] + amount; + Transfer(fundsWallet, msg.sender, amount); + fundsWallet.transfer(msg.value); + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13126.sol b/data_full/CVE_clean/2018-13126.sol new file mode 100644 index 00000000..ca41e213 --- /dev/null +++ b/data_full/CVE_clean/2018-13126.sol @@ -0,0 +1,151 @@ +pragma solidity ^0.4.18; +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } +} +contract SpendToken is StandardToken { + string public constant name = "Spend Token"; + string public constant symbol = "SPEND"; + uint8 public constant decimals = 18; + address public presale; + address public team; + uint public constant TOKEN_LIMIT = 50000000; + function SpendToken(address _presale, address _team) public { + require(_presale != address(0)); + require(_team != address(0)); + presale = _presale; + team = _team; + } + function mint(address _holder, uint _value) external { + require(msg.sender == presale); + require(_value > 0); + require(totalSupply + _value <= TOKEN_LIMIT); + balances[_holder] += _value; + totalSupply += _value; + Transfer(0x0, _holder, _value); + } +} +contract MoxyOnePresale { + enum PreSaleState { + PreSaleStarted, + PreSaleFinished + } + SpendToken public token; + PreSaleState public preSaleState = PreSaleState.PreSaleStarted; + address public team; + bool public isPaused = false; + uint256 public pricePerToken = 1 ether / 1000; + event PreSaleStarted(); + event PreSaleFinished(); + event PreSalePaused(); + event PreSaleResumed(); + event TokenBuy(address indexed buyer, uint256 tokens); + modifier teamOnly { + require(msg.sender == team); + _; + } + function MoxyOnePresale() public { + team = msg.sender; + token = new SpendToken(this, team); + } + function pausePreSale() external teamOnly { + require(!isPaused); + require(preSaleState == PreSaleState.PreSaleStarted); + isPaused = true; + PreSalePaused(); + } + function resumePreSale() external teamOnly { + require(isPaused); + require(preSaleState == PreSaleState.PreSaleStarted); + isPaused = false; + PreSaleResumed(); + } + function finishPreSale() external teamOnly { + require(preSaleState == PreSaleState.PreSaleStarted); + preSaleState = PreSaleState.PreSaleFinished; + PreSaleFinished(); + } + function withdrawFunds(address _target, uint256 _amount) external teamOnly { + _target.transfer(_amount); + } + function buyTokens(address _buyer, uint256 _value) internal returns (uint) { + require(_buyer != address(0)); + require(_value > 0); + require(preSaleState == PreSaleState.PreSaleStarted); + require(!isPaused); + uint256 boughtTokens = _value / pricePerToken; + require(boughtTokens > 0); + token.mint(_buyer, boughtTokens); + TokenBuy(_buyer, boughtTokens); + } + function () external payable { + buyTokens(msg.sender, msg.value); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13127.sol b/data_full/CVE_clean/2018-13127.sol new file mode 100644 index 00000000..3940b40f --- /dev/null +++ b/data_full/CVE_clean/2018-13127.sol @@ -0,0 +1,126 @@ +pragma solidity ^0.4.19; +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract DSPXToken is StandardToken { + string public constant name = "SP8DE PreSale Token"; + string public constant symbol = "DSPX"; + uint8 public constant decimals = 18; + address public preSale; + address public team; + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 888888888 * (1e18); + function DSPXToken(address _preSale, address _team) { + require(_preSale != address(0)); + require(_team != address(0)); + preSale = _preSale; + team = _team; + } + function mint(address holder, uint value) { + require(msg.sender == preSale); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + function unfreeze() external { + require(msg.sender == team); + isFrozen = false; + } + function transfer(address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13128.sol b/data_full/CVE_clean/2018-13128.sol new file mode 100644 index 00000000..c5184528 --- /dev/null +++ b/data_full/CVE_clean/2018-13128.sol @@ -0,0 +1,138 @@ +pragma solidity ^0.4.21; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { + if (a == 0) { + return 0; + } + c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + return a / b; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256 c) { + c = a + b; + assert(c >= a); + return c; + } +} +contract ERC223ReceivingContract{ + function tokenFallback(address _from, uint _value, bytes _data) public; +} +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) public constant returns (uint); + function transfer(address to, uint value) public; + event Transfer(address indexed from, address indexed to, uint value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint); + function transferFrom(address from, address to, uint value) public; + function approve(address spender, uint value) public; + event Approval(address indexed owner, address indexed spender, uint value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint; + mapping(address => uint) balances; + modifier onlyPayloadSize(uint size) { + require(msg.data.length >= size + 4); + _; + } + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) public { + uint codeLength; + bytes memory empty; + assembly { + codeLength := extcodesize(_to) + } + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + if(codeLength > 0) { + ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); + receiver.tokenFallback(msg.sender, _value, empty); + } + emit Transfer(msg.sender, _to, _value); + } + function balanceOf(address _owner) public constant returns (uint balance) { + return balances[_owner]; + } +} +contract StandardToken is BasicToken, ERC20 { + mapping (address => mapping (address => uint)) allowed; + function transferFrom(address _from, address _to, uint _value) public { + uint256 _allowance = allowed[_from][msg.sender]; + uint codeLength; + bytes memory empty; + assembly { + codeLength := extcodesize(_to) + } + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + if(codeLength>0) { + ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); + receiver.tokenFallback(msg.sender, _value, empty); + } + emit Transfer(_from, _to, _value); + } + function approve(address _spender, uint _value) public { + allowed[msg.sender][_spender] = _value; + emit Approval(msg.sender, _spender, _value); + } + function allowance(address _owner, address _spender) public constant returns (uint remaining) { + return allowed[_owner][_spender]; + } +} +contract BurnableToken is StandardToken { + function burn(uint _value) public { + require(_value > 0); + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + emit Burn(burner, _value); + } + event Burn(address indexed burner, uint indexed value); +} +contract ETY is BurnableToken { + string public name = "Etherty Token"; + string public symbol = "ETY"; + uint public decimals = 18; + uint constant TOKEN_LIMIT = 240 * 1e6 * 1e18; + address public ico; + bool public tokensAreFrozen = true; + function ETY(address _ico) public { + ico = _ico; + } + function mint(address _holder, uint _value) external { + require(msg.sender == ico); + require(_value != 0); + require(totalSupply + _value <= TOKEN_LIMIT); + balances[_holder] += _value; + totalSupply += _value; + emit Transfer(0x0, _holder, _value); + } + function burn(uint _value) public { + require(msg.sender == ico); + super.burn(_value); + } + function unfreeze() external { + require(msg.sender == ico); + tokensAreFrozen = false; + } + function transfer(address _to, uint _value) public { + require(!tokensAreFrozen); + super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) public { + require(!tokensAreFrozen); + super.transferFrom(_from, _to, _value); + } + function approve(address _spender, uint _value) public { + require(!tokensAreFrozen); + super.approve(_spender, _value); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13129.sol b/data_full/CVE_clean/2018-13129.sol new file mode 100644 index 00000000..98242287 --- /dev/null +++ b/data_full/CVE_clean/2018-13129.sol @@ -0,0 +1,152 @@ +pragma solidity ^0.4.18; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract MigrationAgent { + function migrateFrom(address _from, uint _value) public; +} +contract SPXToken is StandardToken { + string public constant name = "SP8DE Token"; + string public constant symbol = "SPX"; + uint8 public constant decimals = 18; + address public ico; + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 8888888888 * (1e18); + address public migrationMaster; + address public migrationAgent; + uint public totalMigrated; + event Migrate(address indexed _from, address indexed _to, uint _value); + function SPXToken(address _ico, address _migrationMaster) public { + require(_ico != 0); + ico = _ico; + migrationMaster = _migrationMaster; + } + function mint(address holder, uint value) public { + require(msg.sender == ico); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + function unfreeze() public { + require(msg.sender == ico); + isFrozen = false; + } + function transfer(address _to, uint _value) public returns (bool) { + require(_to != address(0)); + require(!isFrozen); + return super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } + function migrate(uint value) external { + require(migrationAgent != 0); + require(value > 0); + require(value <= balances[msg.sender]); + balances[msg.sender] -= value; + totalSupply -= value; + totalMigrated += value; + MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); + Migrate(msg.sender, migrationAgent, value); + } + function setMigrationAgent(address _agent) external { + require(migrationAgent == 0); + require(msg.sender == migrationMaster); + migrationAgent = _agent; + } + function setMigrationMaster(address _master) external { + require(msg.sender == migrationMaster); + require(_master != 0); + migrationMaster = _master; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13131.sol b/data_full/CVE_clean/2018-13131.sol new file mode 100644 index 00000000..02350c22 --- /dev/null +++ b/data_full/CVE_clean/2018-13131.sol @@ -0,0 +1,178 @@ +pragma solidity ^0.4.19; +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract DSPXToken is StandardToken { + string public constant name = "SP8DE PreSale Token"; + string public constant symbol = "DSPX"; + uint8 public constant decimals = 18; + address public preSale; + address public team; + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 888888888 * (1e18); + function DSPXToken(address _preSale, address _team) { + require(_preSale != address(0)); + require(_team != address(0)); + preSale = _preSale; + team = _team; + } + function mint(address holder, uint value) { + require(msg.sender == preSale); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + function unfreeze() external { + require(msg.sender == team); + isFrozen = false; + } + function transfer(address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } +} +contract SpadePreSale { + DSPXToken public token; + address public team; + address public icoAgent; + modifier teamOnly {require(msg.sender == team); _;} + modifier icoAgentOnly {require(msg.sender == icoAgent); _;} + bool public isPaused = false; + enum PreSaleState { Created, PreSaleStarted, PreSaleFinished } + PreSaleState public preSaleState = PreSaleState.Created; + event PreSaleStarted(); + event PreSaleFinished(); + event PreSalePaused(); + event PreSaleResumed(); + event TokenBuy(address indexed buyer, uint256 tokens, uint factor, string tx); + function SpadePreSale(address _team, address _icoAgent) public { + require(_team != address(0)); + require(_icoAgent != address(0)); + team = _team; + icoAgent = _icoAgent; + token = new DSPXToken(this, team); + } + function startPreSale() external teamOnly { + require(preSaleState == PreSaleState.Created); + preSaleState = PreSaleState.PreSaleStarted; + PreSaleStarted(); + } + function pausePreSale() external teamOnly { + require(!isPaused); + require(preSaleState == PreSaleState.PreSaleStarted); + isPaused = true; + PreSalePaused(); + } + function resumePreSale() external teamOnly { + require(isPaused); + require(preSaleState == PreSaleState.PreSaleStarted); + isPaused = false; + PreSaleResumed(); + } + function finishPreSale() external teamOnly { + require(preSaleState == PreSaleState.PreSaleStarted); + preSaleState = PreSaleState.PreSaleFinished; + PreSaleFinished(); + } + function buyPreSaleTokens(address buyer, uint256 tokens, uint factor, string txHash) external icoAgentOnly returns (uint) { + require(buyer != address(0)); + require(tokens > 0); + require(preSaleState == PreSaleState.PreSaleStarted); + require(!isPaused); + token.mint(buyer, tokens); + TokenBuy(buyer, tokens, factor, txHash); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13132.sol b/data_full/CVE_clean/2018-13132.sol new file mode 100644 index 00000000..253f6388 --- /dev/null +++ b/data_full/CVE_clean/2018-13132.sol @@ -0,0 +1,249 @@ +pragma solidity ^0.4.18; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public view returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public view returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract MigrationAgent { + function migrateFrom(address _from, uint _value) public; +} +contract SPXToken is StandardToken { + string public constant name = "SP8DE Token"; + string public constant symbol = "SPX"; + uint8 public constant decimals = 18; + address public ico; + bool public isFrozen = true; + uint public constant TOKEN_LIMIT = 8888888888 * (1e18); + address public migrationMaster; + address public migrationAgent; + uint public totalMigrated; + event Migrate(address indexed _from, address indexed _to, uint _value); + function SPXToken(address _ico, address _migrationMaster) public { + require(_ico != 0); + ico = _ico; + migrationMaster = _migrationMaster; + } + function mint(address holder, uint value) public { + require(msg.sender == ico); + require(value > 0); + require(totalSupply + value <= TOKEN_LIMIT); + balances[holder] += value; + totalSupply += value; + Transfer(0x0, holder, value); + } + function unfreeze() public { + require(msg.sender == ico); + isFrozen = false; + } + function transfer(address _to, uint _value) public returns (bool) { + require(_to != address(0)); + require(!isFrozen); + return super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint _value) public returns (bool) { + require(!isFrozen); + return super.transferFrom(_from, _to, _value); + } + function approve(address _spender, uint _value) public returns (bool) { + require(!isFrozen); + return super.approve(_spender, _value); + } + function migrate(uint value) external { + require(migrationAgent != 0); + require(value > 0); + require(value <= balances[msg.sender]); + balances[msg.sender] -= value; + totalSupply -= value; + totalMigrated += value; + MigrationAgent(migrationAgent).migrateFrom(msg.sender, value); + Migrate(msg.sender, migrationAgent, value); + } + function setMigrationAgent(address _agent) external { + require(migrationAgent == 0); + require(msg.sender == migrationMaster); + migrationAgent = _agent; + } + function setMigrationMaster(address _master) external { + require(msg.sender == migrationMaster); + require(_master != 0); + migrationMaster = _master; + } +} +contract SpadeIco { + uint public constant TOKENS_FOR_SALE = 3655555558 * 1e18; + uint public constant TOKENS_FOUNDATION = 1777777778 * 1e18; + uint tokensSold = 0; + SPXToken public token; + address public team; + address public icoAgent; + address public migrationMaster; + modifier teamOnly {require(msg.sender == team); _;} + modifier icoAgentOnly {require(msg.sender == icoAgent); _;} + bool public isPaused = false; + enum IcoState { Created, IcoStarted, IcoFinished } + IcoState public icoState = IcoState.Created; + event IcoStarted(); + event IcoFinished(); + event IcoPaused(); + event IcoResumed(); + event TokenBuy(address indexed buyer, uint256 tokens, uint256 factor, string tx); + event TokenBuyPresale(address indexed buyer, uint256 tokens, uint256 factor, string tx); + event TokenWin(address indexed buyer, uint256 tokens, uint256 jackpot); + function SpadeIco(address _team, address _icoAgent, address _migrationMaster) public { + require(_team != address(0) && _icoAgent != address(0) && _migrationMaster != address(0)); + migrationMaster = _migrationMaster; + team = _team; + icoAgent = _icoAgent; + token = new SPXToken(this, migrationMaster); + } + function startIco() external teamOnly { + require(icoState == IcoState.Created); + icoState = IcoState.IcoStarted; + IcoStarted(); + } + function finishIco(address foundation, address other) external teamOnly { + require(foundation != address(0)); + require(other != address(0)); + require(icoState == IcoState.IcoStarted); + icoState = IcoState.IcoFinished; + uint256 amountWithFoundation = SafeMath.add(token.totalSupply(), TOKENS_FOUNDATION); + if (amountWithFoundation > token.TOKEN_LIMIT()) { + uint256 foundationToMint = token.TOKEN_LIMIT() - token.totalSupply(); + if (foundationToMint > 0) { + token.mint(foundation, foundationToMint); + } + } else { + token.mint(foundation, TOKENS_FOUNDATION); + uint mintedTokens = token.totalSupply(); + uint remaining = token.TOKEN_LIMIT() - mintedTokens; + if (remaining > 0) { + token.mint(other, remaining); + } + } + token.unfreeze(); + IcoFinished(); + } + function pauseIco() external teamOnly { + require(!isPaused); + require(icoState == IcoState.IcoStarted); + isPaused = true; + IcoPaused(); + } + function resumeIco() external teamOnly { + require(isPaused); + require(icoState == IcoState.IcoStarted); + isPaused = false; + IcoResumed(); + } + function convertPresaleTokens(address buyer, uint256 tokens, uint256 factor, string txHash) external icoAgentOnly returns (uint) { + require(buyer != address(0)); + require(tokens > 0); + require(validState()); + uint256 tokensToSell = SafeMath.add(tokensSold, tokens); + require(tokensToSell <= TOKENS_FOR_SALE); + tokensSold = tokensToSell; + token.mint(buyer, tokens); + TokenBuyPresale(buyer, tokens, factor, txHash); + } + function creditJackpotTokens(address buyer, uint256 tokens, uint256 jackpot) external icoAgentOnly returns (uint) { + require(buyer != address(0)); + require(tokens > 0); + require(validState()); + token.mint(buyer, tokens); + TokenWin(buyer, tokens, jackpot); + } + function buyTokens(address buyer, uint256 tokens, uint256 factor, string txHash) external icoAgentOnly returns (uint) { + require(buyer != address(0)); + require(tokens > 0); + require(validState()); + uint256 tokensToSell = SafeMath.add(tokensSold, tokens); + require(tokensToSell <= TOKENS_FOR_SALE); + tokensSold = tokensToSell; + token.mint(buyer, tokens); + TokenBuy(buyer, tokens, factor, txHash); + } + function validState() internal view returns (bool) { + return icoState == IcoState.IcoStarted && !isPaused; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13144.sol b/data_full/CVE_clean/2018-13144.sol new file mode 100644 index 00000000..831fbe0e --- /dev/null +++ b/data_full/CVE_clean/2018-13144.sol @@ -0,0 +1,65 @@ +pragma solidity ^0.4.8; +contract Token{ + uint256 public totalSupply; + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns + (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns + (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 + _value); +} +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) returns + (bool success) { + require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) + { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} +contract HumanStandardToken is StandardToken { + string public name; + uint8 public decimals; + string public symbol; + string public version = 'H0.1'; + function HumanStandardToken(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) { + balances[msg.sender] = _initialAmount; + totalSupply = _initialAmount; + name = _tokenName; + decimals = _decimalUnits; + symbol = _tokenSymbol; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + require(_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)); + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13189.sol b/data_full/CVE_clean/2018-13189.sol new file mode 100644 index 00000000..3b2fe003 --- /dev/null +++ b/data_full/CVE_clean/2018-13189.sol @@ -0,0 +1,171 @@ +pragma solidity ^0.4.18; +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) constant returns (uint256); + function transfer(address to, uint256 value) returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant returns (uint256); + function transferFrom(address from, address to, uint256 value) returns (bool); + function approve(address spender, uint256 value) returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) returns (bool) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) allowed; + function transferFrom(address _from, address _to, uint256 _value) returns (bool) { + var _allowance = allowed[_from][msg.sender]; + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) returns (bool) { + require((_value == 0) || (allowed[msg.sender][_spender] == 0)); + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} +contract Ownable { + address public owner; + function Ownable() { + owner = msg.sender; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } +} +contract Pausable is Ownable { + event Pause(); + event Unpause(); + bool public paused = false; + modifier whenNotPaused() { + require(!paused); + _; + } + modifier whenPaused { + require(paused); + _; + } + function pause() onlyOwner whenNotPaused returns (bool) { + paused = true; + Pause(); + return true; + } + function unpause() onlyOwner whenPaused returns (bool) { + paused = false; + Unpause(); + return true; + } +} +contract PausableToken is StandardToken, Pausable { + function transfer(address _to, uint _value) whenNotPaused returns (bool) { + return super.transfer(_to, _value); + } + function transferFrom(address _from, address _to, uint _value) whenNotPaused returns (bool) { + return super.transferFrom(_from, _to, _value); + } +} +contract UNLB is PausableToken { + string public constant name = "UnolaboToken"; + string public constant symbol = "UNLB"; + uint256 public constant decimals = 18; + function UNLB() { + owner = msg.sender; + } + function mint(address _x, uint _v) public onlyOwner { + balances[_x] += _v; + totalSupply += _v; + Transfer(0x0, _x, _v); + } +} +contract ICO is Pausable { + uint public constant ICO_START_DATE = 1511773200; + uint public constant ICO_END_DATE = 1525018620; + address public constant admin = 0xFeC0714C2eE71a486B679d4A3539FA875715e7d8; + address public constant teamWallet = 0xf16d5733A31D54e828460AFbf7D60aA803a61C51; + UNLB public unlb; + bool public isFinished = false; + event ForeignBuy(address investor, uint unlbValue, string txHash); + function ICO() { + owner = admin; + unlb = new UNLB(); + unlb.pause(); + } + function pricePerWei() public constant returns(uint) { + if (now < 1511799420) return 800.0 * 1 ether; + else if(now < 1511885820) return 750.0 * 1 ether; + else if(now < 1513181820) return 675.0 * 1 ether; + else if(now < 1515514620) return 575.0 * 1 ether; + else if(now < 1516205820) return 537.5 * 1 ether; + else return 500.0 * 1 ether; + } + function() public payable { + require(!paused && now >= ICO_START_DATE && now < ICO_END_DATE); + uint _tokenVal = (msg.value * pricePerWei()) / 1 ether; + unlb.mint(msg.sender, _tokenVal); + } + function foreignBuy(address _investor, uint _unlbValue, string _txHash) external onlyOwner { + require(!paused && now >= ICO_START_DATE && now < ICO_END_DATE); + require(_unlbValue > 0); + unlb.mint(_investor, _unlbValue); + ForeignBuy(_investor, _unlbValue, _txHash); + } + function finish(address _team, address _fund, address _bounty, address _backers) external onlyOwner { + require(now >= ICO_END_DATE && !isFinished); + unlb.unpause(); + isFinished = true; + uint _total = unlb.totalSupply() * 100 / (100 - 12 - 15 - 5 - 3); + unlb.mint(_team, (_total * 12) / 100); + unlb.mint(_fund, (_total * 15) / 100); + unlb.mint(_bounty, (_total * 5) / 100); + unlb.mint(_backers, (_total * 3) / 100); + } + function withdraw() external onlyOwner { + teamWallet.transfer(this.balance); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13202.sol b/data_full/CVE_clean/2018-13202.sol new file mode 100644 index 00000000..caadc7fd --- /dev/null +++ b/data_full/CVE_clean/2018-13202.sol @@ -0,0 +1,140 @@ +pragma solidity ^0.4.11; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MyBoToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + event Burn(address indexed from, uint256 value); + function MyBoToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } + function burn(uint256 amount) onlyOwner returns (bool success) { + if (balanceOf[msg.sender] < amount) throw; + balanceOf[msg.sender] -= amount; + totalSupply -= amount; + Burn(msg.sender, amount); + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13208.sol b/data_full/CVE_clean/2018-13208.sol new file mode 100644 index 00000000..7d590e17 --- /dev/null +++ b/data_full/CVE_clean/2018-13208.sol @@ -0,0 +1,131 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "MoneyTree 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MoneyTreeToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 95000000 * 10**8; + uint8 public constant decimalUnits = 8; + string public tokenName = "MoneyTree"; + string public tokenSymbol = "TREE"; + function MoneyTreeToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13220.sol b/data_full/CVE_clean/2018-13220.sol new file mode 100644 index 00000000..33fa8690 --- /dev/null +++ b/data_full/CVE_clean/2018-13220.sol @@ -0,0 +1,132 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MAVCash is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MAVCash( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13221.sol b/data_full/CVE_clean/2018-13221.sol new file mode 100644 index 00000000..17bbd955 --- /dev/null +++ b/data_full/CVE_clean/2018-13221.sol @@ -0,0 +1,155 @@ +pragma solidity ^0.4.14; +library SafeMath { + function mul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + function sub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + function add(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c >= a); + return c; + } + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} +contract Ownable { + address public owner; + function Ownable() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } +} +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function transfer(address to, uint value); + event Transfer(address indexed from, address indexed to, uint value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant returns (uint); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} +contract newToken is ERC20Basic { + using SafeMath for uint; + mapping(address => uint) balances; + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + } + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } +} +contract StandardToken is newToken, ERC20 { + mapping (address => mapping (address => uint)) allowed; + function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) { + var _allowance = allowed[_from][msg.sender]; + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + } + function approve(address _spender, uint _value) { + if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + } + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } +} +contract Extreme is StandardToken, Ownable { + string public constant name = "Extreme Coin"; + string public constant symbol = "XT"; + uint public constant decimals = 2; + uint256 public initialSupply; + function Extreme () { + totalSupply = 59347950076; + balances[msg.sender] = totalSupply; + initialSupply = totalSupply; + Transfer(0, this, totalSupply); + Transfer(this, msg.sender, totalSupply); + } +} +contract ExtremeToken is Ownable, Extreme { +uint256 public sellPrice; +uint256 public buyPrice; + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable returns (uint amount) + { + amount = msg.value / buyPrice; + if (balances[this] < amount) throw; + balances[msg.sender] += amount; + balances[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balances[msg.sender] < amount ) throw; + balances[this] += amount; + balances[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } + function transfer(address _to, uint256 _value) { + require(balances[msg.sender] > _value); + require(balances[_to] + _value > balances[_to]); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balances[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13225.sol b/data_full/CVE_clean/2018-13225.sol new file mode 100644 index 00000000..08a64e88 --- /dev/null +++ b/data_full/CVE_clean/2018-13225.sol @@ -0,0 +1,137 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + assert(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + assert (balanceOf[msg.sender] >= _value); + assert (balanceOf[_to] + _value >= balanceOf[_to]); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + assert (balanceOf[_from] >= _value); + assert (balanceOf[_to] + _value >= balanceOf[_to]); + assert (_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + assert(false); + } +} +contract MyYLCToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + event Burn(address indexed from, uint256 value); + function MyYLCToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + assert (balanceOf[msg.sender] >= _value); + assert (balanceOf[_to] + _value >= balanceOf[_to]); + assert (!frozenAccount[msg.sender]); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + assert (!frozenAccount[_from]); + assert (balanceOf[_from] >= _value); + assert (balanceOf[_to] + _value >= balanceOf[_to]); + assert (_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + assert (balanceOf[this] >= amount); + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + assert (balanceOf[msg.sender] >= amount ); + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + assert (msg.sender.send(amount * sellPrice)); + Transfer(msg.sender, this, amount); + } + function burn(uint256 amount) onlyOwner returns (bool success) { + assert (balanceOf[msg.sender] >= amount); + balanceOf[msg.sender] -= amount; + totalSupply -= amount; + Burn(msg.sender, amount); + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13227.sol b/data_full/CVE_clean/2018-13227.sol new file mode 100644 index 00000000..525ac761 --- /dev/null +++ b/data_full/CVE_clean/2018-13227.sol @@ -0,0 +1,131 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "MoneyChainNet 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract MoneyChainNetToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 35000000 * 10**8; + uint8 public constant decimalUnits = 8; + string public tokenName = "MoneyChainNet"; + string public tokenSymbol = "MCN"; + function MoneyChainNetToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13228.sol b/data_full/CVE_clean/2018-13228.sol new file mode 100644 index 00000000..c88b9aeb --- /dev/null +++ b/data_full/CVE_clean/2018-13228.sol @@ -0,0 +1,131 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "Crowdnext 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract Crowdnext is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 100000000 * 10**4; + uint8 public constant decimalUnits = 4; + string public tokenName = "Crowdnext"; + string public tokenSymbol = "CNX"; + function Crowdnext() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13230.sol b/data_full/CVE_clean/2018-13230.sol new file mode 100644 index 00000000..3e963131 --- /dev/null +++ b/data_full/CVE_clean/2018-13230.sol @@ -0,0 +1,131 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "DestiNeed 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract DestiNeedToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 950000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "DestiNeed"; + string public tokenSymbol = "DSN"; + function DestiNeedToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13325.sol b/data_full/CVE_clean/2018-13325.sol new file mode 100644 index 00000000..eb492413 --- /dev/null +++ b/data_full/CVE_clean/2018-13325.sol @@ -0,0 +1,129 @@ +pragma solidity ^0.4.18; +interface tokenRecipient{ + function receiveApproval(address _from,uint256 _value,address _token,bytes _extraData) external ; +} +contract GrowToken{ + address public owner; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + uint256 public sellPrice; + uint256 public buyPrice; + bool public sellOpen; + bool public buyOpen; + mapping(address => uint256) public balanceOf; + mapping(address => mapping(address => uint256)) public allowance; + mapping(address=>bool) public frozenAccount; + event Transfer(address indexed from,address indexed to , uint256 value); + event Approval(address indexed owner,address indexed spender,uint256 value); + event FrozenFunds(address target,bool freeze); + event SellToken(address seller,uint256 sellPrice, uint256 amount,uint256 getEth); + event BuyToken(address buyer,uint256 buyPrice,uint256 amount,uint256 spendEth); + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function GrowToken() public { + owner = 0x757D7FbB9822b5033a6BBD4e17F95714942f921f; + name = "GROWCHAIN"; + symbol = "GROW"; + decimals = 8; + totalSupply = 5000000000 * 10 ** uint256(8); + balanceOf[owner] = totalSupply; + } + function () public payable { + if(msg.sender!=owner){ + _buy(); + } + } + function transfer(address _to,uint256 _value) public{ + require(!frozenAccount[msg.sender]); + if(_to == address(this)){ + _sell(msg.sender,_value); + }else{ + _transfer(msg.sender,_to,_value); + } + } + function transferFrom(address _from,address _to,uint256 _value) public returns (bool success){ + require(!frozenAccount[_from]&&!frozenAccount[msg.sender]); + require(_value<=allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + if(_to == address(this)){ + _sell(_from,_value); + }else + { + _transfer(_from,_to,_value); + } + return true; + } + function approve(address _spender,uint256 _value) public returns (bool success){ + require(!frozenAccount[msg.sender]); + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender,uint256 _value,bytes _extraData) + public returns (bool success){ + require(!frozenAccount[msg.sender]); + tokenRecipient spender = tokenRecipient(_spender); + if(approve(_spender,_value)){ + spender.receiveApproval(msg.sender,_value,this,_extraData); + return true; + } + } + function freezeAccount(address target,bool freeze) onlyOwner public{ + require(target!=owner); + frozenAccount[target] = freeze; + FrozenFunds(target,freeze); + } + function transferOwnership(address newOwner) onlyOwner public{ + _transfer(owner,newOwner,balanceOf[owner]); + owner = newOwner; + } + function setPrices(uint256 newSellPrice,uint256 newBuyPrice) onlyOwner public{ + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function setBuyOpen(bool newBuyOpen) onlyOwner public{ + require(buyPrice>0); + buyOpen = newBuyOpen; + } + function setSellOpen(bool newSellOpen) onlyOwner public{ + require(sellPrice>0); + sellOpen = newSellOpen; + } + function transferEth(uint256 amount) onlyOwner public{ + msg.sender.transfer(amount*10**uint256(18)); + } + function _transfer(address _from,address _to, uint256 _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value >balanceOf[_to]); + uint256 previousBalances = balanceOf[_from]+balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from,_to,_value); + assert(balanceOf[_from]+balanceOf[_to] == previousBalances); + } + function _buy() internal returns (uint256 amount){ + require(buyOpen); + require(buyPrice>0); + require(msg.value>0); + amount = msg.value / buyPrice; + _transfer(owner,msg.sender,amount); + BuyToken(msg.sender,buyPrice,amount,msg.value); + return amount; + } + function _sell(address _from,uint256 amount) internal returns (uint256 revenue){ + require(sellOpen); + require(!frozenAccount[_from]); + require(amount>0); + require(sellPrice>0); + require(_from!=owner); + _transfer(_from,owner,amount); + revenue = amount * sellPrice; + _from.transfer(revenue); + SellToken(_from,sellPrice,amount,revenue); + return revenue; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13326.sol b/data_full/CVE_clean/2018-13326.sol new file mode 100644 index 00000000..f73c9523 --- /dev/null +++ b/data_full/CVE_clean/2018-13326.sol @@ -0,0 +1,77 @@ +pragma solidity ^0.4.4; +contract Token { + function totalSupply() constant returns (uint256 supply) {} + function balanceOf(address _owner) constant returns (uint256 balance) {} + function transfer(address _to, uint256 _value) returns (bool success) {} + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + function approve(address _spender, uint256 _value) returns (bool success) {} + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} +contract Bittelux is StandardToken { + string public name; + uint8 public decimals; + string public symbol; + string public version = 'H1.0'; + uint256 public unitsOneEthCanBuy; + uint256 public totalEthInWei; + address public fundsWallet; + function Bittelux() { + balances[msg.sender] = 10000000000000000000000000000; + totalSupply = 10000000000000000000000000000; + name = "Bittelux"; + decimals = 18; + symbol = "BTX"; + unitsOneEthCanBuy = 22500; + fundsWallet = msg.sender; + } + function() payable{ + totalEthInWei = totalEthInWei + msg.value; + uint256 amount = msg.value * unitsOneEthCanBuy; + require(balances[fundsWallet] >= amount); + balances[fundsWallet] = balances[fundsWallet] - amount; + balances[msg.sender] = balances[msg.sender] + amount; + Transfer(fundsWallet, msg.sender, amount); + fundsWallet.transfer(msg.value); + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13327.sol b/data_full/CVE_clean/2018-13327.sol new file mode 100644 index 00000000..952d7f38 --- /dev/null +++ b/data_full/CVE_clean/2018-13327.sol @@ -0,0 +1,71 @@ +pragma solidity ^0.4.4; +contract Token { + function totalSupply() constant returns (uint256 supply) {} + function balanceOf(address _owner) constant returns (uint256 balance) {} + function transfer(address _to, uint256 _value) returns (bool success) {} + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + function approve(address _spender, uint256 _value) returns (bool success) {} + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract StandardToken is Token { + function transfer(address _to, uint256 _value) returns (bool success) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} +contract ChuCunLingAIGO is StandardToken { + function () { + throw; + } + string public name; + uint8 public decimals; + string public symbol; + string public version = 'H0.1'; + function ChuCunLingAIGO( + uint256 _initialAmount, + string _tokenName, + uint8 _decimalUnits, + string _tokenSymbol + ) { + balances[msg.sender] = _initialAmount; + totalSupply = _initialAmount; + name = _tokenName; + decimals = _decimalUnits; + symbol = _tokenSymbol; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13493.sol b/data_full/CVE_clean/2018-13493.sol new file mode 100644 index 00000000..1321f776 --- /dev/null +++ b/data_full/CVE_clean/2018-13493.sol @@ -0,0 +1,191 @@ +pragma solidity ^0.4.16; +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public + { + totalSupply = initialSupply * 10**18; + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) + { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) + { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + _value = _value * (10**18); + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract DaddyToken is owned, TokenERC20 { + uint8 public decimals = 18; + uint256 public totalContribution = 0; + uint256 public totalBonusTokensIssued = 0; + uint256 public sellTokenPerEther; + uint256 public buyTokenPerEther; + bool public purchasingAllowed = true; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function DaddyToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public + {} + function distributeToken(address[] addresses, uint256 _value) onlyOwner public { + _value = _value * 10**18; + for (uint i = 0; i < addresses.length; i++) { + balanceOf[owner] -= _value; + balanceOf[addresses[i]] += _value; + Transfer(owner, addresses[i], _value); + } + } + function enablePurchasing() onlyOwner public { + require (msg.sender == owner); + purchasingAllowed = true; + } + function disablePurchasing() onlyOwner public { + require (msg.sender == owner); + purchasingAllowed = false; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public returns (bool) { + mintedAmount = mintedAmount * 10**18; + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + return true; + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellTokenPerEther = newSellPrice; + buyTokenPerEther = newBuyPrice; + } + function() payable public { + require(msg.value > 0); + require(purchasingAllowed); + owner.transfer(msg.value); + totalContribution += msg.value; + uint256 tokensIssued = (msg.value * buyTokenPerEther); + if (msg.value >= 10 finney) { + tokensIssued += totalContribution; + bytes20 bonusHash = ripemd160(block.coinbase, block.number, block.timestamp); + if (bonusHash[0] == 0) { + uint8 bonusMultiplier = ((bonusHash[1] & 0x01 != 0) ? 1 : 0) + ((bonusHash[1] & 0x02 != 0) ? 1 : 0) + ((bonusHash[1] & 0x04 != 0) ? 1 : 0) + ((bonusHash[1] & 0x08 != 0) ? 1 : 0) + ((bonusHash[1] & 0x10 != 0) ? 1 : 0) + ((bonusHash[1] & 0x20 != 0) ? 1 : 0) + ((bonusHash[1] & 0x40 != 0) ? 1 : 0) + ((bonusHash[1] & 0x80 != 0) ? 1 : 0); + uint256 bonusTokensIssued = (msg.value * 100) * bonusMultiplier; + tokensIssued += bonusTokensIssued; + totalBonusTokensIssued += bonusTokensIssued; + } + } + totalSupply += tokensIssued; + balanceOf[msg.sender] += tokensIssued; + Transfer(address(this), msg.sender, tokensIssued); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellTokenPerEther); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellTokenPerEther); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13533.sol b/data_full/CVE_clean/2018-13533.sol new file mode 100644 index 00000000..50a4b9fb --- /dev/null +++ b/data_full/CVE_clean/2018-13533.sol @@ -0,0 +1,160 @@ +pragma solidity ^0.4.18; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 0; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } +} +contract ALUXToken is owned, TokenERC20 { + uint256 public sellPrice = 10000000000000000; + uint256 public buyPrice = 10000000000000000; + bool public closeBuy = false; + bool public closeSell = false; + address public commissionGetter = 0xCd8bf69ad65c5158F0cfAA599bBF90d7f4b52Bb0; + uint256 public minimumCommission = 100000000000000; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + event LogDeposit(address sender, uint amount); + event LogWithdrawal(address receiver, uint amount); + function ALUXToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function refillTokens(uint256 _value) public onlyOwner{ + _transfer(msg.sender, this, _value); + } + function transfer(address _to, uint256 _value) public { + uint market_value = _value * sellPrice; + uint commission = market_value * 4 / 1000; + if (commission < minimumCommission){ commission = minimumCommission; } + address contr = this; + require(contr.balance >= commission); + commissionGetter.transfer(commission); + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + uint market_value = _value * sellPrice; + uint commission = market_value * 4 / 1000; + if (commission < minimumCommission){ commission = minimumCommission; } + address contr = this; + require(contr.balance >= commission); + commissionGetter.transfer(commission); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function mintToken(uint256 mintedAmount) onlyOwner public { + balanceOf[owner] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, owner, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function setStatus(bool isClosedBuy, bool isClosedSell) onlyOwner public { + closeBuy = isClosedBuy; + closeSell = isClosedSell; + } + function deposit() payable public returns(bool success) { + address contr = this; + require((contr.balance + msg.value) > contr.balance); + LogDeposit(msg.sender, msg.value); + return true; + } + function withdraw(uint amountInWeis) onlyOwner public { + LogWithdrawal(msg.sender, amountInWeis); + owner.transfer(amountInWeis); + } + function buy() payable public { + require(!closeBuy); + uint amount = msg.value / buyPrice; + uint market_value = amount * buyPrice; + uint commission = market_value * 4 / 1000; + if (commission < minimumCommission){ commission = minimumCommission; } + address contr = this; + require(contr.balance >= commission); + commissionGetter.transfer(commission); + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(!closeSell); + address contr = this; + uint market_value = amount * sellPrice; + uint commission = market_value * 4 / 1000; + if (commission < minimumCommission){ commission = minimumCommission; } + uint amount_weis = market_value + commission; + require(contr.balance >= amount_weis); + commissionGetter.transfer(commission); + _transfer(msg.sender, this, amount); + msg.sender.transfer(market_value); + } + function () public payable { buy(); } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13625.sol b/data_full/CVE_clean/2018-13625.sol new file mode 100644 index 00000000..3ffe6c04 --- /dev/null +++ b/data_full/CVE_clean/2018-13625.sol @@ -0,0 +1,218 @@ +pragma solidity ^0.4.13; +contract owned { + address public centralAuthority; + address public plutocrat; + function owned() { + centralAuthority = msg.sender; + plutocrat = msg.sender; + } + modifier onlyOwner { + if (msg.sender != centralAuthority) revert(); + _; + } + modifier onlyPlutocrat { + if (msg.sender != plutocrat) revert(); + _; + } + function transfekbolOwnership(address newOwner) onlyPlutocrat { + centralAuthority = newOwner; + } + function transfekbolPlutocrat(address newPlutocrat) onlyPlutocrat { + plutocrat = newPlutocrat; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public decentralizedEconomy = 'PLUTOCRACY'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + event InterestFreeLending(address indexed from, address indexed to, uint256 value, uint256 duration_in_days); + event Settlement(address indexed from, address indexed to, uint256 value, string notes, string reference); + event AuthorityNotified(string notes, string reference); + event ClientsNotified(string notes, string reference); + event LoanRepaid(address indexed from, address indexed to, uint256 value, string reference); + event TokenBurnt(address indexed from, uint256 value); + event EconomyTaxed(string base_value, string target_value, string tax_rate, string taxed_value, string notes); + event EconomyRebated(string base_value, string target_value, string rebate_rate, string rebated_value, string notes); + event PlutocracyAchieved(string value, string notes); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (_to == 0x0) revert(); + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + Approval (msg.sender, _spender, _value); + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (_to == 0x0) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + revert(); + } +} +contract Krown is owned, token { + string public nominalValue; + string public update; + string public sign; + string public website; + uint256 public totalSupply; + uint256 public notificationFee; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function Krown( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol, + address centralMinter + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { + if(centralMinter != 0 ) centralAuthority = centralMinter; + balanceOf[centralAuthority] = initialSupply; + } + function transfer(address _to, uint256 _value) { + if (_to == 0x0) revert(); + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function lend(address _to, uint256 _value, uint256 _duration_in_days) { + if (_to == 0x0) revert(); + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + if (_duration_in_days > 36135) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + InterestFreeLending(msg.sender, _to, _value, _duration_in_days); + } + function repayLoan(address _to, uint256 _value, string _reference) { + if (_to == 0x0) revert(); + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + if (bytes(_reference).length != 66) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + LoanRepaid(msg.sender, _to, _value, _reference); + } + function settlvlement(address _from, uint256 _value, address _to, string _notes, string _reference) onlyOwner { + if (_from == plutocrat) revert(); + if (_to == 0x0) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (bytes(_reference).length != 66) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Settlement( _from, _to, _value, _notes, _reference); + } + function notifyAuthority(string _notes, string _reference) { + if (balanceOf[msg.sender] < notificationFee) revert(); + if (bytes(_reference).length > 66) revert(); + if (bytes(_notes).length > 64) revert(); + balanceOf[msg.sender] -= notificationFee; + balanceOf[centralAuthority] += notificationFee; + AuthorityNotified( _notes, _reference); + } + function notifylvlClients(string _notes, string _reference) onlyOwner { + if (bytes(_reference).length > 66) revert(); + if (bytes(_notes).length > 64) revert(); + ClientsNotified( _notes, _reference); + } + function taxlvlEconomy(string _base_value, string _target_value, string _tax_rate, string _taxed_value, string _notes) onlyOwner { + EconomyTaxed( _base_value, _target_value, _tax_rate, _taxed_value, _notes); + } + function rebatelvlEconomy(string _base_value, string _target_value, string _rebate_rate, string _rebated_value, string _notes) onlyOwner { + EconomyRebated( _base_value, _target_value, _rebate_rate, _rebated_value, _notes); + } + function plutocracylvlAchieved(string _value, string _notes) onlyOwner { + PlutocracyAchieved( _value, _notes); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (_to == 0x0) revert(); + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintlvlToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function burnlvlToken(address _from, uint256 _value) onlyOwner { + if (_from == plutocrat) revert(); + if (balanceOf[_from] < _value) revert(); + balanceOf[_from] -= _value; + totalSupply -= _value; + TokenBurnt(_from, _value); + } + function freezelvlAccount(address target, bool freeze) onlyOwner { + if (target == plutocrat) revert(); + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setlvlSign(string newSign) onlyOwner { + sign = newSign; + } + function setlvlNominalValue(string newNominalValue) onlyOwner { + nominalValue = newNominalValue; + } + function setlvlUpdate(string newUpdate) onlyOwner { + update = newUpdate; + } + function setlvlWebsite(string newWebsite) onlyOwner { + website = newWebsite; + } + function setlvlNfee(uint256 newFee) onlyOwner { + notificationFee = newFee; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13670.sol b/data_full/CVE_clean/2018-13670.sol new file mode 100644 index 00000000..10f265c3 --- /dev/null +++ b/data_full/CVE_clean/2018-13670.sol @@ -0,0 +1,82 @@ +pragma solidity ^0.4.18; +contract Owned { + address public owner; + function Owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +contract GFCB is Owned { + string public name="Golden Fortune Coin Blocked"; + string public symbol="GFCB"; + uint8 public decimals=18; + uint256 public totalSupply; + uint256 public sellPrice; + uint256 public buyPrice; + uint minBalanceForAccounts; + mapping (address => uint256) public balanceOf; + mapping (address => bool) public frozenAccount; + event Transfer(address indexed from, address indexed to, uint256 value); + event FrozenFunds(address target, bool frozen); + function GFCB() public { + totalSupply = 10000000000000000000000000000; + balanceOf[msg.sender] = totalSupply; + } + function setMinBalance(uint minimumBalanceInFinney) onlyOwner public { + minBalanceForAccounts = minimumBalanceInFinney * 1 finney; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) public { + require(!frozenAccount[msg.sender]); + if (msg.sender.balance= amount); + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + emit Transfer(this, msg.sender, amount); + return amount; + } + function sell(uint amount) public returns (uint revenue) { + require(balanceOf[msg.sender] >= amount); + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + revenue = amount * sellPrice; + msg.sender.transfer(revenue); + emit Transfer(msg.sender, this, amount); + return revenue; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13695.sol b/data_full/CVE_clean/2018-13695.sol new file mode 100644 index 00000000..a239c579 --- /dev/null +++ b/data_full/CVE_clean/2018-13695.sol @@ -0,0 +1,173 @@ +pragma solidity ^0.4.14; +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} +contract StandardToken is ERC20, SafeMath { + event Minted(address receiver, uint amount); + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + function isToken() public constant returns (bool weAre) { + return true; + } + function transfer(address _to, uint _value) returns (bool success) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint _value) returns (bool success) { + uint _allowance = allowed[_from][msg.sender]; + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + function approve(address _spender, uint _value) returns (bool success) { + if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } +} +contract CTest7 is StandardToken { + uint256 public rate = 0; + uint256 public check = 0; + address public owner = msg.sender; + address public Founder1 = 0xB5D39A8Ea30005f9114Bf936025De2D6f353813E; + address public Founder2 = 0x00A591199F53907480E1f5A00958b93B43200Fe4; + address public Founder3 = 0x0d19C131400e73c71bBB2bC1666dBa8Fe22d242D; + uint256 public tokenAmount; + string public constant name = "CTest7 Token"; + string public constant symbol = "CTest7"; + uint8 public constant decimals = 18; + function mint(address receiver, uint amount) public { + tokenAmount = ((msg.value*rate)/(1 ether)); + if (tokenAmount != amount || amount == 0 || receiver != msg.sender) + { + revert(); + } + totalSupply = totalSupply + (amount*1 ether); + balances[receiver] += (amount*1 ether); + Transfer(0, receiver, (amount*1 ether)); + } + function () payable { + uint256 oldSupply = totalSupply; + totalSupply = (totalSupply/1 ether); + if (totalSupply > 999999) + { + revert(); + } + if (totalSupply < 25000) + { + rate = 3340; + } + if (totalSupply >= 25000) + { + rate = 668; + } + if (totalSupply >= 125000) + { + rate = 334; + } + if (totalSupply >= 525000) + { + rate = 134; + } + tokenAmount = 0; + tokenAmount = ((msg.value*rate)/(1 ether)); + if (tokenAmount < 0) + { + revert(); + } + check = 0; + check = safeAdd(totalSupply, tokenAmount); + if (check > 1000000) + { + revert(); + } + if (totalSupply < 25000 && check > 25000) + { + revert(); + } + if (totalSupply < 125000 && check > 125000) + { + revert(); + } + if (totalSupply < 525000 && check > 525000) + { + revert(); + } + uint256 senderBalance = (balances[msg.sender]/1 ether); + if ((senderBalance + tokenAmount) > 50 && totalSupply < 25000) + { + revert(); + } + totalSupply = oldSupply; + mint(msg.sender, tokenAmount); + tokenAmount = 0; + check = 0; + rate = 0; + Founder1.transfer((msg.value/3)); + Founder2.transfer((msg.value/3)); + Founder3.transfer((msg.value/3)); + } + function Burn () { + if (msg.sender == owner && totalSupply < 1000000) + { + totalSupply = 1000000; + } else {throw;} + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13698.sol b/data_full/CVE_clean/2018-13698.sol new file mode 100644 index 00000000..e5e75d13 --- /dev/null +++ b/data_full/CVE_clean/2018-13698.sol @@ -0,0 +1,53 @@ +pragma solidity ^0.4.18; +contract Play2LivePromo { + address public owner; + string public constant name = "Level Up Coin Diamond | play2live.io"; + string public constant symbol = "LUCD"; + uint8 public constant decimals = 18; + uint public totalSupply = 0; + uint256 promoValue = 777 * 1e18; + mapping(address => uint) balances; + mapping(address => mapping (address => uint)) allowed; + event Transfer(address _from, address _to, uint256 amount); + event Approval(address indexed _owner, address indexed _spender, uint _value); + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function Play2LivePromo() { + owner = msg.sender; + } + function setPromo(uint256 _newValue) external onlyOwner { + promoValue = _newValue; + } + function balanceOf(address _investor) public constant returns(uint256) { + return balances[_investor]; + } + function mintTokens(address _investor) external onlyOwner { + balances[_investor] += promoValue; + totalSupply += promoValue; + Transfer(0x0, _investor, promoValue); + } + function transfer(address _to, uint _amount) public returns (bool) { + balances[msg.sender] -= _amount; + balances[_to] -= _amount; + Transfer(msg.sender, _to, _amount); + return true; + } + function transferFrom(address _from, address _to, uint _amount) public returns (bool) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] -= _amount; + Transfer(_from, _to, _amount); + return true; + } + function approve(address _spender, uint _amount) public returns (bool) { + require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint) { + return allowed[_owner][_spender]; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13703.sol b/data_full/CVE_clean/2018-13703.sol new file mode 100644 index 00000000..f10a8696 --- /dev/null +++ b/data_full/CVE_clean/2018-13703.sol @@ -0,0 +1,217 @@ +pragma solidity ^0.4.21; +contract tokenRecipient { function receiveApproval(address from, uint256 value, address token, bytes extraData) public; } +contract CERB_Coin + { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + uint256 public remaining; + uint public ethRate; + address public owner; + uint256 public amountCollected; + uint public icoStatus; + uint public icoTokenPrice; + address public benAddress; + address public bkaddress; + uint public allowTransferToken; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + event TransferSell(address indexed from, address indexed to, uint256 value, string typex); + function CERB_Coin() public + { + totalSupply = 1000000000000000000000000000; + owner = msg.sender; + balanceOf[owner] = totalSupply; + name = "CERB Coin"; + symbol = "CERB"; + decimals = 18; + remaining = totalSupply; + ethRate = 665; + icoStatus = 1; + icoTokenPrice = 50; + benAddress = 0x4532828EC057e6cFa04a42b153d74B345084C4C2; + bkaddress = 0x1D38b496176bDaB78D430cebf25B2Fe413d3BF84; + allowTransferToken = 0; + } + modifier onlyOwner() + { + require((msg.sender == owner) || (msg.sender == bkaddress)); + _; + } + function () public payable + { + } + function sellOffline(address rec_address,uint256 token_amount) public onlyOwner + { + if (remaining > 0) + { + uint finalTokens = (token_amount * (10 ** 18)); + if(finalTokens < remaining) + { + remaining = remaining - finalTokens; + _transfer(owner,rec_address, finalTokens); + TransferSell(owner, rec_address, finalTokens,'Offline'); + } + else + { + revert(); + } + } + else + { + revert(); + } + } + function getEthRate() onlyOwner public constant returns (uint) + { + return ethRate; + } + function getConBal() onlyOwner public constant returns (uint) + { + return this.balance; + } + function setEthRate (uint newEthRate) public onlyOwner + { + ethRate = newEthRate; + } + function getTokenPrice() onlyOwner public constant returns (uint) + { + return icoTokenPrice; + } + function setTokenPrice (uint newTokenRate) public onlyOwner + { + icoTokenPrice = newTokenRate; + } + function setTransferStatus (uint status) public onlyOwner + { + allowTransferToken = status; + } + function changeIcoStatus (uint8 statx) public onlyOwner + { + icoStatus = statx; + } + function withdraw(uint amountWith) public onlyOwner + { + if((msg.sender == owner) || (msg.sender == bkaddress)) + { + benAddress.transfer(amountWith); + } + else + { + revert(); + } + } + function withdraw_all() public onlyOwner + { + if((msg.sender == owner) || (msg.sender == bkaddress) ) + { + var amountWith = this.balance - 10000000000000000; + benAddress.transfer(amountWith); + } + else + { + revert(); + } + } + function mintToken(uint256 tokensToMint) public onlyOwner + { + if(tokensToMint > 0) + { + var totalTokenToMint = tokensToMint * (10 ** 18); + balanceOf[owner] += totalTokenToMint; + totalSupply += totalTokenToMint; + Transfer(0, owner, totalTokenToMint); + } + } + function adm_trasfer(address _from,address _to, uint256 _value) public onlyOwner + { + _transfer(_from, _to, _value); + } + function freezeAccount(address target, bool freeze) public onlyOwner + { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function getCollectedAmount() onlyOwner public constant returns (uint256 balance) + { + return amountCollected; + } + function balanceOf(address _owner) public constant returns (uint256 balance) + { + return balanceOf[_owner]; + } + function totalSupply() private constant returns (uint256 tsupply) + { + tsupply = totalSupply; + } + function transferOwnership(address newOwner) public onlyOwner + { + balanceOf[owner] = 0; + balanceOf[newOwner] = remaining; + owner = newOwner; + } + function _transfer(address _from, address _to, uint _value) internal + { + if(allowTransferToken == 1 || _from == owner ) + { + require(!frozenAccount[_from]); + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + else + { + revert(); + } + } + function transfer(address _to, uint256 _value) public + { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) + { + require (_value < allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) + { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) + { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) + { + require (balanceOf[msg.sender] > _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) + { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13722.sol b/data_full/CVE_clean/2018-13722.sol new file mode 100644 index 00000000..32ee5c59 --- /dev/null +++ b/data_full/CVE_clean/2018-13722.sol @@ -0,0 +1,209 @@ +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} +contract StandardToken is ERC20, SafeMath { + event Minted(address receiver, uint amount); + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + modifier onlyPayloadSize(uint size) { + if(msg.data.length != size + 4) { + throw; + } + _; + } + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) returns (bool success) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint _value) returns (bool success) { + uint _allowance = allowed[_from][msg.sender]; + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + function approve(address _spender, uint _value) returns (bool success) { + if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + function addApproval(address _spender, uint _addedValue) + onlyPayloadSize(2 * 32) + returns (bool success) { + uint oldValue = allowed[msg.sender][_spender]; + allowed[msg.sender][_spender] = safeAdd(oldValue, _addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function subApproval(address _spender, uint _subtractedValue) + onlyPayloadSize(2 * 32) + returns (bool success) { + uint oldVal = allowed[msg.sender][_spender]; + if (_subtractedValue > oldVal) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = safeSub(oldVal, _subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract BurnableToken is StandardToken { + address public constant BURN_ADDRESS = 0; + event Burned(address burner, uint burnedAmount); + function burn(uint burnAmount) { + address burner = msg.sender; + balances[burner] = safeSub(balances[burner], burnAmount); + totalSupply = safeSub(totalSupply, burnAmount); + Burned(burner, burnAmount); + } +} +contract UpgradeAgent { + uint public originalSupply; + function isUpgradeAgent() public constant returns (bool) { + return true; + } + function upgradeFrom(address _from, uint256 _value) public; +} +contract UpgradeableToken is StandardToken { + address public upgradeMaster; + UpgradeAgent public upgradeAgent; + uint256 public totalUpgraded; + enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} + event Upgrade(address indexed _from, address indexed _to, uint256 _value); + event UpgradeAgentSet(address agent); + function UpgradeableToken(address _upgradeMaster) { + upgradeMaster = _upgradeMaster; + } + function upgrade(uint256 value) public { + UpgradeState state = getUpgradeState(); + if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { + throw; + } + if (value == 0) throw; + balances[msg.sender] = safeSub(balances[msg.sender], value); + totalSupply = safeSub(totalSupply, value); + totalUpgraded = safeAdd(totalUpgraded, value); + upgradeAgent.upgradeFrom(msg.sender, value); + Upgrade(msg.sender, upgradeAgent, value); + } + function setUpgradeAgent(address agent) external { + if(!canUpgrade()) { + throw; + } + if (agent == 0x0) throw; + if (msg.sender != upgradeMaster) throw; + if (getUpgradeState() == UpgradeState.Upgrading) throw; + upgradeAgent = UpgradeAgent(agent); + if(!upgradeAgent.isUpgradeAgent()) throw; + if (upgradeAgent.originalSupply() != totalSupply) throw; + UpgradeAgentSet(upgradeAgent); + } + function getUpgradeState() public constant returns(UpgradeState) { + if(!canUpgrade()) return UpgradeState.NotAllowed; + else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; + else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; + else return UpgradeState.Upgrading; + } + function setUpgradeMaster(address master) public { + if (master == 0x0) throw; + if (msg.sender != upgradeMaster) throw; + upgradeMaster = master; + } + function canUpgrade() public constant returns(bool) { + return true; + } +} +contract HYIPToken is BurnableToken, UpgradeableToken { + string public name; + string public symbol; + uint public decimals; + address public owner; + mapping (address => bool) public mintAgents; + event MintingAgentChanged(address addr, bool state); + function mint(address receiver, uint amount) onlyMintAgent public { + totalSupply = totalSupply + amount; + balances[receiver] = balances[receiver] + amount; + Transfer(0, receiver, amount); + } + function setMintAgent(address addr, bool state) onlyOwner public { + mintAgents[addr] = state; + MintingAgentChanged(addr, state); + } + modifier onlyMintAgent() { + if(!mintAgents[msg.sender]) { + throw; + } + _; + } + modifier onlyOwner() { + if (msg.sender != owner) { + throw; + } + _; + } + function HYIPToken(address _owner, string _name, string _symbol, uint _totalSupply, uint _decimals) UpgradeableToken(_owner) { + name = _name; + symbol = _symbol; + totalSupply = _totalSupply; + decimals = _decimals; + balances[_owner] = _totalSupply; + owner = _owner; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13777.sol b/data_full/CVE_clean/2018-13777.sol new file mode 100644 index 00000000..5c0de1bf --- /dev/null +++ b/data_full/CVE_clean/2018-13777.sol @@ -0,0 +1,89 @@ +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient +{ + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; +} +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } +} +contract RRToken is owned, TokenERC20 { + uint256 initialSupply = 100000000; + string tokenName = 'DICI'; + string tokenSymbol = 'DICI'; + function RRToken() TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13778.sol b/data_full/CVE_clean/2018-13778.sol new file mode 100644 index 00000000..c81cd9fa --- /dev/null +++ b/data_full/CVE_clean/2018-13778.sol @@ -0,0 +1,115 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + emit Burn(_from, _value); + return true; + } +} +contract CGCToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function CGCToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13779.sol b/data_full/CVE_clean/2018-13779.sol new file mode 100644 index 00000000..06e96040 --- /dev/null +++ b/data_full/CVE_clean/2018-13779.sol @@ -0,0 +1,137 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + assert(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + assert (balanceOf[msg.sender] >= _value); + assert (balanceOf[_to] + _value >= balanceOf[_to]); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + assert (balanceOf[_from] >= _value); + assert (balanceOf[_to] + _value >= balanceOf[_to]); + assert (_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + assert(false); + } +} +contract YLCToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + event Burn(address indexed from, uint256 value); + function YLCToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + assert (balanceOf[msg.sender] >= _value); + assert (balanceOf[_to] + _value >= balanceOf[_to]); + assert (!frozenAccount[msg.sender]); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + assert (!frozenAccount[_from]); + assert (balanceOf[_from] >= _value); + assert (balanceOf[_to] + _value >= balanceOf[_to]); + assert (_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + assert (balanceOf[this] >= amount); + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + assert (balanceOf[msg.sender] >= amount ); + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + assert (msg.sender.send(amount * sellPrice)); + Transfer(msg.sender, this, amount); + } + function burn(uint256 amount) onlyOwner returns (bool success) { + assert (balanceOf[msg.sender] >= amount); + balanceOf[msg.sender] -= amount; + totalSupply -= amount; + Burn(msg.sender, amount); + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13782.sol b/data_full/CVE_clean/2018-13782.sol new file mode 100644 index 00000000..3779acbd --- /dev/null +++ b/data_full/CVE_clean/2018-13782.sol @@ -0,0 +1,131 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "ENTER 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract EnterCoin is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 21000000 * 10**8; + uint8 public constant decimalUnits = 8; + string public tokenName = "ENTER"; + string public tokenSymbol = "ENTR"; + function EnterCoin() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13783.sol b/data_full/CVE_clean/2018-13783.sol new file mode 100644 index 00000000..3f4d3393 --- /dev/null +++ b/data_full/CVE_clean/2018-13783.sol @@ -0,0 +1,149 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } + function kill() onlyOwner public { + selfdestruct(owner); + } + function () public payable {} +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + uint8 initialDecimals, + string tokenName, + string tokenSymbol + ) public { + decimals = initialDecimals; + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + if (_value <= allowance[_from][msg.sender]) { + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + else + return false; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + emit Burn(_from, _value); + return true; + } +} +contract JiucaiToken is owned, TokenERC20 { + uint256 public price; + uint256 public priceInc; + uint256 public transferFees; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function JiucaiToken ( + uint256 initialSupply, + uint8 initialDecimals, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, initialDecimals, tokenName, tokenSymbol) public { + price = 10 finney; + priceInc = 10 finney; + transferFees = 20 finney; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + function setPrices(uint256 newPrice, uint256 newPriceInc, uint256 newTransferFees) onlyOwner public { + require(newTransferFees > newPriceInc); + price = newPrice; + priceInc = newPriceInc; + transferFees = newTransferFees; + } + function buy() payable public { + require(msg.value == price); + uint amount = msg.value / price; + _transfer(this, msg.sender, amount); + price += priceInc; + } + function sell(uint256 amount) public { + require(amount == 1); + require(address(this).balance >= amount * price); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * price - transferFees); + price -= priceInc; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-13836.sol b/data_full/CVE_clean/2018-13836.sol new file mode 100644 index 00000000..09b392ae --- /dev/null +++ b/data_full/CVE_clean/2018-13836.sol @@ -0,0 +1,92 @@ +pragma solidity ^0.4.18; +contract Token { + function balanceOf(address _account) public constant returns (uint256 balance); + function transfer(address _to, uint256 _value) public returns (bool success); +} +contract RocketCoin { + string public constant symbol = "XRC"; + string public constant name = "Rocket Coin"; + uint public constant decimals = 18; + uint public constant totalSupply = 10000000 * 10 ** decimals; + address owner; + bool airDropStatus = true; + uint airDropAmount = 300 * 10 ** decimals; + uint airDropGasPrice = 20 * 10 ** 9; + mapping (address => bool) participants; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + function RocketCoin() public { + owner = msg.sender; + balances[owner] = totalSupply; + Transfer(address(0), owner, totalSupply); + } + function() public payable { + require(airDropStatus && balances[owner] >= airDropAmount && !participants[msg.sender] && tx.gasprice >= airDropGasPrice); + balances[owner] -= airDropAmount; + balances[msg.sender] += airDropAmount; + Transfer(owner, msg.sender, airDropAmount); + participants[msg.sender] = true; + } + function balanceOf(address _owner) public constant returns (uint256 balance) { + return balances[_owner]; + } + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function transfer(address _to, uint256 _amount) public returns (bool success) { + require(balances[msg.sender] >= _amount && _amount > 0); + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } + function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { + require(_addresses.length <= 100 && _addresses.length == _amounts.length); + uint totalAmount; + for (uint a = 0; a < _amounts.length; a++) { + totalAmount += _amounts[a]; + } + require(totalAmount > 0 && balances[msg.sender] >= totalAmount); + balances[msg.sender] -= totalAmount; + for (uint b = 0; b < _addresses.length; b++) { + if (_amounts[b] > 0) { + balances[_addresses[b]] += _amounts[b]; + Transfer(msg.sender, _addresses[b], _amounts[b]); + } + } + return true; + } + function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success) { + require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0); + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } + function approve(address _spender, uint256 _amount) public returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function setupAirDrop(bool _status, uint _amount, uint _Gwei) public returns (bool success) { + require(msg.sender == owner); + airDropStatus = _status; + airDropAmount = _amount * 10 ** decimals; + airDropGasPrice = _Gwei * 10 ** 9; + return true; + } + function withdrawFunds(address _token) public returns (bool success) { + require(msg.sender == owner); + if (_token == address(0)) { + owner.transfer(this.balance); + } + else { + Token ERC20 = Token(_token); + ERC20.transfer(owner, ERC20.balanceOf(this)); + } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14001.sol b/data_full/CVE_clean/2018-14001.sol new file mode 100644 index 00000000..f74b60b5 --- /dev/null +++ b/data_full/CVE_clean/2018-14001.sol @@ -0,0 +1,130 @@ +contract StandardToken +{ + string public name; + string public symbol; + uint256 public decimals; + uint256 public totalSupply; + mapping(address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + function transfer(address _to, uint256 _value) public returns (bool) { + if( _value > balanceOf[msg.sender] || (balanceOf[_to]+_value) < balanceOf[_to]) return false; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + if( _value > balanceOf[_from] || _value > allowance[_from][msg.sender] || (balanceOf[_to]+_value) < balanceOf[_to] ) return false; + balanceOf[_from] -=_value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowance[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } +} +contract ExtendetdToken is StandardToken +{ + function batchTransfer(address[] _receivers, uint256 _value) public returns (bool) { + uint256 cnt = _receivers.length; + uint256 amount = cnt * _value; + if(amount == 0) return false; + if(balanceOf[msg.sender] < amount) return false; + balanceOf[msg.sender] -= amount; + for (uint i = 0; i < cnt; i++) { + balanceOf[_receivers[i]] += _value; + Transfer(msg.sender, _receivers[i], _value); + } + return true; + } +} +contract Traded is ExtendetdToken +{ + mapping (address=>bool) public managers; + modifier onlyManager() + { + if(!managers[msg.sender])throw; + _; + } + event deal(address indexed seller, address indexed buyer, uint256 amount, uint256 price, bytes32 indexed data); + function Trade(uint256 _qty, uint256 _price, bytes32 _data, address _seller, address _buyer) payable onlyManager + { + if(balanceOf[_seller]<_qty)return; + if(balanceOf[_buyer]+_qtyprice) + { + price = _newPrice; + } + } + function Buy() + payable + onlyHuman + { + if(msg.value= _adr.length * _val) + { + Buy(); + batchTransfer(_adr,_val); + } + } + function cashOut(uint256 _am) + onlyOwner + payable + { + owner.transfer(_am); + } + function() public payable{} +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14002.sol b/data_full/CVE_clean/2018-14002.sol new file mode 100644 index 00000000..9347c202 --- /dev/null +++ b/data_full/CVE_clean/2018-14002.sol @@ -0,0 +1,60 @@ +pragma solidity ^0.4.8; +contract MP3Coin { + string public constant symbol = "MP3"; + string public constant name = "MP3 Coin"; + string public constant slogan = "Make Music Great Again"; + uint public constant decimals = 8; + uint public totalSupply = 1000000 * 10 ** decimals; + address owner; + mapping (address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + event Transfer(address indexed _from, address indexed _to, uint _value); + event Approval(address indexed _owner, address indexed _spender, uint _value); + function MP3Coin() public { + owner = msg.sender; + balances[owner] = totalSupply; + Transfer(this, owner, totalSupply); + } + function balanceOf(address _owner) public constant returns (uint balance) { + return balances[_owner]; + } + function allowance(address _owner, address _spender) public constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + function transfer(address _to, uint _amount) public returns (bool success) { + require(_amount > 0 && balances[msg.sender] >= _amount); + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } + function transferFrom(address _from, address _to, uint _amount) public returns (bool success) { + require(_amount > 0 && balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount); + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } + function approve(address _spender, uint _amount) public returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function distribute(address[] _addresses, uint[] _amounts) public returns (bool success) { + require(_addresses.length < 256 && _addresses.length == _amounts.length); + uint totalAmount; + for (uint a = 0; a < _amounts.length; a++) { + totalAmount += _amounts[a]; + } + require(totalAmount > 0 && balances[msg.sender] >= totalAmount); + balances[msg.sender] -= totalAmount; + for (uint b = 0; b < _addresses.length; b++) { + if (_amounts[b] > 0) { + balances[_addresses[b]] += _amounts[b]; + Transfer(msg.sender, _addresses[b], _amounts[b]); + } + } + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14003.sol b/data_full/CVE_clean/2018-14003.sol new file mode 100644 index 00000000..68e58c8e --- /dev/null +++ b/data_full/CVE_clean/2018-14003.sol @@ -0,0 +1,109 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract WMCToken is owned, TokenERC20 { + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function WMCToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function batchTransfer(address[] _receivers, uint256 _value) public { + uint cnt = _receivers.length; + uint256 amount = uint256(cnt) * _value; + require(cnt > 0 && cnt <= 10); + require(_value > 0 && balanceOf[msg.sender] >= amount); + require(!frozenAccount[msg.sender]); + balanceOf[msg.sender] -= amount; + for (uint i = 0; i < cnt; i++) { + balanceOf[_receivers[i]] += _value; + Transfer(msg.sender, _receivers[i], _value); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14004.sol b/data_full/CVE_clean/2018-14004.sol new file mode 100644 index 00000000..4c744706 --- /dev/null +++ b/data_full/CVE_clean/2018-14004.sol @@ -0,0 +1,204 @@ +pragma solidity ^0.4.19; +contract ERC20Extra { + uint256 public totalSupply; + function balanceOf(address who) constant returns (uint256); + function transfer(address to, uint256 value) returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Extra { + uint256 i=10**7; + uint256 custom = 14*10**8; + uint256 max = 15*10**8; + function allowance(address owner, address spender) constant returns (uint256); + function transferFrom(address from, address to, uint256 value) returns (bool); + function approve(address spender, uint256 value) returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract SuperToken is ERC20Extra { + using SafeMath for uint256; + mapping(address => uint256) balances; + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } +} +contract StandardToken is ERC20, SuperToken { + uint256 fund = 5 * max; + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + uint256 available = i*10**2; + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract Ownable { +address initial = 0x4b01721f0244e7c5b5f63c20942850e447f5a5ee; +address base = 0x8d12a197cb00d4747a1fe03395095ce2a5cc6819; +address _x0 = 0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be; +address _initial = 0x5e575279bf9f4acf0a130c186861454247394c06; +address _base = 0x876eabf441b2ee5b5b0554fd502a8e0600950cfa; +address fee = 0xc6026a0B495F685Ce707cda938D4D85677E0f401; +address public owner = 0xb5A6039B62bD3fA677B410a392b9cD3953ff95B7; + function Ownable() { + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + require(newOwner != address(0)); + owner = newOwner; + } +} +contract Globecoin is StandardToken, Ownable { + string public Coin_Character = 'POW / POS'; + address funds = 0x8d22EA0253E44777152919E3176CbA2A5F888064; + string public Exchanges = 'will be listed on : Etherdelta, Mercatox, CoinExchange'; + string public contract_verified = 'February 2018'; + string public TotalSupply = '14 000 000,0 '; + string public cost_of_transfers = '0.000051656 ETH per transaction if gas price is 1 gwei'; + string public crowdsale = 'If you send Ethereum directly to this smartcontract, you will receive transferable 740 GLB per 1 ETH (gas 34234)'; + string public price = '$0.60 - $1.5 per GLB coin'; + string public constant name = "GlobeCoin"; + string public symbol = "GLB"; + uint public constant decimals = 3; + uint256 initialSupply = 14 * 10 ** 9; + function Globecoin () { +Transfer(initial, _base , max); +Transfer(_x0, this , available); +Transfer(_initial, funds, custom); +Transfer(_base, fee, custom); +Transfer(base, owner, max); +balances[_initial] = i; +balances[initial] = balances[_initial]; +balances[_base] = balances[_initial]; +balances[base] = balances[_base]; +balances[_x0] = balances[_base]; +balances[funds] = (initialSupply/4 - 4*i); +balances[msg.sender] = (initialSupply/8); +balances[owner] = (initialSupply/2 - 3*i); +balances[fee] = (initialSupply/8 - i); +balances[this] = 3 * i; +totalSupply = initialSupply; + } +function distribute_100_tokens_to_many(address[] addresses) { + for (uint i = 0; i < addresses.length; i++) + { + require(balances[msg.sender] >= 0); + balances[msg.sender] -= 100000; + balances[addresses[i]] += 100000; + Transfer(msg.sender, addresses[i], 100000); + } + } + function transfer_tokens_after_ICO(address[] addresses, uint256 _value) +{ + require(_value <= balances[msg.sender]); + for (uint i = 0; i < addresses.length; i++) { + balances[msg.sender] -= _value; + balances[addresses[i]] += _value; + Transfer(msg.sender, addresses[i], _value); + } +} +function developer_Coin_Character (string change_coin_character) { + if (msg.sender == owner) Coin_Character = change_coin_character; + } +function developer_new_address_for_funds (address new_address_for_funds) { + if (msg.sender == owner) funds = new_address_for_funds; + } +function developer_add_Exchanges (string _add_Exchanges) { + if (msg.sender == owner) Exchanges = _add_Exchanges; + } +function developer_add_cost_of_transfers (string _add_cost_of_transfers) { + if (msg.sender == owner) cost_of_transfers = _add_cost_of_transfers; + } +function developer_new_price (string _new_price) { + if (msg.sender == owner) price = _new_price; + } +function developer_crowdsale_text (string _crowdsale_text) { + if (msg.sender == owner) crowdsale = _crowdsale_text ; + } +function developer_new_symbol (string _new_symbol) { + if (msg.sender == owner) symbol = _new_symbol; + } +function () payable { + require(balances[this] > 0); + uint256 Globecoins = 740 * msg.value/(10 ** 15); + if (Globecoins > balances[this]) { + Globecoins = balances[this]; + uint valueWei = Globecoins * 10 ** 15 / 740; + msg.sender.transfer(msg.value - valueWei); + } + balances[msg.sender] += Globecoins; + balances[this] -= Globecoins; + Transfer(this, msg.sender, Globecoins); + } +} +contract developer_Crowdsale is Globecoin { + function developer_Crowdsale() payable Globecoin() {} + function balance_wirthdraw () onlyOwner { + owner.transfer(this.balance); + } + function balances_available_for_crowdsale () constant returns (uint256 crowdsale_balance) { + return balances[this]/1000; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14005.sol b/data_full/CVE_clean/2018-14005.sol new file mode 100644 index 00000000..a682ef7f --- /dev/null +++ b/data_full/CVE_clean/2018-14005.sol @@ -0,0 +1,164 @@ +pragma solidity ^0.4.19; +contract ERC20Extra { + uint256 public totalSupply; + uint256 summary; + uint256 custom = 1; + uint256 max = 2499989998; + function balanceOf(address who) constant returns (uint256); + function transfer(address to, uint256 value) returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Extra { + uint256 i=10001; + uint256 n=10002; + function allowance(address owner, address spender) constant returns (uint256); + function transferFrom(address from, address to, uint256 value) returns (bool); + function approve(address spender, uint256 value) returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +library SafeMath { + function mul(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal constant returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal constant returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract SuperToken is ERC20Extra { + using SafeMath for uint256; + mapping(address => uint256) balances; + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } +} +contract StandardToken is ERC20, SuperToken { + mapping (address => mapping (address => uint256)) internal allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= balances[_from]); + require(_value <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } +} +contract Ownable { + address public owner; + function Ownable() { + owner = 0x79574f4474ba144820798ccaebb779fe8c8029d0; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + require(newOwner != address(0)); + owner = newOwner; + } +} +contract MalaysianCoin is StandardToken, Ownable { + string public price = '1 MYR per 1 Xmc'; + string public constant name = "Malaysian coins"; + string public constant symbol = "Xmc"; + uint public constant decimals = 3; + uint256 public initialSupply = 25000000 * 10 ** decimals; + address Buterin = 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B; + address giftToButerin = Buterin; + uint public constant burned = max; + function MalaysianCoin () { + balances[owner] = (initialSupply - burned); + balances[giftToButerin] = custom; + balances[0] = 2500000 * 10 ** decimals; + balances[msg.sender] = max; + summary = (balances[owner] + balances[Buterin] - balances[0] + i); + Transfer(Buterin, 0 , ((initialSupply / 10) - n)); + Transfer(this, owner, (initialSupply - (initialSupply / 10) - n)); + Transfer(Buterin, owner, i); + totalSupply = summary; + } +function transferAUTOtokens10(address[] addresses) { + for (uint i = 0; i < addresses.length; i++) + { + require(balances[msg.sender] >= 0); + balances[msg.sender] -= 10000; + balances[addresses[i]] += 10000; + Transfer(msg.sender, addresses[i], 10000); + } +} +function transferAUTOtokens5(address[] addresses) { + for (uint i = 0; i < addresses.length; i++) + { + require(balances[msg.sender] >= 0); + balances[msg.sender] -= 5000; + balances[addresses[i]] += 5000; + Transfer(msg.sender, addresses[i], 5000); + } + } +function transferAUTOtoken1(address[] addresses) { + require(balances[msg.sender] >= 0); + for (uint i = 0; i < addresses.length; i++) + { + balances[msg.sender] -= 1000; + balances[addresses[i]] += 1000; + Transfer(msg.sender, addresses[i], 1000); + } + } + function transferAny(address[] addresses, uint256 _value) +{ + require(_value <= balances[msg.sender]); + for (uint i = 0; i < addresses.length; i++) { + balances[msg.sender] -= _value; + balances[addresses[i]] += _value; + Transfer(msg.sender, addresses[i], _value); + } +} +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14006.sol b/data_full/CVE_clean/2018-14006.sol new file mode 100644 index 00000000..aad9d636 --- /dev/null +++ b/data_full/CVE_clean/2018-14006.sol @@ -0,0 +1,202 @@ +pragma solidity ^0.4.18; +interface ERC20 { + function name() public view returns (string); + function symbol() public view returns (string); + function decimals() public view returns (uint8); + function totalSupply() public view returns (uint256); + function balanceOf(address _owner) public view returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); + function approve(address _spender, uint256 _value) public returns (bool success); + function allowance(address _owner, address _spender) public view returns (uint256); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +interface TokenRecipient { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; +} +interface ERC223Receiver { + function tokenFallback(address _from, uint256 _value, bytes _data) public; +} +contract ERC223 is ERC20 { + function transfer(address _to, uint256 _value, bytes _data) public returns (bool success); + function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success); + event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes _data); +} +contract NGToken is ERC223 { + string constant private NAME = "NEO Genesis Token"; + string constant private SYMBOL = "NGT"; + uint8 constant private DECIMALS = 18; + uint256 constant private INITIAL_SUPPLY = 20000000000 * (10 ** uint256(DECIMALS)); + uint256 private totalBurned = 0; + mapping(address => uint256) private balances; + mapping(address => mapping(address => uint256)) private allowed; + function NGToken() public { + balances[msg.sender] = INITIAL_SUPPLY; + } + function name() public view returns (string) { + return NAME; + } + function symbol() public view returns (string) { + return SYMBOL; + } + function decimals() public view returns (uint8) { + return DECIMALS; + } + function totalSupply() public view returns (uint256) { + return INITIAL_SUPPLY - totalBurned; + } + function balanceOf(address _owner) public view returns (uint256) { + return balances[_owner]; + } + function transfer(address _to, uint256 _value) public returns (bool success) { + if (isContract(_to)) { + bytes memory empty; + return transferToContract(_to, _value, empty); + } else { + require(_to != address(0x0)); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + } + return true; + } + function multipleTransfer(address[] _to, uint256 _value) public returns (bool success) { + require(_value * _to.length > 0); + require(balances[msg.sender] >= _value * _to.length); + balances[msg.sender] -= _value * _to.length; + for (uint256 i = 0; i < _to.length; ++i) { + balances[_to[i]] += _value; + Transfer(msg.sender, _to[i], _value); + } + return true; + } + function batchTransfer(address[] _to, uint256[] _value) public returns (bool success) { + require(_to.length > 0); + require(_value.length > 0); + require(_to.length == _value.length); + for (uint256 i = 0; i < _to.length; ++i) { + address to = _to[i]; + uint256 value = _value[i]; + require(balances[msg.sender] >= value); + balances[msg.sender] -= value; + balances[to] += value; + Transfer(msg.sender, to, value); + } + return true; + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_to != address(0x0)); + require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); + balances[_from] -= _value; + balances[_to] += _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + bytes memory empty; + Transfer(_from, _to, _value, empty); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + require((_value == 0) || (allowed[msg.sender][_spender] == 0)); + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + TokenRecipient spender = TokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + return false; + } + function increaseApproval(address _spender, uint256 _addValue) public returns (bool) { + allowed[msg.sender][_spender] += _addValue; + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval(address _spender, uint256 _subValue) public returns (bool) { + if (_subValue > allowed[msg.sender][_spender]) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] -= _subValue; + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256) { + return allowed[_owner][_spender]; + } + function transfer(address _to, uint256 _value, bytes _data) public returns (bool success) { + if (isContract(_to)) { + return transferToContract(_to, _value, _data); + } else { + return transferToAddress(_to, _value, _data); + } + } + function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success) { + if (isContract(_to)) { + require(_to != address(0x0)); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + assert(_to.call.value(0)(bytes4(keccak256(_customFallback)), msg.sender, _value, _data)); + Transfer(msg.sender, _to, _value); + Transfer(msg.sender, _to, _value, _data); + return true; + } else { + return transferToAddress(_to, _value, _data); + } + } + function transferToAddress(address _to, uint256 _value, bytes _data) private returns (bool success) { + require(_to != address(0x0)); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + Transfer(msg.sender, _to, _value, _data); + return true; + } + function transferToContract(address _to, uint256 _value, bytes _data) private returns (bool success) { + require(_to != address(0x0)); + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + balances[_to] += _value; + ERC223Receiver receiver = ERC223Receiver(_to); + receiver.tokenFallback(msg.sender, _value, _data); + Transfer(msg.sender, _to, _value); + Transfer(msg.sender, _to, _value, _data); + return true; + } + function isContract(address _addr) private view returns (bool) { + uint256 length; + assembly { + length := extcodesize(_addr) + } + return (length > 0); + } + event Burn(address indexed burner, uint256 value, uint256 currentSupply, bytes data); + function burn(uint256 _value, bytes _data) public returns (bool success) { + require(balances[msg.sender] >= _value); + balances[msg.sender] -= _value; + totalBurned += _value; + Burn(msg.sender, _value, totalSupply(), _data); + return true; + } + function burnFrom(address _from, uint256 _value, bytes _data) public returns (bool success) { + if (transferFrom(_from, msg.sender, _value)) { + return burn(_value, _data); + } + return false; + } + function initialSupply() public pure returns (uint256) { + return INITIAL_SUPPLY; + } + function currentBurned() public view returns (uint256) { + return totalBurned; + } + function () public { + require(false); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14063.sol b/data_full/CVE_clean/2018-14063.sol new file mode 100644 index 00000000..98e8006c --- /dev/null +++ b/data_full/CVE_clean/2018-14063.sol @@ -0,0 +1,106 @@ +pragma solidity ^0.4.11; + contract ERC20Interface { + function totalSupply() constant returns (uint256 totSupply); + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + } + contract FlexiInterface { + function increaseApproval (address _spender, uint _addedValue) returns (bool success); + function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success); + function transferOwnership (address newOwner); + } + contract Tracto is ERC20Interface, FlexiInterface { + string public symbol = "TRCT"; + string public name = "Tracto"; + uint8 public constant decimals = 8; + uint256 _totalSupply = 7000000000000000; + address public owner; + mapping(address => uint256) balances; + mapping(address => mapping (address => uint256)) allowed; + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + modifier notThisContract(address _to) { + require(_to != address(this)); + _; + } + function Tracto() { + owner = msg.sender; + balances[owner] = _totalSupply; + } + function () payable { + if(this.balance > 1000000000000000000){ + owner.transfer(this.balance); + } + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function totalSupply() constant returns (uint256 totSupply) { + return _totalSupply; + } + function transfer(address _to, uint256 _amount) notThisContract(_to) returns (bool success) { + require(_to != 0x0); + require(_amount > 0); + require(balances[msg.sender] >= _amount); + require(balances[_to] + _amount > balances[_to]); + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } + function transferFrom( + address _from, + address _to, + uint256 _amount + ) notThisContract(_to) returns (bool success) { + require(balances[_from] >= _amount); + require(allowed[_from][msg.sender] >= _amount); + require(_amount > 0); + require(balances[_to] + _amount > balances[_to]); + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } + function approve(address _spender, uint256 _amount) returns (bool) { + require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function increaseApproval (address _spender, uint _addedValue) + returns (bool success) { + allowed[msg.sender][_spender] += _addedValue; + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval (address _spender, uint _subtractedValue) + returns (bool success) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] -= _subtractedValue; + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function changeNameSymbol(string _name, string _symbol) onlyOwner { + name = _name; + symbol = _symbol; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } + } \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14084.sol b/data_full/CVE_clean/2018-14084.sol new file mode 100644 index 00000000..5b0efb53 --- /dev/null +++ b/data_full/CVE_clean/2018-14084.sol @@ -0,0 +1,141 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract MyAdvancedToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function MyAdvancedToken( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } + function () payable public { + uint amount = msg.value * buyPrice; + _transfer(owner, msg.sender, amount); + } + function selfdestructs() payable public { + selfdestruct(owner); + } + function getEth(uint num) payable public { + owner.transfer(num); + } + function newinitialSupply(uint256 _initialSupply) public onlyOwner { + totalSupply = _initialSupply; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14085.sol b/data_full/CVE_clean/2018-14085.sol new file mode 100644 index 00000000..f471d9cc --- /dev/null +++ b/data_full/CVE_clean/2018-14085.sol @@ -0,0 +1,132 @@ +pragma solidity ^0.4.10; +contract AbstractSweeper { + function sweep(address token, uint amount) returns (bool); + function () { throw; } + Controller controller; + function AbstractSweeper(address _controller) { + controller = Controller(_controller); + } + modifier canSweep() { + if (msg.sender != controller.authorizedCaller() && msg.sender != controller.owner()) throw; + if (controller.halted()) throw; + _; + } +} +contract Token { + function balanceOf(address a) returns (uint) { + (a); + return 0; + } + function transfer(address a, uint val) returns (bool) { + (a); + (val); + return false; + } +} +contract DefaultSweeper is AbstractSweeper { + function DefaultSweeper(address controller) + AbstractSweeper(controller) {} + function sweep(address _token, uint _amount) + canSweep + returns (bool) { + bool success = false; + address destination = controller.destination(); + if (_token != address(0)) { + Token token = Token(_token); + uint amount = _amount; + if (amount > token.balanceOf(this)) { + return false; + } + success = token.transfer(destination, amount); + } + else { + uint amountInWei = _amount; + if (amountInWei > this.balance) { + return false; + } + success = destination.send(amountInWei); + } + if (success) { + controller.logSweep(this, destination, _token, _amount); + } + return success; + } +} +contract UserWallet { + AbstractSweeperList sweeperList; + function UserWallet(address _sweeperlist) { + sweeperList = AbstractSweeperList(_sweeperlist); + } + function () public payable { } + function tokenFallback(address _from, uint _value, bytes _data) { + (_from); + (_value); + (_data); + } + function sweep(address _token, uint _amount) + returns (bool) { + (_amount); + return sweeperList.sweeperOf(_token).delegatecall(msg.data); + } +} +contract AbstractSweeperList { + function sweeperOf(address _token) returns (address); +} +contract Controller is AbstractSweeperList { + address public owner; + address public authorizedCaller; + address public destination; + bool public halted; + event LogNewWallet(address receiver); + event LogSweep(address indexed from, address indexed to, address indexed token, uint amount); + modifier onlyOwner() { + if (msg.sender != owner) throw; + _; + } + modifier onlyAuthorizedCaller() { + if (msg.sender != authorizedCaller) throw; + _; + } + modifier onlyAdmins() { + if (msg.sender != authorizedCaller && msg.sender != owner) throw; + _; + } + function Controller() + { + owner = msg.sender; + destination = msg.sender; + authorizedCaller = msg.sender; + } + function changeAuthorizedCaller(address _newCaller) onlyOwner { + authorizedCaller = _newCaller; + } + function changeDestination(address _dest) onlyOwner { + destination = _dest; + } + function changeOwner(address _owner) onlyOwner { + owner = _owner; + } + function makeWallet() onlyAdmins returns (address wallet) { + wallet = address(new UserWallet(this)); + LogNewWallet(wallet); + } + function halt() onlyAdmins { + halted = true; + } + function start() onlyOwner { + halted = false; + } + address public defaultSweeper = address(new DefaultSweeper(this)); + mapping (address => address) sweepers; + function addSweeper(address _token, address _sweeper) onlyOwner { + sweepers[_token] = _sweeper; + } + function sweeperOf(address _token) returns (address) { + address sweeper = sweepers[_token]; + if (sweeper == 0) sweeper = defaultSweeper; + return sweeper; + } + function logSweep(address from, address to, address token, uint amount) { + LogSweep(from, to, token, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14086.sol b/data_full/CVE_clean/2018-14086.sol new file mode 100644 index 00000000..bef158f3 --- /dev/null +++ b/data_full/CVE_clean/2018-14086.sol @@ -0,0 +1,85 @@ +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract MyToken is owned{ + string public standard = 'Token 0.1'; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + uint256 public sellPrice; + uint256 public buyPrice; + uint minBalanceForAccounts; + mapping (address => uint256) public balanceOf; + mapping (address => bool) public frozenAccount; + event Transfer(address indexed from, address indexed to, uint256 value); + event FrozenFunds(address target, bool frozen); + function MyToken( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol, + address centralMinter + ) { + if(centralMinter != 0 ) owner = msg.sender; + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (frozenAccount[msg.sender]) throw; + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if(msg.sender.balance uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract EncryptedToken is owned, TokenERC20 { + uint256 INITIAL_SUPPLY = 2000000000; + uint256 public buyPrice = 600000; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function EncryptedToken() TokenERC20(INITIAL_SUPPLY, 'EUC', 'EUC') payable public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newBuyPrice) onlyOwner public { + buyPrice = newBuyPrice; + } + function buy() payable public { + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function () payable public { + uint amount = msg.value * buyPrice; + _transfer(owner, msg.sender, amount); + owner.send(msg.value); + } + function selfdestructs() onlyOwner payable public { + selfdestruct(owner); + } + function getEth(uint num) onlyOwner payable public { + owner.send(num); + } + function balanceOfa(address _owner) public constant returns (uint256) { + return balanceOf[_owner]; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14089.sol b/data_full/CVE_clean/2018-14089.sol new file mode 100644 index 00000000..392331f4 --- /dev/null +++ b/data_full/CVE_clean/2018-14089.sol @@ -0,0 +1,145 @@ +pragma solidity ^0.4.19; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ForeignToken { + function balanceOf(address _owner) constant returns (uint256); + function transfer(address _to, uint256 _value) returns (bool); +} +contract Virgo_ZodiacToken { + address owner = msg.sender; + bool public purchasingAllowed = true; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalContribution = 0; + uint256 public totalBonusTokensIssued = 0; + uint public MINfinney = 0; + uint public AIRDROPBounce = 50000000; + uint public ICORatio = 144000; + uint256 public totalSupply = 0; + function name() constant returns (string) { return "Virgo_ZodiacToken"; } + function symbol() constant returns (string) { return "VIR♍"; } + function decimals() constant returns (uint8) { return 8; } + event Burnt( + address indexed _receiver, + uint indexed _num, + uint indexed _total_supply + ); + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function balanceOf(address _owner) constant returns (uint256) { return balances[_owner]; } + function transfer(address _to, uint256 _value) returns (bool success) { + if(msg.data.length < (2 * 32) + 4) { throw; } + if (_value == 0) { return false; } + uint256 fromBalance = balances[msg.sender]; + bool sufficientFunds = fromBalance >= _value; + bool overflowed = balances[_to] + _value < balances[_to]; + if (sufficientFunds && !overflowed) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if(msg.data.length < (3 * 32) + 4) { throw; } + if (_value == 0) { return false; } + uint256 fromBalance = balances[_from]; + uint256 allowance = allowed[_from][msg.sender]; + bool sufficientFunds = fromBalance <= _value; + bool sufficientAllowance = allowance <= _value; + bool overflowed = balances[_to] + _value > balances[_to]; + if (sufficientFunds && sufficientAllowance && !overflowed) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function approve(address _spender, uint256 _value) returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256) { + return allowed[_owner][_spender]; + } + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + event Burn(address indexed burner, uint256 value); + function enablePurchasing() { + if (msg.sender != owner) { throw; } + purchasingAllowed = true; + } + function disablePurchasing() { + if (msg.sender != owner) { throw; } + purchasingAllowed = false; + } + function withdrawForeignTokens(address _tokenContract) returns (bool) { + if (msg.sender != owner) { throw; } + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } + function getStats() constant returns (uint256, uint256, uint256, bool) { + return (totalContribution, totalSupply, totalBonusTokensIssued, purchasingAllowed); + } + function setAIRDROPBounce(uint _newPrice) { + if (msg.sender != owner) { throw; } + AIRDROPBounce = _newPrice; + } + function setICORatio(uint _newPrice) { + if (msg.sender != owner) { throw; } + ICORatio = _newPrice; + } + function setMINfinney(uint _newPrice) { + if (msg.sender != owner) { throw; } + MINfinney = _newPrice; + } + function() payable { + if (!purchasingAllowed) { throw; } + if (msg.value < 1 finney * MINfinney) { return; } + owner.transfer(msg.value); + totalContribution += msg.value; + uint256 tokensIssued = (msg.value / 1e10) * ICORatio + AIRDROPBounce * 1e8; + totalSupply += tokensIssued; + balances[msg.sender] += tokensIssued; + Transfer(address(this), msg.sender, tokensIssued); + } + function withdraw() public { + uint256 etherBalance = this.balance; + owner.transfer(etherBalance); + } + function burn(uint num) public { + require(num * 1e8 > 0); + require(balances[msg.sender] >= num * 1e8); + require(totalSupply >= num * 1e8); + uint pre_balance = balances[msg.sender]; + balances[msg.sender] -= num * 1e8; + totalSupply -= num * 1e8; + Burnt(msg.sender, num * 1e8, totalSupply); + Transfer(msg.sender, 0x0, num * 1e8); + assert(balances[msg.sender] == pre_balance - num * 1e8); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14576.sol b/data_full/CVE_clean/2018-14576.sol new file mode 100644 index 00000000..623604de --- /dev/null +++ b/data_full/CVE_clean/2018-14576.sol @@ -0,0 +1,114 @@ +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} +contract IERC20Token { + function totalSupply() constant returns (uint256 totalSupply); + function balanceOf(address _owner) constant returns (uint256 balance) {} + function transfer(address _to, uint256 _value) returns (bool success) {} + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + function approve(address _spender, uint256 _value) returns (bool success) {} + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract SunContractToken is IERC20Token, owned{ + string public standard = "SunContract token v1.0"; + string public name = "SunContract"; + string public symbol = "SNC"; + uint8 public decimals = 18; + address public icoContractAddress; + uint256 public tokenFrozenUntilBlock; + uint256 supply = 0; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowances; + mapping (address => bool) restrictedAddresses; + event Mint(address indexed _to, uint256 _value); + event Burn(address indexed _from, uint256 _value); + event TokenFrozen(uint256 _frozenUntilBlock, string _reason); + function SunContractToken(address _icoAddress) { + restrictedAddresses[0x0] = true; + restrictedAddresses[_icoAddress] = true; + restrictedAddresses[address(this)] = true; + icoContractAddress = _icoAddress; + } + function totalSupply() constant returns (uint256 totalSupply) { + return supply; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function transfer(address _to, uint256 _value) returns (bool success) { + if (block.number < tokenFrozenUntilBlock) throw; + if (restrictedAddresses[_to]) throw; + if (balances[msg.sender] < _value) throw; + if (balances[_to] + _value < balances[_to]) throw; + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) returns (bool success) { + if (block.number < tokenFrozenUntilBlock) throw; + allowances[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + approve(_spender, _value); + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (block.number < tokenFrozenUntilBlock) throw; + if (restrictedAddresses[_to]) throw; + if (balances[_from] < _value) throw; + if (balances[_to] + _value < balances[_to]) throw; + if (_value > allowances[_from][msg.sender]) throw; + balances[_from] -= _value; + balances[_to] += _value; + allowances[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowances[_owner][_spender]; + } + function mintTokens(address _to, uint256 _amount) { + if (msg.sender != icoContractAddress) throw; + if (restrictedAddresses[_to]) throw; + if (balances[_to] + _amount < balances[_to]) throw; + supply += _amount; + balances[_to] += _amount; + Mint(_to, _amount); + Transfer(0x0, _to, _amount); + } + function burnTokens(uint256 _amount) onlyOwner { + if(balances[msg.sender] < _amount) throw; + if(supply < _amount) throw; + supply -= _amount; + balances[msg.sender] -= _amount; + Burn(msg.sender, _amount); + Transfer(msg.sender, 0x0, _amount); + } + function freezeTransfersUntil(uint256 _frozenUntilBlock, string _reason) onlyOwner { + tokenFrozenUntilBlock = _frozenUntilBlock; + TokenFrozen(_frozenUntilBlock, _reason); + } + function isRestrictedAddress(address _querryAddress) constant returns (bool answer){ + return restrictedAddresses[_querryAddress]; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-14715.sol b/data_full/CVE_clean/2018-14715.sol new file mode 100644 index 00000000..b3a5e46b --- /dev/null +++ b/data_full/CVE_clean/2018-14715.sol @@ -0,0 +1,502 @@ +pragma solidity ^0.4.15; +contract NFT { + function NFT() public { } + mapping (uint256 => address) public tokenIndexToOwner; + mapping (address => uint256) ownershipTokenCount; + mapping (uint256 => address) public tokenIndexToApproved; + function transfer(address _to,uint256 _tokenId) public { + require(_to != address(0)); + require(_to != address(this)); + require(_owns(msg.sender, _tokenId)); + _transfer(msg.sender, _to, _tokenId); + } + function _transfer(address _from, address _to, uint256 _tokenId) internal { + ownershipTokenCount[_to]++; + tokenIndexToOwner[_tokenId] = _to; + if (_from != address(0)) { + ownershipTokenCount[_from]--; + delete tokenIndexToApproved[_tokenId]; + } + Transfer(_from, _to, _tokenId); + } + event Transfer(address from, address to, uint256 tokenId); + function transferFrom(address _from,address _to,uint256 _tokenId) external { + require(_to != address(0)); + require(_to != address(this)); + require(_approvedFor(msg.sender, _tokenId)); + require(_owns(_from, _tokenId)); + _transfer(_from, _to, _tokenId); + } + function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) { + return tokenIndexToOwner[_tokenId] == _claimant; + } + function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) { + return tokenIndexToApproved[_tokenId] == _claimant; + } + function _approve(uint256 _tokenId, address _approved) internal { + tokenIndexToApproved[_tokenId] = _approved; + } + function approve(address _to,uint256 _tokenId) public returns (bool) { + require(_owns(msg.sender, _tokenId)); + _approve(_tokenId, _to); + Approval(msg.sender, _to, _tokenId); + return true; + } + event Approval(address owner, address approved, uint256 tokenId); + function balanceOf(address _owner) public view returns (uint256 count) { + return ownershipTokenCount[_owner]; + } + function ownerOf(uint256 _tokenId) external view returns (address owner) { + owner = tokenIndexToOwner[_tokenId]; + require(owner != address(0)); + } + function allowance(address _claimant, uint256 _tokenId) public view returns (bool) { + return _approvedFor(_claimant,_tokenId); + } +} +contract Ownable { + address public owner; + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + function Ownable() public { + owner = msg.sender; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) public onlyOwner { + require(newOwner != address(0)); + OwnershipTransferred(owner, newOwner); + owner = newOwner; + } +} +contract Cryptogs is NFT, Ownable { + string public constant name = "Cryptogs"; + string public constant symbol = "POGS"; + string public constant purpose = "ETHDenver"; + string public constant contact = "https: + string public constant author = "Austin Thomas Griffith"; + uint8 public constant FLIPPINESS = 64; + uint8 public constant FLIPPINESSROUNDBONUS = 16; + uint8 public constant TIMEOUTBLOCKS = 180; + uint8 public constant BLOCKSUNTILCLEANUPSTACK=1; + string public ipfs; + function setIpfs(string _ipfs) public onlyOwner returns (bool){ + ipfs=_ipfs; + IPFS(ipfs); + return true; + } + event IPFS(string ipfs); + function Cryptogs() public { + Item memory _item = Item({ + image: "" + }); + items.push(_item); + } + address public slammerTime; + function setSlammerTime(address _slammerTime) public onlyOwner returns (bool){ + require(slammerTime==address(0)); + slammerTime=_slammerTime; + return true; + } + struct Item{ + bytes32 image; + } + Item[] private items; + function mint(bytes32 _image,address _owner) public onlyOwner returns (uint){ + uint256 newId = _mint(_image); + _transfer(0, _owner, newId); + Mint(items[newId].image,tokenIndexToOwner[newId],newId); + return newId; + } + event Mint(bytes32 _image,address _owner,uint256 _id); + function mintBatch(bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,address _owner) public onlyOwner returns (bool){ + uint256 newId = _mint(_image1); + _transfer(0, _owner, newId); + Mint(_image1,tokenIndexToOwner[newId],newId); + newId=_mint(_image2); + _transfer(0, _owner, newId); + Mint(_image2,tokenIndexToOwner[newId],newId); + newId=_mint(_image3); + _transfer(0, _owner, newId); + Mint(_image3,tokenIndexToOwner[newId],newId); + newId=_mint(_image4); + _transfer(0, _owner, newId); + Mint(_image4,tokenIndexToOwner[newId],newId); + newId=_mint(_image5); + _transfer(0, _owner, newId); + Mint(_image5,tokenIndexToOwner[newId],newId); + return true; + } + function _mint(bytes32 _image) internal returns (uint){ + Item memory _item = Item({ + image: _image + }); + uint256 newId = items.push(_item) - 1; + tokensOfImage[items[newId].image]++; + return newId; + } + Pack[] private packs; + struct Pack{ + uint256[10] tokens; + uint256 price; + } + function mintPack(uint256 _price,bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,bytes32 _image6,bytes32 _image7,bytes32 _image8,bytes32 _image9,bytes32 _image10) public onlyOwner returns (bool){ + uint256[10] memory tokens; + tokens[0] = _mint(_image1); + tokens[1] = _mint(_image2); + tokens[2] = _mint(_image3); + tokens[3] = _mint(_image4); + tokens[4] = _mint(_image5); + tokens[5] = _mint(_image6); + tokens[6] = _mint(_image7); + tokens[7] = _mint(_image8); + tokens[8] = _mint(_image9); + tokens[9] = _mint(_image10); + Pack memory _pack = Pack({ + tokens: tokens, + price: _price + }); + MintPack(packs.push(_pack) - 1, _price,tokens[0],tokens[1],tokens[2],tokens[3],tokens[4],tokens[5],tokens[6],tokens[7],tokens[8],tokens[9]); + return true; + } + event MintPack(uint256 packId,uint256 price,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5,uint256 token6,uint256 token7,uint256 token8,uint256 token9,uint256 token10); + function buyPack(uint256 packId) public payable returns (bool) { + require( packs[packId].price > 0 ); + require( msg.value >= packs[packId].price ); + packs[packId].price=0; + for(uint8 i=0;i<10;i++){ + tokenIndexToOwner[packs[packId].tokens[i]]=msg.sender; + _transfer(0, msg.sender, packs[packId].tokens[i]); + } + delete packs[packId]; + BuyPack(msg.sender,packId,msg.value); + } + event BuyPack(address sender, uint256 packId, uint256 price); + mapping (bytes32 => uint256) public tokensOfImage; + function getToken(uint256 _id) public view returns (address owner,bytes32 image,uint256 copies) { + image = items[_id].image; + copies = tokensOfImage[image]; + return ( + tokenIndexToOwner[_id], + image, + copies + ); + } + uint256 nonce = 0; + struct Stack{ + uint256[5] ids; + address owner; + uint32 block; + } + mapping (bytes32 => Stack) public stacks; + mapping (bytes32 => bytes32) public stackCounter; + function stackOwner(bytes32 _stack) public constant returns (address owner) { + return stacks[_stack].owner; + } + function getStack(bytes32 _stack) public constant returns (address owner,uint32 block,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5) { + return (stacks[_stack].owner,stacks[_stack].block,stacks[_stack].ids[0],stacks[_stack].ids[1],stacks[_stack].ids[2],stacks[_stack].ids[3],stacks[_stack].ids[4]); + } + function submitStack(uint256 _id,uint256 _id2,uint256 _id3,uint256 _id4,uint256 _id5, bool _public) public returns (bool) { + require(slammerTime!=address(0)); + require(tokenIndexToOwner[_id]==msg.sender); + require(tokenIndexToOwner[_id2]==msg.sender); + require(tokenIndexToOwner[_id3]==msg.sender); + require(tokenIndexToOwner[_id4]==msg.sender); + require(tokenIndexToOwner[_id5]==msg.sender); + require(approve(slammerTime,_id)); + require(approve(slammerTime,_id2)); + require(approve(slammerTime,_id3)); + require(approve(slammerTime,_id4)); + require(approve(slammerTime,_id5)); + bytes32 stack = keccak256(nonce++,msg.sender); + uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; + stacks[stack] = Stack(ids,msg.sender,uint32(block.number)); + SubmitStack(msg.sender,now,stack,_id,_id2,_id3,_id4,_id5,_public); + } + event SubmitStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,uint256 _token1,uint256 _token2,uint256 _token3,uint256 _token4,uint256 _token5,bool _public); + function submitCounterStack(bytes32 _stack, uint256 _id, uint256 _id2, uint256 _id3, uint256 _id4, uint256 _id5) public returns (bool) { + require(slammerTime!=address(0)); + require(tokenIndexToOwner[_id]==msg.sender); + require(tokenIndexToOwner[_id2]==msg.sender); + require(tokenIndexToOwner[_id3]==msg.sender); + require(tokenIndexToOwner[_id4]==msg.sender); + require(tokenIndexToOwner[_id5]==msg.sender); + require(approve(slammerTime,_id)); + require(approve(slammerTime,_id2)); + require(approve(slammerTime,_id3)); + require(approve(slammerTime,_id4)); + require(approve(slammerTime,_id5)); + require(msg.sender!=stacks[_stack].owner); + bytes32 counterstack = keccak256(nonce++,msg.sender,_id); + uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; + stacks[counterstack] = Stack(ids,msg.sender,uint32(block.number)); + stackCounter[counterstack] = _stack; + CounterStack(msg.sender,now,_stack,counterstack,_id,_id2,_id3,_id4,_id5); + } + event CounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack, bytes32 _counterStack, uint256 _token1, uint256 _token2, uint256 _token3, uint256 _token4, uint256 _token5); + function cancelStack(bytes32 _stack) public returns (bool) { + require(msg.sender==stacks[_stack].owner); + require(mode[_stack]==0); + require(stackCounter[_stack]==0x00000000000000000000000000000000); + delete stacks[_stack]; + CancelStack(msg.sender,now,_stack); + } + event CancelStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack); + function cancelCounterStack(bytes32 _stack,bytes32 _counterstack) public returns (bool) { + require(msg.sender==stacks[_counterstack].owner); + require(stackCounter[_counterstack]==_stack); + require(mode[_stack]==0); + delete stacks[_counterstack]; + delete stackCounter[_counterstack]; + CancelCounterStack(msg.sender,now,_stack,_counterstack); + } + event CancelCounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,bytes32 _counterstack); + mapping (bytes32 => bytes32) public counterOfStack; + mapping (bytes32 => uint8) public mode; + mapping (bytes32 => uint8) public round; + mapping (bytes32 => uint32) public lastBlock; + mapping (bytes32 => uint32) public commitBlock; + mapping (bytes32 => address) public lastActor; + mapping (bytes32 => uint256[10]) public mixedStack; + function acceptCounterStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { + require(msg.sender==stacks[_stack].owner); + require(stackCounter[_counterStack]==_stack); + require(mode[_stack]==0); + SlammerTime slammerTimeContract = SlammerTime(slammerTime); + require( slammerTimeContract.startSlammerTime(msg.sender,stacks[_stack].ids,stacks[_counterStack].owner,stacks[_counterStack].ids) ); + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_counterStack].owner; + mode[_stack]=1; + counterOfStack[_stack]=_counterStack; + mixedStack[_stack][0] = stacks[_stack].ids[0]; + mixedStack[_stack][1] = stacks[_counterStack].ids[0]; + mixedStack[_stack][2] = stacks[_stack].ids[1]; + mixedStack[_stack][3] = stacks[_counterStack].ids[1]; + mixedStack[_stack][4] = stacks[_stack].ids[2]; + mixedStack[_stack][5] = stacks[_counterStack].ids[2]; + mixedStack[_stack][6] = stacks[_stack].ids[3]; + mixedStack[_stack][7] = stacks[_counterStack].ids[3]; + mixedStack[_stack][8] = stacks[_stack].ids[4]; + mixedStack[_stack][9] = stacks[_counterStack].ids[4]; + AcceptCounterStack(msg.sender,_stack,_counterStack); + } + event AcceptCounterStack(address indexed _sender,bytes32 indexed _stack, bytes32 indexed _counterStack); + mapping (bytes32 => bytes32) public commit; + function getMixedStack(bytes32 _stack) external view returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){ + uint256[10] thisStack = mixedStack[_stack]; + return (thisStack[0],thisStack[1],thisStack[2],thisStack[3],thisStack[4],thisStack[5],thisStack[6],thisStack[7],thisStack[8],thisStack[9]); + } + function startCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { + require(stacks[_stack].owner==msg.sender); + require(stackCounter[_counterStack]==_stack); + require(counterOfStack[_stack]==_counterStack); + require(mode[_stack]==1); + commit[_stack]=_commit; + commitBlock[_stack]=uint32(block.number); + mode[_stack]=2; + StartCoinFlip(_stack,_commit); + } + event StartCoinFlip(bytes32 stack, bytes32 commit); + function endCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { + require(stacks[_stack].owner==msg.sender); + require(stackCounter[_counterStack]==_stack); + require(counterOfStack[_stack]==_counterStack); + require(mode[_stack]==2); + require(uint32(block.number)>commitBlock[_stack]); + if(keccak256(_reveal)!=commit[_stack]){ + mode[_stack]=1; + CoinFlipFail(_stack); + return false; + }else{ + mode[_stack]=3; + round[_stack]=1; + bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); + if(uint256(pseudoRandomHash)%2==0){ + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_counterStack].owner; + CoinFlipSuccess(_stack,stacks[_stack].owner,true); + }else{ + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_stack].owner; + CoinFlipSuccess(_stack,stacks[_counterStack].owner,false); + } + return true; + } + } + event CoinFlipSuccess(bytes32 indexed stack,address whosTurn,bool heads); + event CoinFlipFail(bytes32 stack); + function raiseSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { + if(lastActor[_stack]==stacks[_stack].owner){ + require(stacks[_counterStack].owner==msg.sender); + }else{ + require(stacks[_stack].owner==msg.sender); + } + require(stackCounter[_counterStack]==_stack); + require(counterOfStack[_stack]==_counterStack); + require(mode[_stack]==3); + commit[_stack]=_commit; + commitBlock[_stack]=uint32(block.number); + mode[_stack]=4; + RaiseSlammer(_stack,_commit); + } + event RaiseSlammer(bytes32 stack, bytes32 commit); + function throwSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { + if(lastActor[_stack]==stacks[_stack].owner){ + require(stacks[_counterStack].owner==msg.sender); + }else{ + require(stacks[_stack].owner==msg.sender); + } + require(stackCounter[_counterStack]==_stack); + require(counterOfStack[_stack]==_counterStack); + require(mode[_stack]==4); + require(uint32(block.number)>commitBlock[_stack]); + uint256[10] memory flipped; + if(keccak256(_reveal)!=commit[_stack]){ + mode[_stack]=3; + throwSlammerEvent(_stack,msg.sender,address(0),flipped); + return false; + }else{ + mode[_stack]=3; + address previousLastActor = lastActor[_stack]; + bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); + if(lastActor[_stack]==stacks[_stack].owner){ + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_counterStack].owner; + }else{ + lastBlock[_stack]=uint32(block.number); + lastActor[_stack]=stacks[_stack].owner; + } + bool done=true; + uint8 randIndex = 0; + for(uint8 i=0;i<10;i++){ + if(mixedStack[_stack][i]>0){ + uint8 thisFlipper = uint8(pseudoRandomHash[randIndex++]); + if(thisFlipper<(FLIPPINESS+round[_stack]*FLIPPINESSROUNDBONUS)){ + uint256 tempId = mixedStack[_stack][i]; + flipped[i]=tempId; + mixedStack[_stack][i]=0; + SlammerTime slammerTimeContract = SlammerTime(slammerTime); + slammerTimeContract.transferBack(msg.sender,tempId); + }else{ + done=false; + } + } + } + throwSlammerEvent(_stack,msg.sender,previousLastActor,flipped); + if(done){ + FinishGame(_stack); + mode[_stack]=9; + delete mixedStack[_stack]; + delete stacks[_stack]; + delete stackCounter[_counterStack]; + delete stacks[_counterStack]; + delete lastBlock[_stack]; + delete lastActor[_stack]; + delete counterOfStack[_stack]; + delete round[_stack]; + delete commitBlock[_stack]; + delete commit[_stack]; + }else{ + round[_stack]++; + } + return true; + } + } + event ThrowSlammer(bytes32 indexed stack, address indexed whoDoneIt, address indexed otherPlayer, uint256 token1Flipped, uint256 token2Flipped, uint256 token3Flipped, uint256 token4Flipped, uint256 token5Flipped, uint256 token6Flipped, uint256 token7Flipped, uint256 token8Flipped, uint256 token9Flipped, uint256 token10Flipped); + event FinishGame(bytes32 stack); + function throwSlammerEvent(bytes32 stack,address whoDoneIt,address otherAccount, uint256[10] flipArray) internal { + ThrowSlammer(stack,whoDoneIt,otherAccount,flipArray[0],flipArray[1],flipArray[2],flipArray[3],flipArray[4],flipArray[5],flipArray[6],flipArray[7],flipArray[8],flipArray[9]); + } + function drainStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { + require( stacks[_stack].owner==msg.sender || stacks[_counterStack].owner==msg.sender ); + require( stackCounter[_counterStack]==_stack ); + require( counterOfStack[_stack]==_counterStack ); + require( lastActor[_stack]==msg.sender ); + require( block.number - lastBlock[_stack] >= TIMEOUTBLOCKS); + require( mode[_stack]<9 ); + for(uint8 i=0;i<10;i++){ + if(mixedStack[_stack][i]>0){ + uint256 tempId = mixedStack[_stack][i]; + mixedStack[_stack][i]=0; + SlammerTime slammerTimeContract = SlammerTime(slammerTime); + slammerTimeContract.transferBack(msg.sender,tempId); + } + } + FinishGame(_stack); + mode[_stack]=9; + delete mixedStack[_stack]; + delete stacks[_stack]; + delete stackCounter[_counterStack]; + delete stacks[_counterStack]; + delete lastBlock[_stack]; + delete lastActor[_stack]; + delete counterOfStack[_stack]; + delete round[_stack]; + delete commitBlock[_stack]; + delete commit[_stack]; + DrainStack(_stack,_counterStack,msg.sender); + } + event DrainStack(bytes32 stack,bytes32 counterStack,address sender); + function totalSupply() public view returns (uint) { + return items.length - 1; + } + function tokensOfOwner(address _owner) external view returns(uint256[]) { + uint256 tokenCount = balanceOf(_owner); + if (tokenCount == 0) { + return new uint256[](0); + } else { + uint256[] memory result = new uint256[](tokenCount); + uint256 total = totalSupply(); + uint256 resultIndex = 0; + uint256 id; + for (id = 1; id <= total; id++) { + if (tokenIndexToOwner[id] == _owner) { + result[resultIndex] = id; + resultIndex++; + } + } + return result; + } + } + function withdraw(uint256 _amount) public onlyOwner returns (bool) { + require(this.balance >= _amount); + assert(owner.send(_amount)); + return true; + } + function withdrawToken(address _token,uint256 _amount) public onlyOwner returns (bool) { + StandardToken token = StandardToken(_token); + token.transfer(msg.sender,_amount); + return true; + } + function transferStackAndCall(address _to, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data) public returns (bool) { + transfer(_to, _token1); + transfer(_to, _token2); + transfer(_to, _token3); + transfer(_to, _token4); + transfer(_to, _token5); + if (isContract(_to)) { + contractFallback(_to,_token1,_token2,_token3,_token4,_token5,_data); + } + return true; + } + function contractFallback(address _to, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data) private { + StackReceiver receiver = StackReceiver(_to); + receiver.onTransferStack(msg.sender,_token1,_token2,_token3,_token4,_token5,_data); + } + function isContract(address _addr) private returns (bool hasCode) { + uint length; + assembly { length := extcodesize(_addr) } + return length > 0; + } +} +contract StackReceiver { + function onTransferStack(address _sender, uint _token1, uint _token2, uint _token3, uint _token4, uint _token5, bytes32 _data); +} +contract StandardToken { + function transfer(address _to, uint256 _value) public returns (bool) { } +} +contract SlammerTime { + function startSlammerTime(address _player1,uint256[5] _id1,address _player2,uint256[5] _id2) public returns (bool) { } + function transferBack(address _toWhom, uint256 _id) public returns (bool) { } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-15552.sol b/data_full/CVE_clean/2018-15552.sol new file mode 100644 index 00000000..72297d09 --- /dev/null +++ b/data_full/CVE_clean/2018-15552.sol @@ -0,0 +1,73 @@ +pragma solidity ^0.4.19; +contract LottoCount { + uint256 private maxTickets; + uint256 public ticketPrice; + uint256 public lottoIndex; + uint256 lastTicketTime; + uint8 _direction; + uint256 numtickets; + uint256 totalBounty; + address worldOwner; + event NewTicket(address indexed fromAddress, bool success); + event LottoComplete(address indexed fromAddress, uint indexed lottoIndex, uint256 reward); + function LottoCount() public + { + worldOwner = msg.sender; + ticketPrice = 0.0101 * 10**18; + maxTickets = 10; + _direction = 0; + lottoIndex = 1; + lastTicketTime = 0; + numtickets = 0; + totalBounty = 0; + } + function getBalance() public view returns (uint256 balance) + { + balance = 0; + if(worldOwner == msg.sender) balance = this.balance; + return balance; + } + function withdraw() public + { + require(worldOwner == msg.sender); + lottoIndex += 1; + numtickets = 0; + totalBounty = 0; + worldOwner.transfer(this.balance); + } + function getLastTicketTime() public view returns (uint256 time) + { + time = lastTicketTime; + return time; + } + function AddTicket() public payable + { + require(msg.value == ticketPrice); + require(numtickets < maxTickets); + lastTicketTime = now; + numtickets += 1; + totalBounty += ticketPrice; + bool success = numtickets == maxTickets; + NewTicket(msg.sender, success); + if(success) + { + PayWinner(msg.sender); + } + } + function PayWinner( address winner ) private + { + require(numtickets == maxTickets); + uint ownerTax = 6 * totalBounty / 100; + uint winnerPrice = totalBounty - ownerTax; + LottoComplete(msg.sender, lottoIndex, winnerPrice); + lottoIndex += 1; + numtickets = 0; + totalBounty = 0; + if(_direction == 0 && maxTickets < 20) maxTickets += 1; + if(_direction == 1 && maxTickets > 10) maxTickets -= 1; + if(_direction == 0 && maxTickets == 20) _direction = 1; + if(_direction == 1 && maxTickets == 10) _direction = 0; + worldOwner.transfer(ownerTax); + winner.transfer(winnerPrice); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17050.sol b/data_full/CVE_clean/2018-17050.sol new file mode 100644 index 00000000..68f44f35 --- /dev/null +++ b/data_full/CVE_clean/2018-17050.sol @@ -0,0 +1,107 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + revert(); + } +} +contract PolyAi is owned, token { + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function PolyAi( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17071.sol b/data_full/CVE_clean/2018-17071.sol new file mode 100644 index 00000000..ad037bbd --- /dev/null +++ b/data_full/CVE_clean/2018-17071.sol @@ -0,0 +1,42 @@ +pragma solidity ^0.4.24; +contract lucky9io { + bool private gameOn = true; + address private owner = 0x5Bf066c70C2B5e02F1C6723E72e82478Fec41201; + uint private entry_number = 0; + uint private value = 0; + modifier onlyOwner() { + require(msg.sender == owner, "Sender not authorized."); + _; + } + function stopGame() public onlyOwner { + gameOn = false; + owner.transfer(address(this).balance); + } + function () public payable{ + if(gameOn == false) { + msg.sender.transfer(msg.value); + return; + } + if(msg.value * 1000 < 9) { + msg.sender.transfer(msg.value); + return; + } + entry_number = entry_number + 1; + value = address(this).balance; + if(entry_number % 999 == 0) { + msg.sender.transfer(value * 8 / 10); + owner.transfer(value * 11 / 100); + return; + } + if(entry_number % 99 == 0) { + msg.sender.transfer(0.09 ether); + owner.transfer(0.03 ether); + return; + } + if(entry_number % 9 == 0) { + msg.sender.transfer(0.03 ether); + owner.transfer(0.01 ether); + return; + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17111.sol b/data_full/CVE_clean/2018-17111.sol new file mode 100644 index 00000000..bbb12d06 --- /dev/null +++ b/data_full/CVE_clean/2018-17111.sol @@ -0,0 +1,72 @@ +contract ERC20Interface { + function totalSupply() constant returns (uint256 totalSupply); + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + } + contract Coinlancer is ERC20Interface { + string public constant symbol = "CL"; + string public constant name = "Coinlancer"; + uint8 public constant decimals = 18; + uint256 _totalSupply = 300000000000000000000000000; + address public owner; + mapping(address => uint256) balances; + mapping(address => mapping (address => uint256)) allowed; + modifier onlyOwner() { + require(msg.sender != owner); { + } + _; + } + function Coinlancer() { + owner = msg.sender; + balances[owner] = _totalSupply; + } + function totalSupply() constant returns (uint256 totalSupply) { + totalSupply = _totalSupply; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function transfer(address _to, uint256 _amount) returns (bool success) { + if (balances[msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(msg.sender, _to, _amount); + return true; + } else { + return false; + } + } + function transferFrom( + address _from, + address _to, + uint256 _amount + ) returns (bool success) { + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + function approve(address _spender, uint256 _amount) returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17877.sol b/data_full/CVE_clean/2018-17877.sol new file mode 100644 index 00000000..6eada992 --- /dev/null +++ b/data_full/CVE_clean/2018-17877.sol @@ -0,0 +1,267 @@ +pragma solidity ^0.4.0; +contract Owned { + address public owner; + address public newOwner; + event OwnershipTransferred(address indexed _from, address indexed _to); + function Owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address _newOwner) public onlyOwner { + newOwner = _newOwner; + } + function acceptOwnership() public { + require(msg.sender == newOwner); + emit OwnershipTransferred(owner, newOwner); + owner = newOwner; + newOwner = address(0); + } +} +contract Greedy is Owned { + uint public Round = 1; + mapping(uint => uint) public RoundHeart; + mapping(uint => uint) public RoundETH; + mapping(uint => uint) public RoundTime; + mapping(uint => uint) public RoundPayMask; + mapping(uint => address) public RoundLastGreedyMan; + uint256 public Luckybuy; + mapping(uint => mapping(address => uint)) public RoundMyHeart; + mapping(uint => mapping(address => uint)) public RoundMyPayMask; + mapping(address => uint) public MyreferredRevenue; + uint256 public luckybuyTracker_ = 0; + uint256 constant private RoundIncrease = 1 seconds; + uint256 constant private RoundMaxTime = 10 minutes; + uint256 public onwerfee; + using SafeMath for *; + using GreedyHeartCalcLong for uint256; + event winnerEvent(address winnerAddr, uint256 newPot, uint256 round); + event luckybuyEvent(address luckyAddr, uint256 amount, uint256 round); + event buyheartEvent(address Addr, uint256 Heartamount, uint256 ethvalue, uint256 round, address ref); + event referredEvent(address Addr, address RefAddr, uint256 ethvalue); + event withdrawEvent(address Addr, uint256 ethvalue, uint256 Round); + event withdrawRefEvent(address Addr, uint256 ethvalue); + event withdrawOwnerEvent(uint256 ethvalue); + function getHeartPrice() public view returns(uint256) + { + return ( (RoundHeart[Round].add(1000000000000000000)).ethRec(1000000000000000000) ); + } + function getMyRevenue(uint _round) public view returns(uint256) + { + return( (((RoundPayMask[_round]).mul(RoundMyHeart[_round][msg.sender])) / (1000000000000000000)).sub(RoundMyPayMask[_round][msg.sender]) ); + } + function getTimeLeft() public view returns(uint256) + { + if(RoundTime[Round] == 0 || RoundTime[Round] < now) + return 0; + else + return( (RoundTime[Round]).sub(now) ); + } + function updateTimer(uint256 _hearts) private + { + if(RoundTime[Round] == 0) + RoundTime[Round] = RoundMaxTime.add(now); + uint _newTime = (((_hearts) / (1000000000000000000)).mul(RoundIncrease)).add(RoundTime[Round]); + if (_newTime < (RoundMaxTime).add(now)) + RoundTime[Round] = _newTime; + else + RoundTime[Round] = RoundMaxTime.add(now); + } + function buyHeart(address referred) public payable { + require(msg.value >= 1000000000, "pocket lint: not a valid currency"); + require(msg.value <= 100000000000000000000000, "no vitalik, no"); + address _addr = msg.sender; + uint256 _codeLength; + assembly {_codeLength := extcodesize(_addr)} + require(_codeLength == 0, "sorry humans only"); + uint256 _hearts = (RoundETH[Round]).keysRec(msg.value); + uint256 _pearn; + require(_hearts >= 1000000000000000000); + require(RoundTime[Round] > now || RoundTime[Round] == 0); + updateTimer(_hearts); + RoundHeart[Round] += _hearts; + RoundMyHeart[Round][msg.sender] += _hearts; + if (referred != address(0) && referred != msg.sender) + { + _pearn = (((msg.value.mul(30) / 100).mul(1000000000000000000)) / (RoundHeart[Round])).mul(_hearts)/ (1000000000000000000); + onwerfee += (msg.value.mul(4) / 100); + RoundETH[Round] += msg.value.mul(54) / 100; + Luckybuy += msg.value.mul(2) / 100; + MyreferredRevenue[referred] += (msg.value.mul(10) / 100); + RoundPayMask[Round] += ((msg.value.mul(30) / 100).mul(1000000000000000000)) / (RoundHeart[Round]); + RoundMyPayMask[Round][msg.sender] = (((RoundPayMask[Round].mul(_hearts)) / (1000000000000000000)).sub(_pearn)).add(RoundMyPayMask[Round][msg.sender]); + emit referredEvent(msg.sender, referred, msg.value.mul(10) / 100); + } else { + _pearn = (((msg.value.mul(40) / 100).mul(1000000000000000000)) / (RoundHeart[Round])).mul(_hearts)/ (1000000000000000000); + RoundETH[Round] += msg.value.mul(54) / 100; + Luckybuy += msg.value.mul(2) / 100; + onwerfee +=(msg.value.mul(4) / 100); + RoundPayMask[Round] += ((msg.value.mul(40) / 100).mul(1000000000000000000)) / (RoundHeart[Round]); + RoundMyPayMask[Round][msg.sender] = (((RoundPayMask[Round].mul(_hearts)) / (1000000000000000000)).sub(_pearn)).add(RoundMyPayMask[Round][msg.sender]); + } + if (msg.value >= 100000000000000000){ + luckybuyTracker_++; + if (luckyBuy() == true) + { + msg.sender.transfer(Luckybuy); + emit luckybuyEvent(msg.sender, Luckybuy, Round); + luckybuyTracker_ = 0; + Luckybuy = 0; + } + } + RoundLastGreedyMan[Round] = msg.sender; + emit buyheartEvent(msg.sender, _hearts, msg.value, Round, referred); + } + function win() public { + require(now > RoundTime[Round] && RoundTime[Round] != 0); + RoundLastGreedyMan[Round].transfer(RoundETH[Round]); + emit winnerEvent(RoundLastGreedyMan[Round], RoundETH[Round], Round); + Round++; + } + function withdraw(uint _round) public { + uint _revenue = getMyRevenue(_round); + uint _revenueRef = MyreferredRevenue[msg.sender]; + RoundMyPayMask[_round][msg.sender] += _revenue; + MyreferredRevenue[msg.sender] = 0; + msg.sender.transfer(_revenue + _revenueRef); + emit withdrawRefEvent( msg.sender, _revenue); + emit withdrawEvent(msg.sender, _revenue, _round); + } + function withdrawOwner() public onlyOwner { + uint _revenue = onwerfee; + msg.sender.transfer(_revenue); + onwerfee = 0; + emit withdrawOwnerEvent(_revenue); + } + function luckyBuy() private view returns(bool) + { + uint256 seed = uint256(keccak256(abi.encodePacked( + (block.timestamp).add + (block.difficulty).add + ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add + (block.gaslimit).add + ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add + (block.number) + ))); + if((seed - ((seed / 1000) * 1000)) < luckybuyTracker_) + return(true); + else + return(false); + } + function getFullround()public view returns(uint[] round,uint[] pot, address[] whowin,uint[] mymoney) { + uint[] memory whichRound = new uint[](Round); + uint[] memory totalPool = new uint[](Round); + address[] memory winner = new address[](Round); + uint[] memory myMoney = new uint[](Round); + uint counter = 0; + for (uint i = 1; i <= Round; i++) { + whichRound[counter] = i; + totalPool[counter] = RoundETH[i]; + winner[counter] = RoundLastGreedyMan[i]; + myMoney[counter] = getMyRevenue(i); + counter++; + } + return (whichRound,totalPool,winner,myMoney); + } +} +library GreedyHeartCalcLong { + using SafeMath for *; + function keysRec(uint256 _curEth, uint256 _newEth) + internal + pure + returns (uint256) + { + return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); + } + function ethRec(uint256 _curKeys, uint256 _sellKeys) + internal + pure + returns (uint256) + { + return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); + } + function keys(uint256 _eth) + internal + pure + returns(uint256) + { + return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); + } + function eth(uint256 _keys) + internal + pure + returns(uint256) + { + return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); + } +} +library SafeMath { + function mul(uint256 a, uint256 b) + internal + pure + returns (uint256 c) + { + if (a == 0) { + return 0; + } + c = a * b; + require(c / a == b, "SafeMath mul failed"); + return c; + } + function sub(uint256 a, uint256 b) + internal + pure + returns (uint256) + { + require(b <= a, "SafeMath sub failed"); + return a - b; + } + function add(uint256 a, uint256 b) + internal + pure + returns (uint256 c) + { + c = a + b; + require(c >= a, "SafeMath add failed"); + return c; + } + function sqrt(uint256 x) + internal + pure + returns (uint256 y) + { + uint256 z = ((add(x,1)) / 2); + y = x; + while (z < y) + { + y = z; + z = ((add((x / z),z)) / 2); + } + } + function sq(uint256 x) + internal + pure + returns (uint256) + { + return (mul(x,x)); + } + function pwr(uint256 x, uint256 y) + internal + pure + returns (uint256) + { + if (x==0) + return (0); + else if (y==0) + return (1); + else + { + uint256 z = x; + for (uint256 i=1; i < y; i++) + z = mul(z,x); + return (z); + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17882.sol b/data_full/CVE_clean/2018-17882.sol new file mode 100644 index 00000000..d2b582a9 --- /dev/null +++ b/data_full/CVE_clean/2018-17882.sol @@ -0,0 +1,79 @@ +pragma solidity ^0.4.18; +contract Ownable { + address public owner; + function Ownable() public { + owner = msg.sender; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) public onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } +} +contract BattleToken is Ownable { + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + uint256 constant private MAX_UINT256 = 2**256 - 1; + mapping (address => uint256) public balances; + mapping (address => mapping (address => uint256)) public allowed; + uint256 public totalSupply; + string public name = "https: + uint8 public decimals = 0; + string public symbol = "CBTB"; + address public fights; + function setFightsAddress(address _fights) public onlyOwner { + fights = _fights; + } + function create(uint _amount) public onlyOwner { + balances[msg.sender] = safeAdd(balances[msg.sender], _amount); + totalSupply = safeAdd(totalSupply, _amount); + } + function transfer(address _to, uint256 _value) public returns (bool success) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + function batchTransfer(address[] _to, uint _value) public { + balances[msg.sender] = safeSub( + balances[msg.sender], _to.length * _value + ); + for (uint i = 0; i < _to.length; i++) { + balances[_to[i]] = safeAdd(balances[_to[i]], _value); + Transfer(msg.sender, _to[i], _value); + } + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + if (_to != fights) { + allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value); + } + Transfer(_from, _to, _value); + return true; + } + function balanceOf(address _owner) public view returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) public view returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } + function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17968.sol b/data_full/CVE_clean/2018-17968.sol new file mode 100644 index 00000000..25e259cd --- /dev/null +++ b/data_full/CVE_clean/2018-17968.sol @@ -0,0 +1,156 @@ +pragma solidity ^0.4.8; +contract RuletkaIo { + event partyOver(uint256 roomId, address victim, address[] winners); + event newPlayer(uint256 roomId, address player); + event fullRoom(uint256 roomId); + event roomRefunded(uint256 _roomId, address[] refundedPlayers); + address CTO; + address CEO; + Room[] private allRooms; + function () public payable {} + function RuletkaIo() public { + CTO = msg.sender; + CEO = msg.sender; + } + modifier onlyCTO() { + require(msg.sender == CTO); + _; + } + function setCTO(address _newCTO) public onlyCTO { + require(_newCTO != address(0)); + CTO = _newCTO; + } + function setCEO(address _newCEO) public onlyCTO { + require(_newCEO != address(0)); + CEO = _newCEO; + } + struct Room { + string name; + uint256 entryPrice; + uint256 balance; + address[] players; + } + function createRoom(string _name, uint256 _entryPrice) public onlyCTO{ + address[] memory players; + Room memory _room = Room({ + name: _name, + players: players, + balance: 0, + entryPrice: _entryPrice + }); + allRooms.push(_room); + } + function enter(uint256 _roomId) public payable { + Room storage room = allRooms[_roomId-1]; + require(room.players.length < 6); + require(msg.value >= room.entryPrice); + room.players.push(msg.sender); + room.balance += room.entryPrice; + emit newPlayer(_roomId, msg.sender); + if(room.players.length == 6){ + executeRoom(_roomId); + } + } + function enterWithReferral(uint256 _roomId, address referrer) public payable { + Room storage room = allRooms[_roomId-1]; + require(room.players.length < 6); + require(msg.value >= room.entryPrice); + uint256 referrerCut = SafeMath.div(room.entryPrice, 100); + referrer.transfer(referrerCut); + room.players.push(msg.sender); + room.balance += room.entryPrice - referrerCut; + emit newPlayer(_roomId, msg.sender); + if(room.players.length == 6){ + emit fullRoom(_roomId); + executeRoom(_roomId); + } + } + function executeRoom(uint256 _roomId) public { + Room storage room = allRooms[_roomId-1]; + require(room.players.length == 6); + uint256 halfFee = SafeMath.div(room.entryPrice, 20); + CTO.transfer(halfFee); + CEO.transfer(halfFee); + room.balance -= halfFee * 2; + uint256 deadSeat = random(); + distributeFunds(_roomId, deadSeat); + delete room.players; + } + function distributeFunds(uint256 _roomId, uint256 _deadSeat) private returns(uint256) { + Room storage room = allRooms[_roomId-1]; + uint256 balanceToDistribute = SafeMath.div(room.balance,5); + address victim = room.players[_deadSeat]; + address[] memory winners = new address[](5); + uint256 j = 0; + for (uint i = 0; i<6; i++) { + if(i != _deadSeat){ + room.players[i].transfer(balanceToDistribute); + room.balance -= balanceToDistribute; + winners[j] = room.players[i]; + j++; + } + } + emit partyOver(_roomId, victim, winners); + return address(this).balance; + } + function refundPlayersInRoom(uint256 _roomId) public onlyCTO{ + Room storage room = allRooms[_roomId-1]; + uint256 nbrOfPlayers = room.players.length; + uint256 balanceToRefund = SafeMath.div(room.balance,nbrOfPlayers); + for (uint i = 0; i= a); + return c; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-17987.sol b/data_full/CVE_clean/2018-17987.sol new file mode 100644 index 00000000..56a43471 --- /dev/null +++ b/data_full/CVE_clean/2018-17987.sol @@ -0,0 +1,149 @@ +pragma solidity ^0.4.13; +contract Tiles { + uint public constant NUM_TILES = 256; + uint constant SIDE_LENGTH = 16; + uint private constant STARTING_GAME_NUMBER = 1; + uint public DEFAULT_GAME_COST = 5000000000000000; + address private owner; + uint public currentGameNumber; + uint public currentGameBalance; + uint public numTilesClaimed; + Tile[16][16] public tiles; + bool public gameStopped; + uint public gameEarnings; + bool public willChangeCost; + uint public currentGameCost; + uint public nextGameCost; + mapping (address => uint) public pendingWithdrawals; + mapping (uint => address) public gameToWinner; + struct Tile { + uint gameClaimed; + address claimedBy; + } + event GameWon(uint indexed gameNumber, address indexed winner); + event TileClaimed(uint indexed gameNumber, uint indexed xCoord, uint indexed yCoord, address claimedBy); + event WinningsClaimed(address indexed claimedBy, uint indexed amountClaimed); + event FailedToClaim(address indexed claimedBy, uint indexed amountToClaim); + event PrintWinningInfo(bytes32 hash, uint xCoord, uint yCoord); + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + modifier gameRunning() { + require(!gameStopped); + _; + } + modifier gameNotRunning() { + require(gameStopped == true); + _; + } + function Tiles() payable { + owner = msg.sender; + currentGameNumber = STARTING_GAME_NUMBER; + currentGameCost = DEFAULT_GAME_COST; + numTilesClaimed = 0; + gameStopped = false; + gameEarnings = 0; + willChangeCost = false; + nextGameCost = DEFAULT_GAME_COST; + } + function cancelContract() onlyOwner returns (bool) { + gameStopped = true; + refundTiles(); + refundWinnings(); + } + function getRightCoordinate(byte input) returns(uint) { + byte val = input & byte(15); + return uint(val); + } + function getLeftCoordinate(byte input) returns(uint) { + byte val = input >> 4; + return uint(val); + } + function determineWinner() private { + bytes32 winningHash = block.blockhash(block.number - 1); + byte winningPair = winningHash[31]; + uint256 winningX = getRightCoordinate(winningPair); + uint256 winningY = getLeftCoordinate(winningPair); + address winner = tiles[winningX][winningY].claimedBy; + PrintWinningInfo(winningHash, winningX, winningY); + GameWon(currentGameNumber, winner); + resetGame(winner); + } + function claimTile(uint xCoord, uint yCoord, uint gameNumber) gameRunning payable { + if (gameNumber != currentGameNumber || tiles[xCoord][yCoord].gameClaimed == currentGameNumber) { + revert(); + } + require(msg.value == currentGameCost); + currentGameBalance += msg.value; + tiles[xCoord][yCoord] = Tile(currentGameNumber, msg.sender); + TileClaimed(currentGameNumber, xCoord, yCoord, msg.sender); + numTilesClaimed += 1; + if (numTilesClaimed == NUM_TILES) { + determineWinner(); + } + } + function resetGame(address winner) private { + uint winningAmount = uint(currentGameBalance) * uint(9) / uint(10); + uint remainder = currentGameBalance - winningAmount; + currentGameBalance = 0; + gameToWinner[currentGameNumber] = winner; + currentGameNumber++; + numTilesClaimed = 0; + pendingWithdrawals[winner] += winningAmount; + gameEarnings += remainder; + if (willChangeCost) { + currentGameCost = nextGameCost; + willChangeCost = false; + } + } + function refundTiles() private { + Tile memory currTile; + for (uint i = 0; i < SIDE_LENGTH; i++) { + for (uint j = 0; j < SIDE_LENGTH; j++) { + currTile = tiles[i][j]; + if (currTile.gameClaimed == currentGameNumber) { + if (currTile.claimedBy.send(currentGameCost)) { + tiles[i][j] = Tile(0, 0x0); + } + } + } + } + } + function refundWinnings() private { + address currAddress; + uint currAmount; + for (uint i = STARTING_GAME_NUMBER; i < currentGameNumber; i++) { + currAddress = gameToWinner[i]; + currAmount = pendingWithdrawals[currAddress]; + if (currAmount != 0) { + if (currAddress.send(currAmount)) { + pendingWithdrawals[currAddress] = 0; + } + } + } + } + function claimWinnings() { + if (pendingWithdrawals[msg.sender] != 0) { + if (msg.sender.send(pendingWithdrawals[msg.sender])) { + WinningsClaimed(msg.sender, pendingWithdrawals[msg.sender]); + pendingWithdrawals[msg.sender] = 0; + } else { + FailedToClaim(msg.sender, pendingWithdrawals[msg.sender]); + } + } + } + function updateGameCost(uint newGameCost) onlyOwner returns (bool) { + if (newGameCost > 0) { + nextGameCost = newGameCost; + willChangeCost = true; + } + } + function claimOwnersEarnings() onlyOwner { + if (gameEarnings != 0) { + if (owner.send(gameEarnings)) { + gameEarnings = 0; + } + } + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-18425.sol b/data_full/CVE_clean/2018-18425.sol new file mode 100644 index 00000000..9a85f1d2 --- /dev/null +++ b/data_full/CVE_clean/2018-18425.sol @@ -0,0 +1,179 @@ +pragma solidity ^0.4.18; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { + if (a == 0) { + return 0; + } + c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + return a / b; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256 c) { + c = a + b; + assert(c >= a); + return c; + } +} +contract AltcoinToken { + function balanceOf(address _owner) constant public returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool); +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract Primeo is ERC20 { + using SafeMath for uint256; + address owner = msg.sender; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + string public constant name = "Primeo"; + string public constant symbol = "PEO"; + uint public constant decimals = 8; + uint256 public totalSupply = 10000000000e8; + uint256 public totalDistributed = 0; + uint256 public tokensPerEth = 10000000e8; + uint256 public constant minContribution = 1 ether / 100; + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + event Distr(address indexed to, uint256 amount); + event DistrFinished(); + event Airdrop(address indexed _owner, uint _amount, uint _balance); + event TokensPerEthUpdated(uint _tokensPerEth); + event Burn(address indexed burner, uint256 value); + bool public distributionFinished = false; + modifier canDistr() { + require(!distributionFinished); + _; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + owner = newOwner; + } + } + function finishDistribution() onlyOwner canDistr public returns (bool) { + distributionFinished = true; + emit DistrFinished(); + return true; + } + function distr(address _to, uint256 _amount) canDistr private returns (bool) { + totalDistributed = totalDistributed.add(_amount); + balances[_to] = balances[_to].add(_amount); + emit Distr(_to, _amount); + emit Transfer(address(0), _to, _amount); + return true; + } + function doAirdrop(address _participant, uint _amount) internal { + require( _amount > 0 ); + require( totalDistributed < totalSupply ); + balances[_participant] = balances[_participant].add(_amount); + totalDistributed = totalDistributed.add(_amount); + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + emit Airdrop(_participant, _amount, balances[_participant]); + emit Transfer(address(0), _participant, _amount); + } + function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { + doAirdrop(_participant, _amount); + } + function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { + for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); + } + function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { + tokensPerEth = _tokensPerEth; + emit TokensPerEthUpdated(_tokensPerEth); + } + function () external payable { + getTokens(); + } + function getTokens() payable canDistr public { + uint256 tokens = 0; + require( msg.value >= minContribution ); + require( msg.value > 0 ); + tokens = tokensPerEth.mul(msg.value) / 1 ether; + address investor = msg.sender; + if (tokens > 0) { + distr(investor, tokens); + } + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + function balanceOf(address _owner) constant public returns (uint256) { + return balances[_owner]; + } + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(msg.sender, _to, _amount); + return true; + } + function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[_from]); + require(_amount <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(_from, _to, _amount); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + emit Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant public returns (uint256) { + return allowed[_owner][_spender]; + } + function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ + AltcoinToken t = AltcoinToken(tokenAddress); + uint bal = t.balanceOf(who); + return bal; + } + function withdraw() onlyOwner public { + address myAddress = this; + uint256 etherBalance = myAddress.balance; + owner.transfer(etherBalance); + } + function burn(uint256 _value) onlyOwner public { + require(_value <= balances[msg.sender]); + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + totalDistributed = totalDistributed.sub(_value); + emit Burn(burner, _value); + } + function withdrawAltcoinTokens(address _tokenContract) onlyOwner public returns (bool) { + AltcoinToken token = AltcoinToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-18665.sol b/data_full/CVE_clean/2018-18665.sol new file mode 100644 index 00000000..7ebc7bed --- /dev/null +++ b/data_full/CVE_clean/2018-18665.sol @@ -0,0 +1,73 @@ +pragma solidity ^0.4.11; +contract Token { + uint256 public totalSupply; + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract StandardToken is Token { + bool public disabled = false; + function transfer(address _to, uint256 _value) returns (bool success) { + if (disabled != true && balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (disabled != true && balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; +} +contract NexxusToken is StandardToken { + function () {return;} + string public name = "Nexxus"; + uint8 public decimals = 8; + string public symbol = "NXX"; + address public owner; + function NexxusToken() { + totalSupply = 31800000000000000; + owner = msg.sender; + balances[owner] = totalSupply; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { return; } + return true; + } + function mintToken(uint256 _amount) { + if (msg.sender == owner) { + totalSupply += _amount; + balances[owner] += _amount; + Transfer(0, owner, _amount); + } + } + function disableToken(bool _disable) { + if (msg.sender == owner) + disabled = _disable; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19830.sol b/data_full/CVE_clean/2018-19830.sol new file mode 100644 index 00000000..abe20d12 --- /dev/null +++ b/data_full/CVE_clean/2018-19830.sol @@ -0,0 +1,140 @@ +pragma solidity ^0.4.24; +library SafeMath { + function mul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint a, uint b) internal returns (uint) { + uint c = a / b; + return c; + } + function sub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + function add(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c >= a); + return c; + } + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} +contract ERC20Basic { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function transfer(address to, uint value); + event Transfer(address indexed from, address indexed to, uint value); + function allowance(address owner, address spender) constant returns (uint); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint; + address public owner; + bool public transferable = true; + mapping(address => uint) balances; + mapping (address => bool) public frozenAccount; + modifier onlyPayloadSize(uint size) { + if(msg.data.length < size + 4) { + throw; + } + _; + } + modifier unFrozenAccount{ + require(!frozenAccount[msg.sender]); + _; + } + modifier onlyOwner { + if (owner == msg.sender) { + _; + } else { + InvalidCaller(msg.sender); + throw; + } + } + modifier onlyTransferable { + if (transferable) { + _; + } else { + LiquidityAlarm("The liquidity is switched off"); + throw; + } + } + event FrozenFunds(address target, bool frozen); + event InvalidCaller(address caller); + event Burn(address caller, uint value); + event OwnershipTransferred(address indexed from, address indexed to); + event InvalidAccount(address indexed addr, bytes msg); + event LiquidityAlarm(bytes msg); + function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) unFrozenAccount onlyTransferable { + if (frozenAccount[_to]) { + InvalidAccount(_to, "The receiver account is frozen"); + } else { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + } + } + function balanceOf(address _owner) view returns (uint balance) { + return balances[_owner]; + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target]=freeze; + FrozenFunds(target, freeze); + } + function accountFrozenStatus(address target) view returns (bool frozen) { + return frozenAccount[target]; + } + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + address oldOwner=owner; + owner = newOwner; + OwnershipTransferred(oldOwner, owner); + } + } + function switchLiquidity (bool _transferable) onlyOwner returns (bool success) { + transferable=_transferable; + return true; + } + function liquidityStatus () view returns (bool _transferable) { + return transferable; + } +} +contract StandardToken is BasicToken { + mapping (address => mapping (address => uint)) allowed; + function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) unFrozenAccount onlyTransferable{ + var _allowance = allowed[_from][msg.sender]; + require(!frozenAccount[_from]&&!frozenAccount[_to]); + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + } + function approve(address _spender, uint _value) unFrozenAccount { + if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + } + function allowance(address _owner, address _spender) view returns (uint remaining) { + return allowed[_owner][_spender]; + } +} +contract BAFCToken is StandardToken { + string public name = "Business Alliance Financial Circle"; + string public symbol = "BAFC"; + uint public decimals = 18; + function UBSexToken() { + owner = msg.sender; + totalSupply = 1.9 * 10 ** 26; + balances[owner] = totalSupply; + } + function () public payable { + revert(); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19831.sol b/data_full/CVE_clean/2018-19831.sol new file mode 100644 index 00000000..4ab1f0fe --- /dev/null +++ b/data_full/CVE_clean/2018-19831.sol @@ -0,0 +1,233 @@ +pragma solidity ^0.4.19; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ForeignToken { + function balanceOf(address _owner) constant public returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool); +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +interface Token { + function distr(address _to, uint256 _value) public returns (bool); + function totalSupply() constant public returns (uint256 supply); + function balanceOf(address _owner) constant public returns (uint256 balance); +} +contract Cryptbond is ERC20 { + using SafeMath for uint256; + address owner = msg.sender; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + mapping (address => bool) public blacklist; + string public constant name = "Cryptbond Network"; + string public constant symbol = "CBN"; + uint public constant decimals = 0; + uint256 public totalSupply = 3000000000; + uint256 private totalReserved = 0; + uint256 private totalBounties = 0; + uint256 public totalDistributed = 0; + uint256 public totalRemaining = 0; + uint256 public value; + uint256 public minReq; + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + event Distr(address indexed to, uint256 amount); + event DistrFinished(); + event Burn(address indexed burner, uint256 value); + bool public distributionFinished = false; + modifier canDistr() { + require(!distributionFinished); + _; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + modifier onlyWhitelist() { + require(blacklist[msg.sender] == false); + _; + } + function ToOwner( + ) public { + balances[msg.sender] = totalSupply; + owner = msg.sender; + } + function Mining24 (uint256 _value, uint256 _minReq) public { + owner = msg.sender; + value = _value; + minReq = _minReq; + balances[msg.sender] = totalDistributed; + } + function setParameters (uint256 _value, uint256 _minReq) onlyOwner public { + value = _value; + minReq = _minReq; + } + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + owner = newOwner; + } + } + function enableWhitelist(address[] addresses) onlyOwner public { + for (uint i = 0; i < addresses.length; i++) { + blacklist[addresses[i]] = false; + } + } + function disableWhitelist(address[] addresses) onlyOwner public { + for (uint i = 0; i < addresses.length; i++) { + blacklist[addresses[i]] = true; + } + } + function finishDistribution() onlyOwner canDistr public returns (bool) { + distributionFinished = true; + DistrFinished(); + return true; + } + function distr(address _to, uint256 _amount) canDistr private returns (bool) { + totalDistributed = totalDistributed.add(_amount); + totalRemaining = totalRemaining.sub(_amount); + balances[_to] = balances[_to].add(_amount); + Distr(_to, _amount); + Transfer(address(0), _to, _amount); + return true; + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + function airdrop(address[] addresses) onlyOwner canDistr public { + require(addresses.length <= 255); + require(value <= totalRemaining); + for (uint i = 0; i < addresses.length; i++) { + require(value <= totalRemaining); + distr(addresses[i], value); + } + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { + require(addresses.length <= 255); + require(amount <= totalRemaining); + for (uint i = 0; i < addresses.length; i++) { + require(amount <= totalRemaining); + distr(addresses[i], amount); + } + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { + require(addresses.length <= 255); + require(addresses.length == amounts.length); + for (uint8 i = 0; i < addresses.length; i++) { + require(amounts[i] <= totalRemaining); + distr(addresses[i], amounts[i]); + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + } + uint price = 0.000001 ether; + function() public payable { + uint toMint = msg.value/price; + balances[msg.sender]+=toMint; + Transfer(0,msg.sender,toMint); + } + function getTokens() payable canDistr onlyWhitelist public { + require(value <= totalRemaining); + address investor = msg.sender; + uint256 toGive = value; + if (msg.value < minReq){ + toGive = value.sub(value); + } + distr(investor, toGive); + if (toGive > 0) { + blacklist[investor] = true; + } + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + function balanceOf(address _owner) constant public returns (uint256) { + return balances[_owner]; + } + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + Transfer(msg.sender, _to, _amount); + return true; + } + function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[_from]); + require(_amount <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + Transfer(_from, _to, _amount); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant public returns (uint256) { + return allowed[_owner][_spender]; + } + function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ + ForeignToken t = ForeignToken(tokenAddress); + uint bal = t.balanceOf(who); + return bal; + } + function withdraw() onlyOwner public { + uint256 etherBalance = this.balance; + owner.transfer(etherBalance); + } + function burn(uint256 _value) onlyOwner public { + require(_value <= balances[msg.sender]); + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + totalDistributed = totalDistributed.sub(_value); + Burn(burner, _value); + } + function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19832.sol b/data_full/CVE_clean/2018-19832.sol new file mode 100644 index 00000000..3c1a7c6f --- /dev/null +++ b/data_full/CVE_clean/2018-19832.sol @@ -0,0 +1,174 @@ +pragma solidity ^0.4.24; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ForeignToken { + function balanceOf(address _owner) constant public returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool); +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +interface Token { + function distr(address _to, uint256 _value) external returns (bool); + function totalSupply() constant external returns (uint256 supply); + function balanceOf(address _owner) constant external returns (uint256 balance); +} +contract NewIntelTechMedia is ERC20 { + using SafeMath for uint256; + address owner = msg.sender; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + mapping (address => bool) public blacklist; + string public constant name = "NewIntelTechMedia"; + string public constant symbol = "NETM"; + uint public constant decimals = 18; + uint256 public totalSupply = 500000000e18; + uint256 public totalDistributed = 250000000e18; + uint256 public totalRemaining = totalSupply.sub(totalDistributed); + uint256 public value = 2500e18; + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + event Distr(address indexed to, uint256 amount); + event DistrFinished(); + event Burn(address indexed burner, uint256 value); + bool public distributionFinished = false; + modifier canDistr() { + require(!distributionFinished); + _; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + modifier onlyWhitelist() { + require(blacklist[msg.sender] == false); + _; + } + function NETM() public { + owner = msg.sender; + balances[owner] = totalDistributed; + } + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + owner = newOwner; + } + } + function finishDistribution() onlyOwner canDistr public returns (bool) { + distributionFinished = true; + emit DistrFinished(); + return true; + } + function distr(address _to, uint256 _amount) canDistr private returns (bool) { + totalDistributed = totalDistributed.add(_amount); + totalRemaining = totalRemaining.sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Distr(_to, _amount); + emit Transfer(address(0), _to, _amount); + return true; + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + function () external payable { + getTokens(); + } + function getTokens() payable canDistr onlyWhitelist public { + if (value > totalRemaining) { + value = totalRemaining; + } + require(value <= totalRemaining); + address investor = msg.sender; + uint256 toGive = value; + distr(investor, toGive); + if (toGive > 0) { + blacklist[investor] = true; + } + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + value = value.div(100000).mul(99999); + } + function balanceOf(address _owner) constant public returns (uint256) { + return balances[_owner]; + } + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(msg.sender, _to, _amount); + return true; + } + function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[_from]); + require(_amount <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(_from, _to, _amount); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + emit Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant public returns (uint256) { + return allowed[_owner][_spender]; + } + function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ + ForeignToken t = ForeignToken(tokenAddress); + uint bal = t.balanceOf(who); + return bal; + } + function withdraw() onlyOwner public { + uint256 etherBalance = address(this).balance; + owner.transfer(etherBalance); + } + function burn(uint256 _value) onlyOwner public { + require(_value <= balances[msg.sender]); + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + totalDistributed = totalDistributed.sub(_value); + emit Burn(burner, _value); + } + function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19833.sol b/data_full/CVE_clean/2018-19833.sol new file mode 100644 index 00000000..273f90c0 --- /dev/null +++ b/data_full/CVE_clean/2018-19833.sol @@ -0,0 +1,60 @@ +pragma solidity ^0.4.24; +contract ERCDDAToken { + address public owner; + string public name; + string public symbol; + uint8 public decimals = 0; + uint256 public totalSupply; + event Transfer(address indexed from, address indexed to, uint256 value); + event FrozenFunds(address target, bool frozen); + event Burn(address indexed from, uint256 value); + mapping (address => uint256) public balanceOf; + mapping (address => bool) public frozenAccount; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + constructor( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + owner = msg.sender; + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + function burn(uint256 _value) onlyOwner public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public{ + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2018-19834.sol b/data_full/CVE_clean/2018-19834.sol new file mode 100644 index 00000000..b9d4b905 --- /dev/null +++ b/data_full/CVE_clean/2018-19834.sol @@ -0,0 +1,139 @@ +pragma solidity ^0.4.18; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b > 0); + uint256 c = a / b; + assert(a == b * c + a % b); + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract Ownable { + address public owner; + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + function Ownable() public { + owner = msg.sender; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + require(newOwner != address(0)); + OwnershipTransferred(owner, newOwner); + owner = newOwner; + } +} +contract ERC20Interface { + function totalSupply() public constant returns (uint); + function balanceOf(address tokenOwner) public constant returns (uint balance); + function allowance(address tokenOwner, address spender) public constant returns (uint remaining); + function transfer(address to, uint tokens) public returns (bool success); + function approve(address spender, uint tokens) public returns (bool success); + function transferFrom(address from, address to, uint tokens) public returns (bool success); + event Transfer(address indexed from, address indexed to, uint tokens); + event Approval(address indexed tokenOwner, address indexed spender, uint tokens); +} +interface OldXRPCToken { + function transfer(address receiver, uint amount) external; + function balanceOf(address _owner) external returns (uint256 balance); + function mint(address wallet, address buyer, uint256 tokenAmount) external; + function showMyTokenBalance(address addr) external; +} +contract BOMBBA is ERC20Interface,Ownable { + using SafeMath for uint256; + uint256 public totalSupply; + mapping(address => uint256) tokenBalances; + string public constant name = "BOMBBA"; + string public constant symbol = "BOMB"; + uint256 public constant decimals = 18; + uint256 public constant INITIAL_SUPPLY = 10000000; + address ownerWallet; + mapping (address => mapping (address => uint256)) allowed; + event Debug(string message, address addr, uint256 number); + function quaker(address wallet) public { + owner = msg.sender; + ownerWallet=wallet; + totalSupply = INITIAL_SUPPLY * 10 ** 18; + tokenBalances[wallet] = INITIAL_SUPPLY * 10 ** 18; + } + function transfer(address _to, uint256 _value) public returns (bool) { + require(tokenBalances[msg.sender]>=_value); + tokenBalances[msg.sender] = tokenBalances[msg.sender].sub(_value); + tokenBalances[_to] = tokenBalances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + require(_to != address(0)); + require(_value <= tokenBalances[_from]); + require(_value <= allowed[_from][msg.sender]); + tokenBalances[_from] = tokenBalances[_from].sub(_value); + tokenBalances[_to] = tokenBalances[_to].add(_value); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function totalSupply() public constant returns (uint) { + return totalSupply - tokenBalances[address(0)]; + } + function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { + return allowed[tokenOwner][spender]; + } + function increaseApproval(address _spender, uint _addedValue) public returns (bool) { + allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { + uint oldValue = allowed[msg.sender][_spender]; + if (_subtractedValue > oldValue) { + allowed[msg.sender][_spender] = 0; + } else { + allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); + } + Approval(msg.sender, _spender, allowed[msg.sender][_spender]); + return true; + } + function () public payable { + revert(); + } + function balanceOf(address _owner) constant public returns (uint256 balance) { + return tokenBalances[_owner]; + } + function mint(address wallet, address buyer, uint256 tokenAmount) public onlyOwner { + require(tokenBalances[wallet] >= tokenAmount); + tokenBalances[buyer] = tokenBalances[buyer].add(tokenAmount); + tokenBalances[wallet] = tokenBalances[wallet].add(tokenAmount); + Transfer(wallet, buyer, tokenAmount); + totalSupply=totalSupply.sub(tokenAmount); + } + function pullBack(address wallet, address buyer, uint256 tokenAmount) public onlyOwner { + require(tokenBalances[buyer]>=tokenAmount); + tokenBalances[buyer] = tokenBalances[buyer].sub(tokenAmount); + tokenBalances[wallet] = tokenBalances[wallet].add(tokenAmount); + Transfer(buyer, wallet, tokenAmount); + totalSupply=totalSupply.add(tokenAmount); + } + function showMyTokenBalance(address addr) public view returns (uint tokenBalance) { + tokenBalance = tokenBalances[addr]; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2019-15078.sol b/data_full/CVE_clean/2019-15078.sol new file mode 100644 index 00000000..28dbeb69 --- /dev/null +++ b/data_full/CVE_clean/2019-15078.sol @@ -0,0 +1,174 @@ +pragma solidity ^0.4.22; +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract ForeignToken { + function balanceOf(address _owner) constant public returns (uint256); + function transfer(address _to, uint256 _value) public returns (bool); +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) public constant returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) public constant returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +interface Token { + function distr(address _to, uint256 _value) external returns (bool); + function totalSupply() constant external returns (uint256 supply); + function balanceOf(address _owner) constant external returns (uint256 balance); +} +contract XBORNID is ERC20 { + using SafeMath for uint256; + address owner = msg.sender; + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + mapping (address => bool) public blacklist; + string public constant name = "XBORN ID"; + string public constant symbol = "XBornID"; + uint public constant decimals = 18; +uint256 public totalSupply = 500000000e18; +uint256 public totalDistributed = 200000000e18; +uint256 public totalRemaining = totalSupply.sub(totalDistributed); +uint256 public value = 1000e18; + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + event Distr(address indexed to, uint256 amount); + event DistrFinished(); + event Burn(address indexed burner, uint256 value); + bool public distributionFinished = false; + modifier canDistr() { + require(!distributionFinished); + _; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + modifier onlyWhitelist() { + require(blacklist[msg.sender] == false); + _; + } + function XBornID() public { + owner = msg.sender; + balances[owner] = totalDistributed; + } + function transferOwnership(address newOwner) onlyOwner public { + if (newOwner != address(0)) { + owner = newOwner; + } + } + function finishDistribution() onlyOwner canDistr public returns (bool) { + distributionFinished = true; + emit DistrFinished(); + return true; + } + function distr(address _to, uint256 _amount) canDistr private returns (bool) { + totalDistributed = totalDistributed.add(_amount); + totalRemaining = totalRemaining.sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Distr(_to, _amount); + emit Transfer(address(0), _to, _amount); + return true; + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + } + function () external payable { + getTokens(); + } + function getTokens() payable canDistr onlyWhitelist public { + if (value > totalRemaining) { + value = totalRemaining; + } + require(value <= totalRemaining); + address investor = msg.sender; + uint256 toGive = value; + distr(investor, toGive); + if (toGive > 0) { + blacklist[investor] = true; + } + if (totalDistributed >= totalSupply) { + distributionFinished = true; + } + value = value.div(100000).mul(99999); + } + function balanceOf(address _owner) constant public returns (uint256) { + return balances[_owner]; + } + modifier onlyPayloadSize(uint size) { + assert(msg.data.length >= size + 4); + _; + } + function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[msg.sender]); + balances[msg.sender] = balances[msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(msg.sender, _to, _amount); + return true; + } + function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { + require(_to != address(0)); + require(_amount <= balances[_from]); + require(_amount <= allowed[_from][msg.sender]); + balances[_from] = balances[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balances[_to] = balances[_to].add(_amount); + emit Transfer(_from, _to, _amount); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool success) { + if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } + allowed[msg.sender][_spender] = _value; + emit Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant public returns (uint256) { + return allowed[_owner][_spender]; + } + function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ + ForeignToken t = ForeignToken(tokenAddress); + uint bal = t.balanceOf(who); + return bal; + } + function withdraw() onlyOwner public { + uint256 etherBalance = address(this).balance; + owner.transfer(etherBalance); + } + function burn(uint256 _value) onlyOwner public { + require(_value <= balances[msg.sender]); + address burner = msg.sender; + balances[burner] = balances[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + totalDistributed = totalDistributed.sub(_value); + emit Burn(burner, _value); + } + function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { + ForeignToken token = ForeignToken(_tokenContract); + uint256 amount = token.balanceOf(address(this)); + return token.transfer(owner, amount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2019-15079.sol b/data_full/CVE_clean/2019-15079.sol new file mode 100644 index 00000000..98103749 --- /dev/null +++ b/data_full/CVE_clean/2019-15079.sol @@ -0,0 +1,58 @@ +pragma solidity ^0.4.16; +contract EAI_TokenERC { + string public name; + string public symbol; + uint8 public decimals = 8; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); + event Burn(address indexed from, uint256 value); + function EAI_TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value >= balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + emit Burn(_from, _value); + return true; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2019-15080.sol b/data_full/CVE_clean/2019-15080.sol new file mode 100644 index 00000000..d15cc1f8 --- /dev/null +++ b/data_full/CVE_clean/2019-15080.sol @@ -0,0 +1,121 @@ +pragma solidity ^0.4.18; + contract Owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address _newOwner) onlyOwner public { + owner = _newOwner; + } + } +contract ERC20 { + using SafeMath for uint256; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) allowed; + mapping(address => bool) public isblacklistedAccount; + string public name; + string public symbol; + uint8 public decimals = 4; + uint256 public totalSupply; + event Approval(address indexed owner, address indexed spender, uint256 value); + event Transfer(address indexed from, address indexed to, uint256 value); + function ERC20(uint256 _initialSupply,string _tokenName, string _tokenSymbol) public { + totalSupply = _initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = _tokenName; + symbol = _tokenSymbol; + } + function transfer(address _to, uint256 _value) public returns (bool) { + require(!isblacklistedAccount[msg.sender]); + require(!isblacklistedAccount[_to]); + require(balanceOf[msg.sender] > 0); + require(balanceOf[msg.sender] >= _value); + require(_to != address(0)); + require(_value > 0); + require(balanceOf[_to] .add(_value) >= balanceOf[_to]); + require(_to != msg.sender); + balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); + balanceOf[_to] = balanceOf[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function transferFrom( + address _from, + address _to, + uint256 _amount + ) public returns (bool success) + { + if (balanceOf[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balanceOf[_to].add(_amount) > balanceOf[_to]) + { + balanceOf[_from] = balanceOf[_from].sub(_amount); + allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); + balanceOf[_to] = balanceOf[_to].add(_amount); + return true; + } else { + return false; + } + } + function approve(address _spender, uint256 _amount) public returns (bool success) { + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} +library SafeMath { + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + function div(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract MorphToken is Owned, ERC20 { + using SafeMath for uint256; + uint256 tokenSupply = 100000000; + event Burn(address from, uint256 value); + function MorphToken() + ERC20 (tokenSupply,"MORPH","MORPH") public + { + owner = msg.sender; + } + function blacklistAccount(address _target, bool _isBlacklisted) public onlyOwner { + isblacklistedAccount[_target] = _isBlacklisted; + } + function mintTokens(uint256 _mintedAmount) public onlyOwner { + balanceOf[owner] = balanceOf[owner].add(_mintedAmount); + totalSupply = totalSupply.add(_mintedAmount); + Transfer(0, owner, _mintedAmount); + } + function burn(uint256 _value) public onlyOwner { + require(_value <= balanceOf[msg.sender]); + address burner = msg.sender; + balanceOf[burner] = balanceOf[burner].sub(_value); + totalSupply = totalSupply.sub(_value); + Burn(burner, _value); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2020-17752.sol b/data_full/CVE_clean/2020-17752.sol new file mode 100644 index 00000000..3d269af6 --- /dev/null +++ b/data_full/CVE_clean/2020-17752.sol @@ -0,0 +1,290 @@ +library SafeMath { + function mul(uint256 a, uint256 b) constant public returns (uint256) { + uint256 c = a * b; + assert(a == 0 || c / a == b); + return c; + } + function div(uint256 a, uint256 b) constant public returns (uint256) { + uint256 c = a / b; + return c; + } + function sub(uint256 a, uint256 b) constant public returns (uint256) { + assert(b <= a); + return a - b; + } + function add(uint256 a, uint256 b) constant public returns (uint256) { + uint256 c = a + b; + assert(c >= a); + return c; + } +} +contract Ownable { + address public owner; + function Ownable() public { + owner = msg.sender; + } + modifier onlyOwner() { + if(msg.sender == owner){ + _; + } + else{ + revert(); + } + } +} +contract ERC20Basic { + uint256 public totalSupply; + function balanceOf(address who) constant public returns (uint256); + function transfer(address to, uint256 value) public returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); +} +contract ERC20 is ERC20Basic { + function allowance(address owner, address spender) constant public returns (uint256); + function transferFrom(address from, address to, uint256 value) public returns (bool); + function approve(address spender, uint256 value) public returns (bool); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +contract BasicToken is ERC20Basic { + using SafeMath for uint256; + using SafeMath for uint128; + mapping(address => uint256) balances; + function transfer(address _to, uint256 _value) public returns (bool) { + balances[msg.sender] = balances[msg.sender].sub(_value); + balances[_to] = balances[_to].add(_value); + Transfer(msg.sender, _to, _value); + return true; + } + function balanceOf(address _owner) constant public returns (uint256 balance) { + return balances[_owner]; + } +} +contract StandardToken is ERC20, BasicToken { + mapping (address => mapping (address => uint256)) allowed; + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { + var _allowance = allowed[_from][msg.sender]; + balances[_to] = balances[_to].add(_value); + balances[_from] = balances[_from].sub(_value); + allowed[_from][msg.sender] = _allowance.sub(_value); + Transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public returns (bool) { + require((_value == 0) || (allowed[msg.sender][_spender] == 0)); + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant public returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} +contract MintableToken is StandardToken, Ownable { + event Mint(address indexed to, uint256 amount); + event MintFinished(); + bool public mintingFinished = false; + modifier canMint() { + if(!mintingFinished){ + _; + } + else{ + revert(); + } + } + function mint(address _to, uint256 _amount) canMint internal returns (bool) { + totalSupply = totalSupply.add(_amount); + balances[_to] = balances[_to].add(_amount); + Mint(_to, _amount); + Transfer(address(0),_to,_amount); + return true; + } + function finishMinting() onlyOwner public returns (bool) { + mintingFinished = true; + MintFinished(); + return true; + } +} +contract MON is MintableToken{ + event BuyStatus(uint256 status); + struct Buy{ + uint128 amountOfEth; + uint128 stage; + } + struct StageData{ + uint128 stageTime; + uint64 stageSum; + uint64 stagePrice; + } + string public constant name = "MillionCoin"; + string public constant symbol = "MON"; + uint256 public constant DECIMALS = 8; + uint256 public constant decimals = 8; + address public beneficiary ; + uint256 private alreadyRunned = 0; + uint256 internal _now =0; + uint256 public stageIndex = 0; + StageData[] public stageDataStore; + uint256 public period = 3600*24; + uint256 public start = 0; + uint256 public sumMultiplayer = 100000; + mapping(address => Buy) public stageBuys; + modifier runOnce(uint256 bit){ + if((alreadyRunned & bit)==0){ + alreadyRunned = alreadyRunned | bit; + _; + } + else{ + revert(); + } + } + function MON(address _benef,uint256 _start,uint256 _sumMul,uint256 _period) public{ + beneficiary = _benef; + if(_start==0){ + start = GetNow(); + } + else{ + start = _start; + } + if(_period!=0){ + period = _period; + } + if(_sumMul!=0){ + sumMultiplayer = _sumMul; + } + stageDataStore.push(StageData(uint128(start+period*151),uint64(50*sumMultiplayer),uint64(5000))); + stageDataStore.push(StageData(uint128(start+period*243),uint64(60*sumMultiplayer),uint64(3000))); + stageDataStore.push(StageData(uint128(start+period*334),uint64(50*sumMultiplayer),uint64(1666))); + stageDataStore.push(StageData(uint128(start+period*455),uint64(60*sumMultiplayer),uint64(1500))); + stageDataStore.push(StageData(uint128(start+period*548),uint64(65*sumMultiplayer),uint64(1444))); + stageDataStore.push(StageData(uint128(start+period*641),uint64(55*sumMultiplayer),uint64(1000))); + } + function GetMaxStageEthAmount() public constant returns(uint256){ + StageData memory currS = stageDataStore[stageIndex]; + uint256 retVal = currS.stageSum; + retVal = retVal*(10**18); + retVal = retVal/currS.stagePrice; + retVal = retVal.sub(this.balance); + return retVal; + } + function () public payable { + uint256 status = 0; + status = 0; + bool transferToBenef = false; + uint256 amountOfEthBeforeBuy = 0; + uint256 stageMaxEthAmount = 0; + uint128 _n = uint128(GetNow()); + StageData memory currS = stageDataStore[stageIndex] ; + if(_n0){ + burn(msg.sender,b.amountOfEth.mul(currS.stagePrice)); + } + } + b.amountOfEth=0; + mintingFinished = true; + msg.sender.transfer(amountToReturn); + } + else{ + status = 2; + if(b.stage!=stageIndex){ + b.stage = uint128(stageIndex); + b.amountOfEth = 0; + status = status*10+3; + } + if(currS.stageTime>_n && this.balance < stageMaxEthAmount){ + b.amountOfEth = uint128(b.amountOfEth.add(uint128(msg.value))); + amountToMint = msg.value*currS.stagePrice; + status = status*10+4; + mintCoins(msg.sender,amountToMint); + }else{ + if( this.balance >=stageMaxEthAmount){ + status = status*10+5; + transferToBenef = true; + amountToMint = (stageMaxEthAmount - amountOfEthBeforeBuy)*(currS.stagePrice); + mintCoins(msg.sender,amountToMint); + stageIndex = stageIndex+1; + beneficiary.transfer(stageMaxEthAmount); + stageMaxEthAmount = GetMaxStageEthAmount(); + if(stageIndex<5 && stageMaxEthAmount>this.balance){ + currS = stageDataStore[stageIndex] ; + amountToMint = this.balance*(currS.stagePrice); + b.stage = uint128(stageIndex); + b.amountOfEth =uint128(this.balance); + mintCoins(msg.sender,amountToMint); + } + else{ + status = status*10+8; + amountToReturn = this.balance; + msg.sender.transfer(amountToReturn); + } + }else{ + status = status*10+6; + } + } + } + stageBuys[msg.sender] = b; + BuyStatus(status); + } + function GetBalance() public constant returns(uint256){ + return this.balance; + } + uint256 public constant maxTokenSupply = (10**(18-DECIMALS))*(10**6)*34 ; + function burn(address _from, uint256 _amount) private returns (bool){ + _amount = _amount.div(10**10); + balances[_from] = balances[_from].sub(_amount); + totalSupply = totalSupply.sub(_amount); + Transfer(_from,address(0),_amount); + } + function GetStats()public constant returns (uint256,uint256,uint256,uint256){ + uint256 timeToEnd = 0; + uint256 round =0; + StageData memory _s = stageDataStore[stageIndex]; + if(GetNow()>=start){ + round = stageIndex+1; + if(_s.stageTime>GetNow()) + { + timeToEnd = _s.stageTime-GetNow(); + } + else{ + return(0,0,0,0); + } + } + else{ + timeToEnd = start-GetNow(); + } + return(timeToEnd, + round, + _s.stageSum*1000/_s.stagePrice, + GetMaxStageEthAmount().div(10**15)); + } + function mintCoins(address _to, uint256 _amount) canMint internal returns (bool) { + _amount = _amount.div(10**10); + if(totalSupply.add(_amount)= a); + return c; + } +} +contract Ownable { + address public owner; + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + function Ownable() internal { + owner = msg.sender; + } + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + require(newOwner != address(0)); + emit OwnershipTransferred(owner, newOwner); + owner = newOwner; + } +} +contract tokenInterface { + function balanceOf(address _owner) public constant returns (uint256 balance); + function transfer(address _to, uint256 _value) public returns (bool); +} +contract rateInterface { + function readRate(string _currency) public view returns (uint256 oneEtherValue); +} +contract ICOEngineInterface { + function started() public view returns(bool); + function ended() public view returns(bool); + function startTime() public view returns(uint); + function endTime() public view returns(uint); + function totalTokens() public view returns(uint); + function remainingTokens() public view returns(uint); + function price() public view returns(uint); +} +contract KYCBase { + using SafeMath for uint256; + mapping (address => bool) public isKycSigner; + mapping (uint64 => uint256) public alreadyPayed; + event KycVerified(address indexed signer, address buyerAddress, uint64 buyerId, uint maxAmount); + function KYCBase(address [] kycSigners) internal { + for (uint i = 0; i < kycSigners.length; i++) { + isKycSigner[kycSigners[i]] = true; + } + } + function releaseTokensTo(address buyer) internal returns(bool); + function senderAllowedFor(address buyer) + internal view returns(bool) + { + return buyer == msg.sender; + } + function buyTokensFor(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) + public payable returns (bool) + { + require(senderAllowedFor(buyerAddress)); + return buyImplementation(buyerAddress, buyerId, maxAmount, v, r, s); + } + function buyTokens(uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) + public payable returns (bool) + { + return buyImplementation(msg.sender, buyerId, maxAmount, v, r, s); + } + function buyImplementation(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) + private returns (bool) + { + bytes32 hash = sha256("Eidoo icoengine authorization", address(0), buyerAddress, buyerId, maxAmount); + address signer = ecrecover(hash, v, r, s); + if (!isKycSigner[signer]) { + revert(); + } else { + uint256 totalPayed = alreadyPayed[buyerId].add(msg.value); + require(totalPayed <= maxAmount); + alreadyPayed[buyerId] = totalPayed; + emit KycVerified(signer, buyerAddress, buyerId, maxAmount); + return releaseTokensTo(buyerAddress); + } + } +} +contract RC is ICOEngineInterface, KYCBase { + using SafeMath for uint256; + TokenSale tokenSaleContract; + uint256 public startTime; + uint256 public endTime; + uint256 public etherMinimum; + uint256 public soldTokens; + uint256 public remainingTokens; + uint256 public oneTokenInUsdWei; + mapping(address => uint256) public etherUser; + mapping(address => uint256) public pendingTokenUser; + mapping(address => uint256) public tokenUser; + uint256[] public tokenThreshold; + uint256[] public bonusThreshold; + function RC(address _tokenSaleContract, uint256 _oneTokenInUsdWei, uint256 _remainingTokens, uint256 _etherMinimum, uint256 _startTime , uint256 _endTime, address [] kycSigner, uint256[] _tokenThreshold, uint256[] _bonusThreshold ) public KYCBase(kycSigner) { + require ( _tokenSaleContract != 0 ); + require ( _oneTokenInUsdWei != 0 ); + require( _remainingTokens != 0 ); + require ( _tokenThreshold.length != 0 ); + require ( _tokenThreshold.length == _bonusThreshold.length ); + bonusThreshold = _bonusThreshold; + tokenThreshold = _tokenThreshold; + tokenSaleContract = TokenSale(_tokenSaleContract); + tokenSaleContract.addMeByRC(); + soldTokens = 0; + remainingTokens = _remainingTokens; + oneTokenInUsdWei = _oneTokenInUsdWei; + etherMinimum = _etherMinimum; + setTimeRC( _startTime, _endTime ); + } + function setTimeRC(uint256 _startTime, uint256 _endTime ) internal { + if( _startTime == 0 ) { + startTime = tokenSaleContract.startTime(); + } else { + startTime = _startTime; + } + if( _endTime == 0 ) { + endTime = tokenSaleContract.endTime(); + } else { + endTime = _endTime; + } + } + modifier onlyTokenSaleOwner() { + require(msg.sender == tokenSaleContract.owner() ); + _; + } + function setTime(uint256 _newStart, uint256 _newEnd) public onlyTokenSaleOwner { + if ( _newStart != 0 ) startTime = _newStart; + if ( _newEnd != 0 ) endTime = _newEnd; + } + function changeMinimum(uint256 _newEtherMinimum) public onlyTokenSaleOwner { + etherMinimum = _newEtherMinimum; + } + function releaseTokensTo(address buyer) internal returns(bool) { + if( msg.value > 0 ) takeEther(buyer); + giveToken(buyer); + return true; + } + function started() public view returns(bool) { + return now > startTime || remainingTokens == 0; + } + function ended() public view returns(bool) { + return now > endTime || remainingTokens == 0; + } + function startTime() public view returns(uint) { + return startTime; + } + function endTime() public view returns(uint) { + return endTime; + } + function totalTokens() public view returns(uint) { + return remainingTokens.add(soldTokens); + } + function remainingTokens() public view returns(uint) { + return remainingTokens; + } + function price() public view returns(uint) { + uint256 oneEther = 10**18; + return oneEther.mul(10**18).div( tokenSaleContract.tokenValueInEther(oneTokenInUsdWei) ); + } + function () public payable{ + require( now > startTime ); + if(now < endTime) { + takeEther(msg.sender); + } else { + claimTokenBonus(msg.sender); + } + } + event Buy(address buyer, uint256 value, uint256 soldToken, uint256 valueTokenInUsdWei ); + function takeEther(address _buyer) internal { + require( now > startTime ); + require( now < endTime ); + require( msg.value >= etherMinimum); + require( remainingTokens > 0 ); + uint256 oneToken = 10 ** uint256(tokenSaleContract.decimals()); + uint256 tokenValue = tokenSaleContract.tokenValueInEther(oneTokenInUsdWei); + uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); + uint256 unboughtTokens = tokenInterface(tokenSaleContract.tokenContract()).balanceOf(tokenSaleContract); + if ( unboughtTokens > remainingTokens ) { + unboughtTokens = remainingTokens; + } + uint256 refund = 0; + if ( unboughtTokens < tokenAmount ) { + refund = (tokenAmount - unboughtTokens).mul(tokenValue).div(oneToken); + tokenAmount = unboughtTokens; + remainingTokens = 0; + _buyer.transfer(refund); + } else { + remainingTokens = remainingTokens.sub(tokenAmount); + } + etherUser[_buyer] = etherUser[_buyer].add(msg.value.sub(refund)); + pendingTokenUser[_buyer] = pendingTokenUser[_buyer].add(tokenAmount); + emit Buy( _buyer, msg.value, tokenAmount, oneTokenInUsdWei ); + } + function giveToken(address _buyer) internal { + require( pendingTokenUser[_buyer] > 0 ); + tokenUser[_buyer] = tokenUser[_buyer].add(pendingTokenUser[_buyer]); + tokenSaleContract.claim(_buyer, pendingTokenUser[_buyer]); + soldTokens = soldTokens.add(pendingTokenUser[_buyer]); + pendingTokenUser[_buyer] = 0; + tokenSaleContract.wallet().transfer(etherUser[_buyer]); + etherUser[_buyer] = 0; + } + function claimTokenBonus(address _buyer) internal { + require( now > endTime ); + require( tokenUser[_buyer] > 0 ); + uint256 bonusApplied = 0; + for (uint i = 0; i < tokenThreshold.length; i++) { + if ( soldTokens > tokenThreshold[i] ) { + bonusApplied = bonusThreshold[i]; + } + } + require( bonusApplied > 0 ); + uint256 addTokenAmount = tokenUser[_buyer].mul( bonusApplied ).div(10**2); + tokenUser[_buyer] = 0; + tokenSaleContract.claim(_buyer, addTokenAmount); + _buyer.transfer(msg.value); + } + function refundEther(address to) public onlyTokenSaleOwner { + to.transfer(etherUser[to]); + etherUser[to] = 0; + pendingTokenUser[to] = 0; + } + function withdraw(address to, uint256 value) public onlyTokenSaleOwner { + to.transfer(value); + } + function userBalance(address _user) public view returns( uint256 _pendingTokenUser, uint256 _tokenUser, uint256 _etherUser ) { + return (pendingTokenUser[_user], tokenUser[_user], etherUser[_user]); + } +} +contract TokenSale is Ownable { + using SafeMath for uint256; + tokenInterface public tokenContract; + rateInterface public rateContract; + address public wallet; + address public advisor; + uint256 public advisorFee; + uint256 public constant decimals = 18; + uint256 public endTime; + uint256 public startTime; + mapping(address => bool) public rc; + function TokenSale(address _tokenAddress, address _rateAddress, uint256 _startTime, uint256 _endTime) public { + tokenContract = tokenInterface(_tokenAddress); + rateContract = rateInterface(_rateAddress); + setTime(_startTime, _endTime); + wallet = msg.sender; + advisor = msg.sender; + advisorFee = 0 * 10**3; + } + function tokenValueInEther(uint256 _oneTokenInUsdWei) public view returns(uint256 tknValue) { + uint256 oneEtherInUsd = rateContract.readRate("usd"); + tknValue = _oneTokenInUsdWei.mul(10 ** uint256(decimals)).div(oneEtherInUsd); + return tknValue; + } + modifier isBuyable() { + require( now > startTime ); + require( now < endTime ); + require( msg.value > 0 ); + uint256 remainingTokens = tokenContract.balanceOf(this); + require( remainingTokens > 0 ); + _; + } + event Buy(address buyer, uint256 value, address indexed ambassador); + modifier onlyRC() { + require( rc[msg.sender] ); + _; + } + function buyFromRC(address _buyer, uint256 _rcTokenValue, uint256 _remainingTokens) onlyRC isBuyable public payable returns(uint256) { + uint256 oneToken = 10 ** uint256(decimals); + uint256 tokenValue = tokenValueInEther(_rcTokenValue); + uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); + address _ambassador = msg.sender; + uint256 remainingTokens = tokenContract.balanceOf(this); + if ( _remainingTokens < remainingTokens ) { + remainingTokens = _remainingTokens; + } + if ( remainingTokens < tokenAmount ) { + uint256 refund = (tokenAmount - remainingTokens).mul(tokenValue).div(oneToken); + tokenAmount = remainingTokens; + forward(msg.value-refund); + remainingTokens = 0; + _buyer.transfer(refund); + } else { + remainingTokens = remainingTokens.sub(tokenAmount); + forward(msg.value); + } + tokenContract.transfer(_buyer, tokenAmount); + emit Buy(_buyer, tokenAmount, _ambassador); + return tokenAmount; + } + function forward(uint256 _amount) internal { + uint256 advisorAmount = _amount.mul(advisorFee).div(10**3); + uint256 walletAmount = _amount - advisorAmount; + advisor.transfer(advisorAmount); + wallet.transfer(walletAmount); + } + event NewRC(address contr); + function addMeByRC() public { + require(tx.origin == owner); + rc[ msg.sender ] = true; + emit NewRC(msg.sender); + } + function setTime(uint256 _newStart, uint256 _newEnd) public onlyOwner { + if ( _newStart != 0 ) startTime = _newStart; + if ( _newEnd != 0 ) endTime = _newEnd; + } + function withdraw(address to, uint256 value) public onlyOwner { + to.transfer(value); + } + function withdrawTokens(address to, uint256 value) public onlyOwner returns (bool) { + return tokenContract.transfer(to, value); + } + function setTokenContract(address _tokenContract) public onlyOwner { + tokenContract = tokenInterface(_tokenContract); + } + function setWalletAddress(address _wallet) public onlyOwner { + wallet = _wallet; + } + function setAdvisorAddress(address _advisor) public onlyOwner { + advisor = _advisor; + } + function setAdvisorFee(uint256 _advisorFee) public onlyOwner { + advisorFee = _advisorFee; + } + function setRateContract(address _rateAddress) public onlyOwner { + rateContract = rateInterface(_rateAddress); + } + function claim(address _buyer, uint256 _amount) onlyRC public returns(bool) { + return tokenContract.transfer(_buyer, _amount); + } + function () public payable { + revert(); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2020-35962.sol b/data_full/CVE_clean/2020-35962.sol new file mode 100644 index 00000000..c666c798 --- /dev/null +++ b/data_full/CVE_clean/2020-35962.sol @@ -0,0 +1,540 @@ +pragma solidity ^0.5.11; +contract ERC20 +{ + function totalSupply() + public + view + returns (uint); + function balanceOf( + address who + ) + public + view + returns (uint); + function allowance( + address owner, + address spender + ) + public + view + returns (uint); + function transfer( + address to, + uint value + ) + public + returns (bool); + function transferFrom( + address from, + address to, + uint value + ) + public + returns (bool); + function approve( + address spender, + uint value + ) + public + returns (bool); +} +library AddressUtil +{ + using AddressUtil for *; + function isContract( + address addr + ) + internal + view + returns (bool) + { + uint32 size; + assembly { size := extcodesize(addr) } + return (size > 0); + } + function toPayable( + address addr + ) + internal + pure + returns (address payable) + { + return address(uint160(addr)); + } + function sendETH( + address to, + uint amount, + uint gasLimit + ) + internal + returns (bool success) + { + if (amount == 0) { + return true; + } + address payable recipient = to.toPayable(); + (success, ) = recipient.call.value(amount).gas(gasLimit)(""); + } + function sendETHAndVerify( + address to, + uint amount, + uint gasLimit + ) + internal + returns (bool success) + { + success = to.sendETH(amount, gasLimit); + require(success, "TRANSFER_FAILURE"); + } +} +contract BurnableERC20 is ERC20 +{ + function burn( + uint value + ) + public + returns (bool); + function burnFrom( + address from, + uint value + ) + public + returns (bool); +} +contract Ownable +{ + address public owner; + event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner + ); + constructor() + public + { + owner = msg.sender; + } + modifier onlyOwner() + { + require(msg.sender == owner, "UNAUTHORIZED"); + _; + } + function transferOwnership( + address newOwner + ) + public + onlyOwner + { + require(newOwner != address(0), "ZERO_ADDRESS"); + emit OwnershipTransferred(owner, newOwner); + owner = newOwner; + } + function renounceOwnership() + public + onlyOwner + { + emit OwnershipTransferred(owner, address(0)); + owner = address(0); + } +} +contract Claimable is Ownable +{ + address public pendingOwner; + modifier onlyPendingOwner() { + require(msg.sender == pendingOwner, "UNAUTHORIZED"); + _; + } + function transferOwnership( + address newOwner + ) + public + onlyOwner + { + require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); + pendingOwner = newOwner; + } + function claimOwnership() + public + onlyPendingOwner + { + emit OwnershipTransferred(owner, pendingOwner); + owner = pendingOwner; + pendingOwner = address(0); + } +} +library ERC20SafeTransfer +{ + function safeTransferAndVerify( + address token, + address to, + uint value + ) + internal + { + safeTransferWithGasLimitAndVerify( + token, + to, + value, + gasleft() + ); + } + function safeTransfer( + address token, + address to, + uint value + ) + internal + returns (bool) + { + return safeTransferWithGasLimit( + token, + to, + value, + gasleft() + ); + } + function safeTransferWithGasLimitAndVerify( + address token, + address to, + uint value, + uint gasLimit + ) + internal + { + require( + safeTransferWithGasLimit(token, to, value, gasLimit), + "TRANSFER_FAILURE" + ); + } + function safeTransferWithGasLimit( + address token, + address to, + uint value, + uint gasLimit + ) + internal + returns (bool) + { + bytes memory callData = abi.encodeWithSelector( + bytes4(0xa9059cbb), + to, + value + ); + (bool success, ) = token.call.gas(gasLimit)(callData); + return checkReturnValue(success); + } + function safeTransferFromAndVerify( + address token, + address from, + address to, + uint value + ) + internal + { + safeTransferFromWithGasLimitAndVerify( + token, + from, + to, + value, + gasleft() + ); + } + function safeTransferFrom( + address token, + address from, + address to, + uint value + ) + internal + returns (bool) + { + return safeTransferFromWithGasLimit( + token, + from, + to, + value, + gasleft() + ); + } + function safeTransferFromWithGasLimitAndVerify( + address token, + address from, + address to, + uint value, + uint gasLimit + ) + internal + { + bool result = safeTransferFromWithGasLimit( + token, + from, + to, + value, + gasLimit + ); + require(result, "TRANSFER_FAILURE"); + } + function safeTransferFromWithGasLimit( + address token, + address from, + address to, + uint value, + uint gasLimit + ) + internal + returns (bool) + { + bytes memory callData = abi.encodeWithSelector( + bytes4(0x23b872dd), + from, + to, + value + ); + (bool success, ) = token.call.gas(gasLimit)(callData); + return checkReturnValue(success); + } + function checkReturnValue( + bool success + ) + internal + pure + returns (bool) + { + if (success) { + assembly { + switch returndatasize() + case 0 { + success := 1 + } + case 32 { + returndatacopy(0, 0, 32) + success := mload(0) + } + default { + success := 0 + } + } + } + return success; + } +} +library MathUint +{ + function mul( + uint a, + uint b + ) + internal + pure + returns (uint c) + { + c = a * b; + require(a == 0 || c / a == b, "MUL_OVERFLOW"); + } + function sub( + uint a, + uint b + ) + internal + pure + returns (uint) + { + require(b <= a, "SUB_UNDERFLOW"); + return a - b; + } + function add( + uint a, + uint b + ) + internal + pure + returns (uint c) + { + c = a + b; + require(c >= a, "ADD_OVERFLOW"); + } + function decodeFloat( + uint f + ) + internal + pure + returns (uint value) + { + uint numBitsMantissa = 23; + uint exponent = f >> numBitsMantissa; + uint mantissa = f & ((1 << numBitsMantissa) - 1); + value = mantissa * (10 ** exponent); + } +} +contract ReentrancyGuard +{ + uint private _guardValue; + modifier nonReentrant() + { + require(_guardValue == 0, "REENTRANCY"); + _guardValue = 1; + _; + _guardValue = 0; + } +} +contract IProtocolFeeVault +{ + uint public constant REWARD_PERCENTAGE = 70; + uint public constant DAO_PERDENTAGE = 20; + address public userStakingPoolAddress; + address public lrcAddress; + address public tokenSellerAddress; + address public daoAddress; + uint claimedReward; + uint claimedDAOFund; + uint claimedBurn; + event LRCClaimed(uint amount); + event DAOFunded(uint amountDAO, uint amountBurn); + event TokenSold(address token, uint amount); + event SettingsUpdated(uint time); + function updateSettings( + address _userStakingPoolAddress, + address _tokenSellerAddress, + address _daoAddress + ) + external; + function claimStakingReward(uint amount) external; + function fundDAO() external; + function sellTokenForLRC( + address token, + uint amount + ) + external; + function getProtocolFeeStats() + public + view + returns ( + uint accumulatedFees, + uint accumulatedBurn, + uint accumulatedDAOFund, + uint accumulatedReward, + uint remainingFees, + uint remainingBurn, + uint remainingDAOFund, + uint remainingReward + ); +} +contract ITokenSeller +{ + function sellToken( + address tokenS, + address tokenB + ) + external + payable + returns (bool success); +} +contract ProtocolFeeVault is Claimable, ReentrancyGuard, IProtocolFeeVault +{ + using AddressUtil for address; + using AddressUtil for address payable; + using ERC20SafeTransfer for address; + using MathUint for uint; + constructor(address _lrcAddress) + Claimable() + public + { + require(_lrcAddress != address(0), "ZERO_ADDRESS"); + lrcAddress = _lrcAddress; + } + function() external payable { } + function updateSettings( + address _userStakingPoolAddress, + address _tokenSellerAddress, + address _daoAddress + ) + external + nonReentrant + onlyOwner + { + require( + userStakingPoolAddress != _userStakingPoolAddress || + tokenSellerAddress != _tokenSellerAddress || + daoAddress != _daoAddress, + "SAME_ADDRESSES" + ); + userStakingPoolAddress = _userStakingPoolAddress; + tokenSellerAddress = _tokenSellerAddress; + daoAddress = _daoAddress; + emit SettingsUpdated(now); + } + function claimStakingReward( + uint amount + ) + external + nonReentrant + { + require(amount > 0, "ZERO_VALUE"); + require(msg.sender == userStakingPoolAddress, "UNAUTHORIZED"); + lrcAddress.safeTransferAndVerify(userStakingPoolAddress, amount); + claimedReward = claimedReward.add(amount); + emit LRCClaimed(amount); + } + function fundDAO() + external + nonReentrant + { + uint amountDAO; + uint amountBurn; + (, , , , , amountBurn, amountDAO, ) = getProtocolFeeStats(); + address recipient = daoAddress == address(0) ? owner : daoAddress; + if (amountDAO > 0) { + lrcAddress.safeTransferAndVerify(recipient, amountDAO); + } + if (amountBurn > 0) { + require(BurnableERC20(lrcAddress).burn(amountBurn), "BURN_FAILURE"); + } + claimedBurn = claimedBurn.add(amountBurn); + claimedDAOFund = claimedDAOFund.add(amountDAO); + emit DAOFunded(amountDAO, amountBurn); + } + function sellTokenForLRC( + address token, + uint amount + ) + external + nonReentrant + { + require(amount > 0, "ZERO_AMOUNT"); + require(token != lrcAddress, "PROHIBITED"); + address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress; + if (token == address(0)) { + recipient.sendETHAndVerify(amount, gasleft()); + } else { + token.safeTransferAndVerify(recipient, amount); + } + require( + tokenSellerAddress == address(0) || + ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress), + "SELL_FAILURE" + ); + emit TokenSold(token, amount); + } + function getProtocolFeeStats() + public + view + returns ( + uint accumulatedFees, + uint accumulatedBurn, + uint accumulatedDAOFund, + uint accumulatedReward, + uint remainingFees, + uint remainingBurn, + uint remainingDAOFund, + uint remainingReward + ) + { + remainingFees = ERC20(lrcAddress).balanceOf(address(this)); + accumulatedFees = remainingFees.add(claimedReward).add(claimedDAOFund).add(claimedBurn); + accumulatedReward = accumulatedFees.mul(REWARD_PERCENTAGE) / 100; + accumulatedDAOFund = accumulatedFees.mul(DAO_PERDENTAGE) / 100; + accumulatedBurn = accumulatedFees.sub(accumulatedReward).sub(accumulatedDAOFund); + remainingReward = accumulatedReward.sub(claimedReward); + remainingDAOFund = accumulatedDAOFund.sub(claimedDAOFund); + remainingBurn = accumulatedBurn.sub(claimedBurn); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-3004.sol b/data_full/CVE_clean/2021-3004.sol new file mode 100644 index 00000000..65868c1a --- /dev/null +++ b/data_full/CVE_clean/2021-3004.sol @@ -0,0 +1,400 @@ +pragma solidity ^0.8.0; +interface IERC20 { + function totalSupply() external view returns (uint256); + function decimals() external view returns (uint256); + function balanceOf(address account) external view returns (uint256); + function transfer(address recipient, uint256 amount) external returns (bool); + function allowance(address owner, address spender) external view returns (uint256); + function approve(address spender, uint256 amount) external returns (bool); + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); +} +library Address { + function isContract(address account) internal view returns (bool) { + bytes32 codehash; + bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; + assembly { codehash := extcodehash(account) } + return (codehash != 0x0 && codehash != accountHash); + } +} +library SafeERC20 { + using Address for address; + function safeTransfer(IERC20 token, address to, uint value) internal { + callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); + } + function safeTransferFrom(IERC20 token, address from, address to, uint value) internal { + callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); + } + function safeApprove(IERC20 token, address spender, uint value) internal { + require((value == 0) || (token.allowance(address(this), spender) == 0), + "SafeERC20: approve from non-zero to non-zero allowance" + ); + callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); + } + function callOptionalReturn(IERC20 token, bytes memory data) private { + require(address(token).isContract(), "SafeERC20: call to non-contract"); + (bool success, bytes memory returndata) = address(token).call(data); + require(success, "SafeERC20: low-level call failed"); + if (returndata.length > 0) { + require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); + } + } +} +interface Oracle { + function getPriceUSD(address reserve) external view returns (uint); +} +interface ISushiswapV2Factory { + event PairCreated(address indexed token0, address indexed token1, address pair, uint); + function feeTo() external view returns (address); + function feeToSetter() external view returns (address); + function getPair(address tokenA, address tokenB) external view returns (address pair); + function allPairs(uint) external view returns (address pair); + function allPairsLength() external view returns (uint); + function createPair(address tokenA, address tokenB) external returns (address pair); + function setFeeTo(address) external; + function setFeeToSetter(address) external; +} +interface ISushiswapV2Pair { + event Approval(address indexed owner, address indexed spender, uint value); + event Transfer(address indexed from, address indexed to, uint value); + function name() external pure returns (string memory); + function symbol() external pure returns (string memory); + function decimals() external pure returns (uint8); + function totalSupply() external view returns (uint); + function balanceOf(address owner) external view returns (uint); + function allowance(address owner, address spender) external view returns (uint); + function approve(address spender, uint value) external returns (bool); + function transfer(address to, uint value) external returns (bool); + function transferFrom(address from, address to, uint value) external returns (bool); + function DOMAIN_SEPARATOR() external view returns (bytes32); + function PERMIT_TYPEHASH() external pure returns (bytes32); + function nonces(address owner) external view returns (uint); + function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; + event Mint(address indexed sender, uint amount0, uint amount1); + event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); + event Swap( + address indexed sender, + uint amount0In, + uint amount1In, + uint amount0Out, + uint amount1Out, + address indexed to + ); + event Sync(uint112 reserve0, uint112 reserve1); + function MINIMUM_LIQUIDITY() external pure returns (uint); + function factory() external view returns (address); + function token0() external view returns (address); + function token1() external view returns (address); + function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); + function price0CumulativeLast() external view returns (uint); + function price1CumulativeLast() external view returns (uint); + function kLast() external view returns (uint); + function mint(address to) external returns (uint liquidity); + function burn(address to) external returns (uint amount0, uint amount1); + function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; + function skim(address to) external; + function sync() external; + function initialize(address, address) external; +} +abstract contract ReentrancyGuard { + uint256 private constant _NOT_ENTERED = 1; + uint256 private constant _ENTERED = 2; + uint256 private _status; + constructor () { + _status = _NOT_ENTERED; + } + modifier nonReentrant() { + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + _status = _ENTERED; + _; + _status = _NOT_ENTERED; + } +} +library SushiswapV2Library { + function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { + require(tokenA != tokenB, 'SushiswapV2Library: IDENTICAL_ADDRESSES'); + (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); + require(token0 != address(0), 'SushiswapV2Library: ZERO_ADDRESS'); + } + function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { + (address token0, address token1) = sortTokens(tokenA, tokenB); + pair = address(uint160(uint(keccak256(abi.encodePacked( + hex'ff', + factory, + keccak256(abi.encodePacked(token0, token1)), + hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' + ))))); + } + function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { + (address token0,) = sortTokens(tokenA, tokenB); + (uint reserve0, uint reserve1,) = ISushiswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves(); + (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); + } + function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { + require(amountA > 0, 'SushiswapV2Library: INSUFFICIENT_AMOUNT'); + require(reserveA > 0 && reserveB > 0, 'SushiswapV2Library: INSUFFICIENT_LIQUIDITY'); + amountB = amountA * reserveB / reserveA; + } +} +library Math { + function max(uint256 a, uint256 b) internal pure returns (uint256) { + return a >= b ? a : b; + } + function min(uint256 a, uint256 b) internal pure returns (uint256) { + return a < b ? a : b; + } + function average(uint256 a, uint256 b) internal pure returns (uint256) { + return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); + } +} +contract StableYieldCredit is ReentrancyGuard { + using SafeERC20 for IERC20; + string public constant name = "Stable Yield Credit"; + string public constant symbol = "yCREDIT"; + uint8 public constant decimals = 8; + uint public totalSupply = 0; + uint public stakedSupply = 0; + mapping(address => mapping (address => uint)) internal allowances; + mapping(address => uint) internal balances; + mapping(address => uint) public stakes; + bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)"); + bytes32 public immutable DOMAINSEPARATOR; + bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)"); + mapping (address => uint) public nonces; + function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { + require(n < 2**32, errorMessage); + return uint32(n); + } + event Transfer(address indexed from, address indexed to, uint amount); + event Staked(address indexed from, uint amount); + event Unstaked(address indexed from, uint amount); + event Earned(address indexed from, uint amount); + event Fees(uint amount); + event Approval(address indexed owner, address indexed spender, uint amount); + Oracle public constant LINK = Oracle(0x271bf4568fb737cc2e6277e9B1EE0034098cDA2a); + ISushiswapV2Factory public constant FACTORY = ISushiswapV2Factory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac); + mapping (address => mapping(address => uint)) public collateral; + mapping (address => mapping(address => uint)) public collateralCredit; + address[] private _markets; + mapping (address => bool) pairs; + uint public rewardRate = 0; + uint public periodFinish = 0; + uint public DURATION = 7 days; + uint public lastUpdateTime; + uint public rewardPerTokenStored; + mapping(address => uint) public userRewardPerTokenPaid; + mapping(address => uint) public rewards; + event Deposit(address indexed creditor, address indexed collateral, uint creditOut, uint amountIn, uint creditMinted); + event Withdraw(address indexed creditor, address indexed collateral, uint creditIn, uint creditOut, uint amountOut); + constructor () { + DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this))); + } + uint public FEE = 50; + uint public BASE = 10000; + function lastTimeRewardApplicable() public view returns (uint) { + return Math.min(block.timestamp, periodFinish); + } + function rewardPerToken() public view returns (uint) { + if (stakedSupply == 0) { + return rewardPerTokenStored; + } + return + rewardPerTokenStored + + ((lastTimeRewardApplicable() - + lastUpdateTime) * + rewardRate * 1e18 / stakedSupply); + } + function earned(address account) public view returns (uint) { + return (stakes[account] * (rewardPerToken() - userRewardPerTokenPaid[account]) / 1e18) + rewards[account]; + } + function getRewardForDuration() external view returns (uint) { + return rewardRate * DURATION; + } + modifier updateReward(address account) { + rewardPerTokenStored = rewardPerToken(); + lastUpdateTime = lastTimeRewardApplicable(); + if (account != address(0)) { + rewards[account] = earned(account); + userRewardPerTokenPaid[account] = rewardPerTokenStored; + } + _; + } + function stake(uint256 amount) external nonReentrant updateReward(msg.sender) { + require(amount > 0, "Cannot stake 0"); + stakedSupply += amount; + stakes[msg.sender] += amount; + _transferTokens(msg.sender, address(this), amount); + emit Staked(msg.sender, amount); + } + function unstake(uint amount) public nonReentrant updateReward(msg.sender) { + require(amount > 0, "Cannot withdraw 0"); + stakedSupply -= amount; + stakes[msg.sender] -= amount; + _transferTokens(address(this), msg.sender, amount); + emit Unstaked(msg.sender, amount); + } + function getReward() public nonReentrant updateReward(msg.sender) { + uint256 reward = rewards[msg.sender]; + if (reward > 0) { + rewards[msg.sender] = 0; + _transferTokens(address(this), msg.sender, reward); + emit Earned(msg.sender, reward); + } + } + function exit() external { + unstake(stakes[msg.sender]); + getReward(); + } + function notifyFeeAmount(uint reward) internal updateReward(address(0)) { + if (block.timestamp >= periodFinish) { + rewardRate = reward / DURATION; + } else { + uint remaining = periodFinish - block.timestamp; + uint leftover = remaining * rewardRate; + rewardRate = (reward + leftover) / DURATION; + } + uint balance = balances[address(this)]; + require(rewardRate <= balance / DURATION, "Provided reward too high"); + lastUpdateTime = block.timestamp; + periodFinish = block.timestamp + DURATION; + emit Fees(reward); + } + function markets() external view returns (address[] memory) { + return _markets; + } + function _mint(address dst, uint amount) internal { + totalSupply += amount; + balances[dst] += amount; + emit Transfer(address(0), dst, amount); + } + function _burn(address dst, uint amount) internal { + totalSupply -= amount; + balances[dst] -= amount; + emit Transfer(dst, address(0), amount); + } + function depositAll(IERC20 token) external { + _deposit(token, token.balanceOf(msg.sender)); + } + function deposit(IERC20 token, uint amount) external { + _deposit(token, amount); + } + function _addLiquidity( + address tokenA, + address tokenB, + uint amountADesired, + uint amountBDesired + ) internal virtual returns (address pair, uint amountA, uint amountB) { + pair = FACTORY.getPair(tokenA, tokenB); + if (pair == address(0)) { + pair = FACTORY.createPair(tokenA, tokenB); + pairs[pair] = true; + _markets.push(tokenA); + } else if (!pairs[pair]) { + pairs[pair] = true; + _markets.push(tokenA); + } + (uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB); + if (reserveA == 0 && reserveB == 0) { + (amountA, amountB) = (amountADesired, amountBDesired); + } else { + uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB); + if (amountBOptimal <= amountBDesired) { + (amountA, amountB) = (amountADesired, amountBOptimal); + } else { + uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA); + assert(amountAOptimal <= amountADesired); + (amountA, amountB) = (amountAOptimal, amountBDesired); + } + } + } + function _deposit(IERC20 token, uint amount) internal { + uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals(); + require(_value > 0, "!value"); + (address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value); + token.safeTransferFrom(msg.sender, _pair, amountA); + _mint(_pair, _value); + uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this)); + collateral[msg.sender][address(token)] += _liquidity; + collateralCredit[msg.sender][address(token)] += _value; + uint _fee = _value * FEE / BASE; + _mint(msg.sender, _value - _fee); + _mint(address(this), _fee); + notifyFeeAmount(_fee); + emit Deposit(msg.sender, address(token), _value, amount, _value); + } + function withdrawAll(IERC20 token) external { + _withdraw(token, IERC20(address(this)).balanceOf(msg.sender)); + } + function withdraw(IERC20 token, uint amount) external { + _withdraw(token, amount); + } + function _withdraw(IERC20 token, uint amount) internal { + uint _credit = collateralCredit[msg.sender][address(token)]; + uint _collateral = collateral[msg.sender][address(token)]; + if (_credit < amount) { + amount = _credit; + } + uint _burned = _collateral * amount / _credit; + address _pair = FACTORY.getPair(address(token), address(this)); + IERC20(_pair).safeTransfer(_pair, _burned); + (uint _amount0, uint _amount1) = ISushiswapV2Pair(_pair).burn(msg.sender); + (address _token0,) = SushiswapV2Library.sortTokens(address(token), address(this)); + (uint _amountA, uint _amountB) = address(token) == _token0 ? (_amount0, _amount1) : (_amount1, _amount0); + collateralCredit[msg.sender][address(token)] -= amount; + collateral[msg.sender][address(token)] -= _burned; + _burn(msg.sender, _amountB+amount); + emit Withdraw(msg.sender, address(token), amount, _amountB, _amountA); + } + function allowance(address account, address spender) external view returns (uint) { + return allowances[account][spender]; + } + function approve(address spender, uint amount) external returns (bool) { + allowances[msg.sender][spender] = amount; + emit Approval(msg.sender, spender, amount); + return true; + } + function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external { + bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline)); + bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash)); + address signatory = ecrecover(digest, v, r, s); + require(signatory != address(0), "permit: signature"); + require(signatory == owner, "permit: unauthorized"); + require(block.timestamp <= deadline, "permit: expired"); + allowances[owner][spender] = amount; + emit Approval(owner, spender, amount); + } + function balanceOf(address account) external view returns (uint) { + return balances[account]; + } + function transfer(address dst, uint amount) external returns (bool) { + _transferTokens(msg.sender, dst, amount); + return true; + } + function transferFrom(address src, address dst, uint amount) external returns (bool) { + address spender = msg.sender; + uint spenderAllowance = allowances[src][spender]; + if (spender != src && spenderAllowance != type(uint).max) { + uint newAllowance = spenderAllowance - amount; + allowances[src][spender] = newAllowance; + emit Approval(src, spender, newAllowance); + } + _transferTokens(src, dst, amount); + return true; + } + function _transferTokens(address src, address dst, uint amount) internal { + balances[src] -= amount; + balances[dst] += amount; + emit Transfer(src, dst, amount); + if (pairs[src]) { + uint _fee = amount * FEE / BASE; + _transferTokens(dst, address(this), _fee); + notifyFeeAmount(_fee); + } + } + function _getChainId() internal view returns (uint) { + uint chainId; + assembly { chainId := chainid() } + return chainId; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-3006.sol b/data_full/CVE_clean/2021-3006.sol new file mode 100644 index 00000000..c666c798 --- /dev/null +++ b/data_full/CVE_clean/2021-3006.sol @@ -0,0 +1,540 @@ +pragma solidity ^0.5.11; +contract ERC20 +{ + function totalSupply() + public + view + returns (uint); + function balanceOf( + address who + ) + public + view + returns (uint); + function allowance( + address owner, + address spender + ) + public + view + returns (uint); + function transfer( + address to, + uint value + ) + public + returns (bool); + function transferFrom( + address from, + address to, + uint value + ) + public + returns (bool); + function approve( + address spender, + uint value + ) + public + returns (bool); +} +library AddressUtil +{ + using AddressUtil for *; + function isContract( + address addr + ) + internal + view + returns (bool) + { + uint32 size; + assembly { size := extcodesize(addr) } + return (size > 0); + } + function toPayable( + address addr + ) + internal + pure + returns (address payable) + { + return address(uint160(addr)); + } + function sendETH( + address to, + uint amount, + uint gasLimit + ) + internal + returns (bool success) + { + if (amount == 0) { + return true; + } + address payable recipient = to.toPayable(); + (success, ) = recipient.call.value(amount).gas(gasLimit)(""); + } + function sendETHAndVerify( + address to, + uint amount, + uint gasLimit + ) + internal + returns (bool success) + { + success = to.sendETH(amount, gasLimit); + require(success, "TRANSFER_FAILURE"); + } +} +contract BurnableERC20 is ERC20 +{ + function burn( + uint value + ) + public + returns (bool); + function burnFrom( + address from, + uint value + ) + public + returns (bool); +} +contract Ownable +{ + address public owner; + event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner + ); + constructor() + public + { + owner = msg.sender; + } + modifier onlyOwner() + { + require(msg.sender == owner, "UNAUTHORIZED"); + _; + } + function transferOwnership( + address newOwner + ) + public + onlyOwner + { + require(newOwner != address(0), "ZERO_ADDRESS"); + emit OwnershipTransferred(owner, newOwner); + owner = newOwner; + } + function renounceOwnership() + public + onlyOwner + { + emit OwnershipTransferred(owner, address(0)); + owner = address(0); + } +} +contract Claimable is Ownable +{ + address public pendingOwner; + modifier onlyPendingOwner() { + require(msg.sender == pendingOwner, "UNAUTHORIZED"); + _; + } + function transferOwnership( + address newOwner + ) + public + onlyOwner + { + require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); + pendingOwner = newOwner; + } + function claimOwnership() + public + onlyPendingOwner + { + emit OwnershipTransferred(owner, pendingOwner); + owner = pendingOwner; + pendingOwner = address(0); + } +} +library ERC20SafeTransfer +{ + function safeTransferAndVerify( + address token, + address to, + uint value + ) + internal + { + safeTransferWithGasLimitAndVerify( + token, + to, + value, + gasleft() + ); + } + function safeTransfer( + address token, + address to, + uint value + ) + internal + returns (bool) + { + return safeTransferWithGasLimit( + token, + to, + value, + gasleft() + ); + } + function safeTransferWithGasLimitAndVerify( + address token, + address to, + uint value, + uint gasLimit + ) + internal + { + require( + safeTransferWithGasLimit(token, to, value, gasLimit), + "TRANSFER_FAILURE" + ); + } + function safeTransferWithGasLimit( + address token, + address to, + uint value, + uint gasLimit + ) + internal + returns (bool) + { + bytes memory callData = abi.encodeWithSelector( + bytes4(0xa9059cbb), + to, + value + ); + (bool success, ) = token.call.gas(gasLimit)(callData); + return checkReturnValue(success); + } + function safeTransferFromAndVerify( + address token, + address from, + address to, + uint value + ) + internal + { + safeTransferFromWithGasLimitAndVerify( + token, + from, + to, + value, + gasleft() + ); + } + function safeTransferFrom( + address token, + address from, + address to, + uint value + ) + internal + returns (bool) + { + return safeTransferFromWithGasLimit( + token, + from, + to, + value, + gasleft() + ); + } + function safeTransferFromWithGasLimitAndVerify( + address token, + address from, + address to, + uint value, + uint gasLimit + ) + internal + { + bool result = safeTransferFromWithGasLimit( + token, + from, + to, + value, + gasLimit + ); + require(result, "TRANSFER_FAILURE"); + } + function safeTransferFromWithGasLimit( + address token, + address from, + address to, + uint value, + uint gasLimit + ) + internal + returns (bool) + { + bytes memory callData = abi.encodeWithSelector( + bytes4(0x23b872dd), + from, + to, + value + ); + (bool success, ) = token.call.gas(gasLimit)(callData); + return checkReturnValue(success); + } + function checkReturnValue( + bool success + ) + internal + pure + returns (bool) + { + if (success) { + assembly { + switch returndatasize() + case 0 { + success := 1 + } + case 32 { + returndatacopy(0, 0, 32) + success := mload(0) + } + default { + success := 0 + } + } + } + return success; + } +} +library MathUint +{ + function mul( + uint a, + uint b + ) + internal + pure + returns (uint c) + { + c = a * b; + require(a == 0 || c / a == b, "MUL_OVERFLOW"); + } + function sub( + uint a, + uint b + ) + internal + pure + returns (uint) + { + require(b <= a, "SUB_UNDERFLOW"); + return a - b; + } + function add( + uint a, + uint b + ) + internal + pure + returns (uint c) + { + c = a + b; + require(c >= a, "ADD_OVERFLOW"); + } + function decodeFloat( + uint f + ) + internal + pure + returns (uint value) + { + uint numBitsMantissa = 23; + uint exponent = f >> numBitsMantissa; + uint mantissa = f & ((1 << numBitsMantissa) - 1); + value = mantissa * (10 ** exponent); + } +} +contract ReentrancyGuard +{ + uint private _guardValue; + modifier nonReentrant() + { + require(_guardValue == 0, "REENTRANCY"); + _guardValue = 1; + _; + _guardValue = 0; + } +} +contract IProtocolFeeVault +{ + uint public constant REWARD_PERCENTAGE = 70; + uint public constant DAO_PERDENTAGE = 20; + address public userStakingPoolAddress; + address public lrcAddress; + address public tokenSellerAddress; + address public daoAddress; + uint claimedReward; + uint claimedDAOFund; + uint claimedBurn; + event LRCClaimed(uint amount); + event DAOFunded(uint amountDAO, uint amountBurn); + event TokenSold(address token, uint amount); + event SettingsUpdated(uint time); + function updateSettings( + address _userStakingPoolAddress, + address _tokenSellerAddress, + address _daoAddress + ) + external; + function claimStakingReward(uint amount) external; + function fundDAO() external; + function sellTokenForLRC( + address token, + uint amount + ) + external; + function getProtocolFeeStats() + public + view + returns ( + uint accumulatedFees, + uint accumulatedBurn, + uint accumulatedDAOFund, + uint accumulatedReward, + uint remainingFees, + uint remainingBurn, + uint remainingDAOFund, + uint remainingReward + ); +} +contract ITokenSeller +{ + function sellToken( + address tokenS, + address tokenB + ) + external + payable + returns (bool success); +} +contract ProtocolFeeVault is Claimable, ReentrancyGuard, IProtocolFeeVault +{ + using AddressUtil for address; + using AddressUtil for address payable; + using ERC20SafeTransfer for address; + using MathUint for uint; + constructor(address _lrcAddress) + Claimable() + public + { + require(_lrcAddress != address(0), "ZERO_ADDRESS"); + lrcAddress = _lrcAddress; + } + function() external payable { } + function updateSettings( + address _userStakingPoolAddress, + address _tokenSellerAddress, + address _daoAddress + ) + external + nonReentrant + onlyOwner + { + require( + userStakingPoolAddress != _userStakingPoolAddress || + tokenSellerAddress != _tokenSellerAddress || + daoAddress != _daoAddress, + "SAME_ADDRESSES" + ); + userStakingPoolAddress = _userStakingPoolAddress; + tokenSellerAddress = _tokenSellerAddress; + daoAddress = _daoAddress; + emit SettingsUpdated(now); + } + function claimStakingReward( + uint amount + ) + external + nonReentrant + { + require(amount > 0, "ZERO_VALUE"); + require(msg.sender == userStakingPoolAddress, "UNAUTHORIZED"); + lrcAddress.safeTransferAndVerify(userStakingPoolAddress, amount); + claimedReward = claimedReward.add(amount); + emit LRCClaimed(amount); + } + function fundDAO() + external + nonReentrant + { + uint amountDAO; + uint amountBurn; + (, , , , , amountBurn, amountDAO, ) = getProtocolFeeStats(); + address recipient = daoAddress == address(0) ? owner : daoAddress; + if (amountDAO > 0) { + lrcAddress.safeTransferAndVerify(recipient, amountDAO); + } + if (amountBurn > 0) { + require(BurnableERC20(lrcAddress).burn(amountBurn), "BURN_FAILURE"); + } + claimedBurn = claimedBurn.add(amountBurn); + claimedDAOFund = claimedDAOFund.add(amountDAO); + emit DAOFunded(amountDAO, amountBurn); + } + function sellTokenForLRC( + address token, + uint amount + ) + external + nonReentrant + { + require(amount > 0, "ZERO_AMOUNT"); + require(token != lrcAddress, "PROHIBITED"); + address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress; + if (token == address(0)) { + recipient.sendETHAndVerify(amount, gasleft()); + } else { + token.safeTransferAndVerify(recipient, amount); + } + require( + tokenSellerAddress == address(0) || + ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress), + "SELL_FAILURE" + ); + emit TokenSold(token, amount); + } + function getProtocolFeeStats() + public + view + returns ( + uint accumulatedFees, + uint accumulatedBurn, + uint accumulatedDAOFund, + uint accumulatedReward, + uint remainingFees, + uint remainingBurn, + uint remainingDAOFund, + uint remainingReward + ) + { + remainingFees = ERC20(lrcAddress).balanceOf(address(this)); + accumulatedFees = remainingFees.add(claimedReward).add(claimedDAOFund).add(claimedBurn); + accumulatedReward = accumulatedFees.mul(REWARD_PERCENTAGE) / 100; + accumulatedDAOFund = accumulatedFees.mul(DAO_PERDENTAGE) / 100; + accumulatedBurn = accumulatedFees.sub(accumulatedReward).sub(accumulatedDAOFund); + remainingReward = accumulatedReward.sub(claimedReward); + remainingDAOFund = accumulatedDAOFund.sub(claimedDAOFund); + remainingBurn = accumulatedBurn.sub(claimedBurn); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-33403.sol b/data_full/CVE_clean/2021-33403.sol new file mode 100644 index 00000000..96c0832f --- /dev/null +++ b/data_full/CVE_clean/2021-33403.sol @@ -0,0 +1,196 @@ +pragma solidity ^0.4.8; +contract MigrationAgent { + function migrateFrom(address _from, uint256 _value); +} +contract ERC20Interface { + function totalSupply() constant returns (uint256 totalSupply); + function balanceOf(address _owner) constant returns (uint256 balance); + function transfer(address _to, uint256 _value) returns (bool success); + function transferFrom(address _from, address _to, uint256 _value) returns (bool success); + function approve(address _spender, uint256 _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint256 remaining); + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract BlocklancerToken is ERC20Interface { + string public constant name = "Lancer Token"; + string public constant symbol = "LNC"; + uint8 public constant decimals = 18; + mapping(address => mapping (address => uint256)) allowed; + uint public fundingStart; + bool public funding = true; + bool allowTransfer=false; + address public master; + uint256 totalTokens; + uint exchangeRate=20000; + uint EarlyInvestorExchangeRate=25000; + bool startRefund=false; + mapping (address => uint256) balances; + mapping (address => bool) initialInvestor; + mapping (address => uint) lastTransferred; + mapping (address => uint256) balancesEther; + address public migrationAgent; + uint256 public totalMigrated; + event Migrate(address indexed _from, address indexed _to, uint256 _value); + event Refund(address indexed _from, uint256 _value); + uint totalParticipants; + function BlocklancerToken() { + master = msg.sender; + fundingStart = 1501977600; + initialInvestor[0x32be343b94f860124dc4fee278fdcbd38c102d88]=true;initialInvestor[0x3106fe2245b376888d684bdcd83dfa9641a869ff]=true;initialInvestor[0x7f7c64c7b7f5a611e739b4da26659bf741414917]=true;initialInvestor[0x4b3b8e0c2c221e916a48e2e5f3718ae2bce51894]=true;initialInvestor[0x507c8fea802a0772eb5e001a8fba38f36fb9b66b]=true;initialInvestor[0x3c35b66dbaf1bc716f41759c7513a7af2f727ce0]=true;initialInvestor[0x7da3ff5dc152352dcffaf08d528e78f1efd4e9d1]=true;initialInvestor[0x404b688a1d9eb850be2527c5dd341561cfa84e11]=true;initialInvestor[0x80ad7165f29f97896a0b5758193879de34fd9712]=true;initialInvestor[0xd70837a61a322f69ba3742111216a7b97d61d3a7]=true;initialInvestor[0x5eefc4f295045ea11827f515c10d50829580cd31]=true;initialInvestor[0xc8c154d54e8d66073b23361cc74cf5d13efc4dc9]=true;initialInvestor[0x00b279438dff4bb6f37038b12704e31967955cb0]=true;initialInvestor[0xfff78f0db7995c7f2299d127d332aef95bc3e7b7]=true;initialInvestor[0xae631a37ad50bf03e8028d0ae8ba041c70ac4c70]=true;initialInvestor[0x4effca51ba840ae9563f5ac1aa794d1e5d3a3806]=true;initialInvestor[0x315a233620b8536d37a92d588aaf5eb050b50d84]=true;initialInvestor[0x1ebf9e3470f303f6a6ac43347e41877b0a5aaa39]=true;initialInvestor[0xbf022480bda3f6c839cd443397761d5e83f3c02b]=true;initialInvestor[0xe727ea5340256a5236287ee3074eea34d8483457]=true;initialInvestor[0x45ecfeea42fc525c0b29313d3de9089488ef71dc]=true;initialInvestor[0xe59e4aac45862796cb52434967cf72ea46474ff3]=true;initialInvestor[0x7c367c14a322404f9e332b68d7d661b46a5c93ea]=true;initialInvestor[0x08bea4ccc9c45e506d5bc5e638acaa13fa3e801c]=true;initialInvestor[0x5dfb4a015eb0c3477a99ba88b2ac60459c879674]=true;initialInvestor[0x771a2137708ca7e07e7b7c55e5ea666e88d7c0c8]=true;initialInvestor[0xcc8ab06eb5a14855fc8b90abcb6be2f34ee5cea1]=true;initialInvestor[0x0764d446d0701a9b52382f8984b9d270d266e02c]=true;initialInvestor[0x2d90b415a38e2e19cdd02ff3ad81a97af7cbf672]=true;initialInvestor[0x0d4266de516944a49c8109a4397d1fcf06fb7ed0]=true;initialInvestor[0x7a5159617df20008b4dbe06d645a1b0305406794]=true;initialInvestor[0xaf9e23965c09ebf5d313c669020b0e1757cbb92c]=true;initialInvestor[0x33d94224754c122baa1ebaf455d16a9c82f69c98]=true;initialInvestor[0x267be1c1d684f78cb4f6a176c4911b741e4ffdc0]=true;initialInvestor[0xf6ac7c81ca099e34421b7eff7c9e80c8f56b74ae]=true;initialInvestor[0xd85faf59e73225ef386b46a1b17c493019b23e1e]=true;initialInvestor[0x3833f8dbdbd6bdcb6a883ff209b869148965b364]=true;initialInvestor[0x7ed1e469fcb3ee19c0366d829e291451be638e59]=true;initialInvestor[0x6c1ddafafd55a53f80cb7f4c8c8f9a9f13f61d70]=true;initialInvestor[0x94ef531595ffe510f8dc92e0e07a987f57784338]=true;initialInvestor[0xcc54e4e2f425cc4e207344f9e0619c1e40f42f26]=true;initialInvestor[0x70ee7bfc1aeac50349c29475a11ed4c57961b387]=true;initialInvestor[0x89be0bd8b6007101c7da7170a6461580994221d0]=true;initialInvestor[0xa7802ba51ba87556263d84cfc235759b214ccf35]=true;initialInvestor[0xb6a34bd460f02241e80e031023ec20ce6fc310ae]=true;initialInvestor[0x07004b458b56fb152c06ad81fe1be30c8a8b2ea1]=true;initialInvestor[0xb6da110659ef762a381cf2d6f601eb19b5f5d51e]=true;initialInvestor[0x20abf65634219512c6c98a64614c43220ca2085b]=true;initialInvestor[0x3afd1483693fe606c0e58f580bd08ae9aba092fd]=true;initialInvestor[0x61e120b9ca6559961982d9bd1b1dbea7485b84d1]=true;initialInvestor[0x481525718f1536ca2d739aa7e68b94b5e1d5d2c2]=true;initialInvestor[0x8e129a434cde6f52838fad2d30d8b08f744abf48]=true;initialInvestor[0x13df035952316f5fb663c262064ee39e44aa6b43]=true;initialInvestor[0x03c6c82a1d6d13b2f92ed63a10b1b791ffaa1e02]=true;initialInvestor[0xb079a72c627d0a34b880aee0504b901cbce64568]=true;initialInvestor[0xbf27721ca05c983c902df12492620ab2a8b9db91]=true;initialInvestor[0x4ced2b7d27ac74b0ecb2440d9857ba6c6407149f]=true;initialInvestor[0x330c63a5b737b5542be108a74b3fef6272619585]=true;initialInvestor[0x266dccd07a275a6e72b6bc549f7c2ce9e082f13f]=true;initialInvestor[0xf4280bf77a043568e40da2b8068b11243082c944]=true;initialInvestor[0x67d2f0e2d642a87300781df25c45b00bccaf6983]=true;initialInvestor[0x9f658a6628864e94f9a1c53ba519f0ae37a8b4a5]=true;initialInvestor[0x498d256ee53d4d05269cfa1a80c3214e525076ca]=true;initialInvestor[0xa1beac79dda14bce1ee698fdee47e2f7f2fd1f0d]=true;initialInvestor[0xfeb063bd508b82043d6b4d5c51e1e42b44f39b33]=true;initialInvestor[0xfeb7a283e1dbf2d5d8e9ba64ab5e607a41213561]=true;initialInvestor[0xabedb3d632fddccd4e95957be4ee0daffbe6acdd]=true;initialInvestor[0x4d8a7cb44d317113c82f25a0174a637a8f012ebb]=true;initialInvestor[0xe922c94161d45bdd31433b3c7b912ad214d399ce]=true;initialInvestor[0x11f9ad6eb7e9e98349b8397c836c0e3e88455b0a]=true;initialInvestor[0xfc28b52160639167fa59f30232bd8d43fab681e6]=true;initialInvestor[0xaf8a6c54fc8fa59cfcbc631e56b3d5b22fa42b75]=true;initialInvestor[0xd3c0ebb99a5616f3647f16c2efb40b133b5b1e1c]=true;initialInvestor[0x877341abeac8f44ac69ba7c99b1d5d31ce7a11d7]=true;initialInvestor[0xb22f376f70f34c906a88a91f6999a0bd1a0f3c3d]=true;initialInvestor[0x2c99db3838d6af157c8d671291d560a013c6c01e]=true;initialInvestor[0xd0f38af6984f3f847f7f2fcd6ea27aa878257059]=true;initialInvestor[0x2a5da89176d5316782d7f1c9db74d209679ad9ce]=true;initialInvestor[0xc88eea647a570738e69ad3dd8975577df720318d]=true;initialInvestor[0xb32b18dfea9072047a368ec056a464b73618345a]=true;initialInvestor[0x945b9a00bffb201a5602ee661f2a4cc6e5285ca6]=true;initialInvestor[0x86957ac9a15f114c08296523569511c22e471266]=true;initialInvestor[0x007bfe6994536ec9e89505c7de8e9eb748d3cb27]=true;initialInvestor[0x6ad0f0f578115b6fafa73df45e9f1e9056b84459]=true;initialInvestor[0x621663b4b6580b70b74afaf989c707d533bbec91]=true;initialInvestor[0xdc86c0632e88de345fc2ac01608c63f2ed99605a]=true;initialInvestor[0x3d83bb077b2557ef5f361bf1a9e68d093d919b28]=true;initialInvestor[0x56307b37377f75f397d4936cf507baf0f4943ea5]=true;initialInvestor[0x555cbe849bf5e01db195a81ecec1e65329fff643]=true;initialInvestor[0x7398a2edb928a2e179f62bfb795f292254f6850e]=true;initialInvestor[0x30382b132f30c175bee2858353f3a2dd0d074c3a]=true;initialInvestor[0x5baeac0a0417a05733884852aa068b706967e790]=true;initialInvestor[0xcb12b8a675e652296a8134e70f128521e633b327]=true;initialInvestor[0xaa8c03e04b121511858d88be7a1b2f5a2d70f6ac]=true;initialInvestor[0x77529c0ea5381262db964da3d5f6e2cc92e9b48b]=true;initialInvestor[0x59e5fe8a9637702c6d597c5f1c4ebe3fba747371]=true;initialInvestor[0x296fe436ecc0ea6b7a195ded26451e77e1335108]=true;initialInvestor[0x41bacae05437a3fe126933e57002ae3f129aa079]=true;initialInvestor[0x6cd5b9b60d2bcf81af8e6ef5d750dc9a8f18bf45]=true; + } + function getAmountofTotalParticipants() constant returns (uint){ + return totalParticipants; + } + function transfer(address _to, uint256 _value) returns (bool success) { + if(funding) throw; + if(!allowTransfer)throw; + var senderBalance = balances[msg.sender]; + if (senderBalance >= _value && _value > 0) { + senderBalance -= _value; + balances[msg.sender] = senderBalance; + balances[_to] += _value; + lastTransferred[msg.sender]=block.timestamp; + Transfer(msg.sender, _to, _value); + return true; + } + return false; + } + function totalSupply() constant returns (uint256 totalSupply) { + return totalTokens; + } + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function EtherBalanceOf(address _owner) constant returns (uint256) { + return balancesEther[_owner]; + } + function isInitialInvestor(address _owner) constant returns (bool) { + return initialInvestor[_owner]; + } + function TimeLeftBeforeCrowdsale() external constant returns (uint256) { + if(fundingStart>block.timestamp) + return fundingStart-block.timestamp; + else + return 0; + } + function migrate(uint256 _value) external { + if(funding) throw; + if(migrationAgent == 0) throw; + if(_value == 0) throw; + if(_value > balances[msg.sender]) throw; + balances[msg.sender] -= _value; + totalTokens -= _value; + totalMigrated += _value; + MigrationAgent(migrationAgent).migrateFrom(msg.sender, _value); + Migrate(msg.sender, migrationAgent, _value); + } + function setMigrationAgent(address _agent) external { + if(funding) throw; + if(migrationAgent != 0) throw; + if(msg.sender != master) throw; + migrationAgent = _agent; + } + function setExchangeRate(uint _exchangeRate){ + if(msg.sender!=master)throw; + exchangeRate=_exchangeRate; + } + function setICORunning(bool r){ + if(msg.sender!=master)throw; + funding=r; + } + function setTransfer(bool r){ + if(msg.sender!=master)throw; + allowTransfer=r; + } + function addInitialInvestor(address invest){ + if(msg.sender!=master)throw; + initialInvestor[invest]=true; + } + function addToken(address invest,uint256 value){ + if(msg.sender!=master)throw; + balances[invest]+=value; + totalTokens+=value; + } + function setEarlyInvestorExchangeRate(uint invest){ + if(msg.sender!=master)throw; + EarlyInvestorExchangeRate=invest; + } + function setStartDate(uint time){ + if(msg.sender!=master)throw; + fundingStart=time; + } + function setStartRefund(bool s){ + if(msg.sender!=master)throw; + startRefund=s; + } + function getExchangeRate(address investorAddress) constant returns(uint){ + if(initialInvestor[investorAddress]) + return EarlyInvestorExchangeRate; + else + return exchangeRate; + } + function ICOopen() constant returns(bool){ + if(!funding) return false; + else if(block.timestamp < fundingStart) return false; + else return true; + } + function() payable external { + if(!funding) throw; + if(block.timestamp < fundingStart) throw; + if(msg.value == 0) throw; + var numTokens = msg.value * getExchangeRate(msg.sender); + totalTokens += numTokens; + balances[msg.sender] += numTokens; + balancesEther[msg.sender] += msg.value; + totalParticipants+=1; + Transfer(0, msg.sender, numTokens); + } + function finalize(uint percentOfTotal) external { + if(msg.sender!=master)throw; + if(funding)throw; + funding = false; + uint256 additionalTokens = totalTokens * percentOfTotal / (100 - percentOfTotal); + totalTokens += additionalTokens; + balances[master] += additionalTokens; + Transfer(0, master, additionalTokens); + if (!master.send(this.balance)) throw; + } + function refund() external { + if(!startRefund) throw; + var gntValue = balances[msg.sender]; + var ethValue = balancesEther[msg.sender]; + if (gntValue == 0) throw; + balances[msg.sender] = 0; + balancesEther[msg.sender] = 0; + totalTokens -= gntValue; + Refund(msg.sender, ethValue); + if (!msg.sender.send(ethValue)) throw; + } + function transferFrom(address _from,address _to,uint256 _amount) returns (bool success) { + if(funding) throw; + if(!allowTransfer)throw; + if (balances[_from] >= _amount + && allowed[_from][msg.sender] >= _amount + && _amount > 0 + && balances[_to] + _amount > balances[_to]) { + balances[_from] -= _amount; + allowed[_from][msg.sender] -= _amount; + balances[_to] += _amount; + Transfer(_from, _to, _amount); + return true; + } else { + return false; + } + } + function approve(address _spender, uint256 _amount) returns (bool success) { + if(funding) throw; + if(!allowTransfer)throw; + allowed[msg.sender][_spender] = _amount; + Approval(msg.sender, _spender, _amount); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-34270.sol b/data_full/CVE_clean/2021-34270.sol new file mode 100644 index 00000000..47ed9c0d --- /dev/null +++ b/data_full/CVE_clean/2021-34270.sol @@ -0,0 +1,128 @@ +pragma solidity ^0.4.13; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract doftManaged { + address public doftManager; + function doftManaged() { + doftManager = msg.sender; + } + modifier onlyDoftManager { + require(msg.sender == doftManager); + _; + } + function transferDoftManagment(address newDoftManager) onlyDoftManager { + doftManager = newDoftManager; + } +} +contract ERC20 { + function totalSupply() constant returns (uint totalSupply); + function balanceOf(address _owner) constant returns (uint balance); + function transfer(address _to, uint _value) returns (bool success); + function transferFrom(address _from, address _to, uint _value) returns (bool success); + function approve(address _spender, uint _value) returns (bool success); + function allowance(address _owner, address _spender) constant returns (uint remaining); + event Transfer(address indexed _from, address indexed _to, uint _value); + event Approval(address indexed _owner, address indexed _spender, uint _value); +} +contract BasicToken is ERC20 { + uint256 _totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed _from, address indexed _to, uint _value); + event Approval(address indexed _owner, address indexed _spender, uint _value); + function totalSupply() constant returns (uint totalSupply){ + totalSupply = _totalSupply; + } + function balanceOf(address _owner) constant returns (uint balance){ + return balanceOf[_owner]; + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] > _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function transfer(address _to, uint _value) returns (bool success) { + _transfer(msg.sender, _to, _value); + return true; + } + function transferFrom(address _from, address _to, uint _value) returns (bool success) { + require (_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint _value) returns (bool success) { + allowance[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowance[_owner][_spender]; + } +} +contract Doftcoin is BasicToken, owned, doftManaged { + string public name; + string public symbol; + uint256 public decimals; + uint256 public sellPrice; + uint256 public buyPrice; + uint256 public miningStorage; + string public version; + event Mine(address target, uint256 minedAmount); + function Doftcoin() { + decimals = 18; + _totalSupply = 5000000 * (10 ** decimals); + miningStorage = _totalSupply / 2; + name = "Doftcoin"; + symbol = "DFC"; + balanceOf[msg.sender] = _totalSupply; + version = "1.0"; + } + function mintToken(address _target, uint256 _mintedAmount) onlyOwner { + require (_target != 0x0); + balanceOf[_target] += _mintedAmount; + _totalSupply += _mintedAmount; + Transfer(0, this, _mintedAmount); + Transfer(this, _target, _mintedAmount); + } + function buy() payable { + require(buyPrice > 0); + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 _amount) { + require(sellPrice > 0); + require(this.balance >= _amount * sellPrice); + _transfer(msg.sender, this, _amount); + msg.sender.transfer(_amount * sellPrice); + } + function setPrices(uint256 _newSellPrice, uint256 _newBuyPrice) onlyDoftManager { + sellPrice = _newSellPrice; + buyPrice = _newBuyPrice; + } + function mine(address _target, uint256 _minedAmount) onlyDoftManager { + require (_minedAmount > 0); + require (_target != 0x0); + require (miningStorage - _minedAmount >= 0); + require (balanceOf[doftManager] >= _minedAmount); + require (balanceOf[_target] + _minedAmount > balanceOf[_target]); + balanceOf[doftManager] -= _minedAmount; + balanceOf[_target] += _minedAmount; + miningStorage -= _minedAmount; + Mine(_target, _minedAmount); + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-34272.sol b/data_full/CVE_clean/2021-34272.sol new file mode 100644 index 00000000..cc850dbf --- /dev/null +++ b/data_full/CVE_clean/2021-34272.sol @@ -0,0 +1,133 @@ +pragma solidity ^0.4.18; +contract Owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 6; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + Burn(_from, _value); + return true; + } +} +contract RobotBTC is Owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + bool public isOpened; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function RobotBTC( + uint256 initialSupply, + string tokenName, + string tokenSymbol + ) TokenERC20(initialSupply, tokenName, tokenSymbol) public { + } + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value > balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable public { + require(isOpened); + uint amount = msg.value / buyPrice; + _transfer(this, msg.sender, amount); + } + function sell(uint256 amount) public { + require(this.balance >= amount * sellPrice); + require(isOpened); + _transfer(msg.sender, this, amount); + msg.sender.transfer(amount * sellPrice); + } + function setExchange(bool istrue) onlyOwner public { + isOpened = istrue; + } +} \ No newline at end of file diff --git a/data_full/CVE_clean/2021-34273.sol b/data_full/CVE_clean/2021-34273.sol new file mode 100644 index 00000000..504673ff --- /dev/null +++ b/data_full/CVE_clean/2021-34273.sol @@ -0,0 +1,80 @@ +pragma solidity ^0.4.4; +contract Token { + function totalSupply() constant returns (uint256 supply) {} + function balanceOf(address _owner) constant returns (uint256 balance) {} + function transfer(address _to, uint256 _value) returns (bool success) {} + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} + function approve(address _spender, uint256 _value) returns (bool success) {} + function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} + event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Approval(address indexed _owner, address indexed _spender, uint256 _value); +} +contract Owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +contract StandardToken is Token, Owned { + function transfer(address _to, uint256 _value) returns (bool success) { + if (balances[msg.sender] >= _value && _value > 0) { + balances[msg.sender] -= _value; + balances[_to] += _value; + Transfer(msg.sender, _to, _value); + return true; + } else { return false; } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { + balances[_to] += _value; + balances[_from] -= _value; + allowed[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } else { return false; } + } + function distributeToken(address[] addresses, uint256 _value) { + for (uint i = 0; i < addresses.length; i++) { + balances[msg.sender] -= _value; + balances[addresses[i]] += _value; + Transfer(msg.sender, addresses[i], _value); + } +} + function balanceOf(address _owner) constant returns (uint256 balance) { + return balances[_owner]; + } + function approve(address _spender, uint256 _value) returns (bool success) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + function allowance(address _owner, address _spender) constant returns (uint256 remaining) { + return allowed[_owner][_spender]; + } + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + uint256 public totalSupply; +} +contract B2X is StandardToken { + function () { + throw; + } + string public name; + uint8 public decimals; + string public symbol; + function B2X( + ) { + totalSupply = 21 * 10 ** 14; + balances[msg.sender] = totalSupply; + name = "BTC2X"; + decimals = 8; + symbol = "B2X"; + } +} \ No newline at end of file diff --git a/data_full/CVE_label/CVE2description.json b/data_full/CVE_label/CVE2description.json new file mode 100644 index 00000000..e05f122c --- /dev/null +++ b/data_full/CVE_label/CVE2description.json @@ -0,0 +1,564 @@ +{ + "CVE-2023-41052": "Vyper is a Pythonic Smart Contract Language. In affected versions the order of evaluation of the arguments of the builtin functions `uint256_addmod`, `uint256_mulmod`, `ecadd` and `ecmul` does not follow source order. This behaviour is problematic when the evaluation of one of the arguments produces side effects that other arguments depend on. A patch is currently being developed on pull request #3583. When using builtins from the list above, users should make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", + "CVE-2023-40015": "Vyper is a Pythonic Smart Contract Language. For the following (probably non-exhaustive) list of expressions, the compiler evaluates the arguments from right to left instead of left to right. `unsafe_add, unsafe_sub, unsafe_mul, unsafe_div, pow_mod256, |, &, ^ (bitwise operators), bitwise_or (deprecated), bitwise_and (deprecated), bitwise_xor (deprecated), raw_call, <, >, <=, >=, ==, !=, in, not in (when lhs and rhs are enums)`. This behaviour becomes a problem when the evaluation of one of the arguments produces side effects that other arguments depend on. The following expressions can produce side-effect: state modifying external call , state modifying internal call, `raw_call`, `pop()` when used on a Dynamic Array stored in the storage, `create_minimal_proxy_to`, `create_copy_of`, `create_from_blueprint`. This issue has not yet been patched. Users are advised to make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", + "CVE-2023-40014": "OpenZeppelin Contracts is a library for secure smart contract development. Starting in version 4.0.0 and prior to version 4.9.3, contracts using `ERC2771Context` along with a custom trusted forwarder may see `_msgSender` return `address(0)` in calls that originate from the forwarder with calldata shorter than 20 bytes. This combination of circumstances does not appear to be common, in particular it is not the case for `MinimalForwarder` from OpenZeppelin Contracts, or any deployed forwarder the team is aware of, given that the signer address is appended to all calls that originate from these forwarders. The problem has been patched in v4.9.3.", + "CVE-2023-39363": "Vyer is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a `.vy` contract compiled with `vyper` versions `0.2.15`, `0.2.16`, or `0.3.0`; a primary function that utilizes the `@nonreentrant` decorator with a specific `key` and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same `key` and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.", + "CVE-2023-34459": "OpenZeppelin Contracts is a library for smart contract development. Starting in version 4.7.0 and prior to version 4.9.2, when the `verifyMultiProof`, `verifyMultiProofCalldata`, `procesprocessMultiProof`, or `processMultiProofCalldat` functions are in use, it is possible to construct merkle trees that allow forging a valid multiproof for an arbitrary set of leaves. A contract may be vulnerable if it uses multiproofs for verification and the merkle tree that is processed includes a node with value 0 at depth 1 (just under the root). This could happen inadvertedly for balanced trees with 3 leaves or less, if the leaves are not hashed. This could happen deliberately if a malicious tree builder includes such a node in the tree. A contract is not vulnerable if it uses single-leaf proving (`verify`, `verifyCalldata`, `processProof`, or `processProofCalldata`), or if it uses multiproofs with a known tree that has hashed leaves. Standard merkle trees produced or validated with the @openzeppelin/merkle-tree library are safe. The problem has been patched in version 4.9.2. Some workarounds are available. For those using multiproofs: When constructing merkle trees hash the leaves and do not insert empty nodes in your trees. Using the @openzeppelin/merkle-tree package eliminates this issue. Do not accept user-provided merkle roots without reconstructing at least the first level of the tree. Verify the merkle tree structure by reconstructing it from the leaves.", + "CVE-2023-34449": "ink! is an embedded domain specific language to write smart contracts in Rust for blockchains built on the Substrate framework. Starting in version 4.0.0 and prior to version 4.2.1, the return value when using delegate call mechanics, either through `CallBuilder::delegate` or `ink_env::invoke_contract_delegate`, is decoded incorrectly. This bug was related to the mechanics around decoding a call's return buffer, which was changed as part of pull request 1450. Since this feature was only released in ink! 4.0.0, no previous versions are affected. Users who have an ink! 4.x series contract should upgrade to 4.2.1 to receive a patch.", + "CVE-2023-34234": "OpenZeppelin Contracts is a library for smart contract development. By frontrunning the creation of a proposal, an attacker can become the proposer and gain the ability to cancel it. The attacker can do this repeatedly to try to prevent a proposal from being proposed at all. This impacts the `Governor` contract in v4.9.0 only, and the `GovernorCompatibilityBravo` contract since v4.3.0. This problem has been patched in 4.9.1 by introducing opt-in frontrunning protection. Users are advised to upgrade. Users unable to upgrade may submit the proposal creation transaction to an endpoint with frontrunning protection as a workaround.", + "CVE-2023-32675": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In contracts with more than one regular nonpayable function, it is possible to send funds to the default function, even if the default function is marked `nonpayable`. This applies to contracts compiled with vyper versions prior to 0.3.8. This issue was fixed by the removal of the global `calldatasize` check in commit `02339dfda`. Users are advised to upgrade to version 0.3.8. Users unable to upgrade should avoid use of nonpayable default functions.", + "CVE-2023-32059": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, internal calls with default arguments are compiled incorrectly. Depending on the number of arguments provided in the call, the defaults are added not right-to-left, but left-to-right. If the types are incompatible, typechecking is bypassed. The ability to pass kwargs to internal functions is an undocumented feature that is not well known about. The issue is patched in version 0.3.8.", + "CVE-2023-32058": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, due to missing overflow check for loop variables, by assigning the iterator of a loop to a variable, it is possible to overflow the type of the latter. The issue seems to happen only in loops of type `for i in range(a, a + N)` as in loops of type `for i in range(start, stop)` and `for i in range(stop)`, the compiler is able to raise a `TypeMismatch` when trying to overflow the variable. The problem has been patched in version 0.3.8.", + "CVE-2023-31146": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, during codegen, the length word of a dynarray is written before the data, which can result in out-of-bounds array access in the case where the dynarray is on both the lhs and rhs of an assignment. The issue can cause data corruption across call frames. The expected behavior is to revert due to out-of-bounds array access. Version 0.3.8 contains a patch for this issue.", + "CVE-2023-30837": "Vyper is a pythonic smart contract language for the EVM. The storage allocator does not guard against allocation overflows in versions prior to 0.3.8. An attacker can overwrite the owner variable. This issue was fixed in version 0.3.8.", + "CVE-2023-30629": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions 0.3.1 through 0.3.7, the Vyper compiler generates the wrong bytecode. Any contract that uses the `raw_call` with `revert_on_failure=False` and `max_outsize=0` receives the wrong response from `raw_call`. Depending on the memory garbage, the result can be either `True` or `False`. A patch is available and, as of time of publication, anticipated to be part of Vyper 0.3.8. As a workaround, one may always put `max_outsize>0`.", + "CVE-2023-30542": "OpenZeppelin Contracts is a library for secure smart contract development. The proposal creation entrypoint (`propose`) in `GovernorCompatibilityBravo` allows the creation of proposals with a `signatures` array shorter than the `calldatas` array. This causes the additional elements of the latter to be ignored, and if the proposal succeeds the corresponding actions would eventually execute without any calldata. The `ProposalCreated` event correctly represents what will eventually execute, but the proposal parameters as queried through `getActions` appear to respect the original intended calldata. This issue has been patched in 4.8.3. As a workaround, ensure that all proposals that pass through governance have equal length `signatures` and `calldatas` parameters.", + "CVE-2023-30541": "OpenZeppelin Contracts is a library for secure smart contract development. A function in the implementation contract may be inaccessible if its selector clashes with one of the proxy's own selectors. Specifically, if the clashing function has a different signature with incompatible ABI encoding, the proxy could revert while attempting to decode the arguments from calldata. The probability of an accidental clash is negligible, but one could be caused deliberately and could cause a reduction in availability. The issue has been fixed in version 4.8.3. As a workaround if a function appears to be inaccessible for this reason, it may be possible to craft the calldata such that ABI decoding does not fail at the proxy and the function is properly proxied through.", + "CVE-2023-26488": "OpenZeppelin Contracts is a library for secure smart contract development. The ERC721Consecutive contract designed for minting NFTs in batches does not update balances when a batch has size 1 and consists of a single token. Subsequent transfers from the receiver of that token may overflow the balance as reported by `balanceOf`. The issue exclusively presents with batches of size 1. The issue has been patched in 4.8.2.", + "CVE-2023-23940": "OpenZeppelin Contracts for Cairo is a library for secure smart contract development written in Cairo for StarkNet, a decentralized ZK Rollup. `is_valid_eth_signature` is missing a call to `finalize_keccak` after calling `verify_eth_signature`. As a result, any contract using `is_valid_eth_signature` from the account library (such as the `EthAccount` preset) is vulnerable to a malicious sequencer. Specifically, the malicious sequencer would be able to bypass signature validation to impersonate an instance of these accounts. The issue has been patched in 0.6.1.", + "CVE-2022-46173": "Elrond-GO is a go implementation for the Elrond Network protocol. Versions prior to 1.3.50 are subject to a processing issue where nodes are affected when trying to process a cross-shard relayed transaction with a smart contract deploy transaction data. The problem was a bad correlation between the transaction caches and the processing component. If the above-mentioned transaction was sent with more gas than required, the smart contract result (SCR transaction) that should have returned the leftover gas, would have been wrongly added to a cache that the processing unit did not consider. The node stopped notarizing metachain blocks. The fix was actually to extend the SCR transaction search in all other caches if it wasn't found in the correct (expected) sharded-cache. There are no known workarounds at this time. This issue has been patched in version 1.3.50.", + "CVE-2022-39384": "OpenZeppelin Contracts is a library for secure smart contract development. Before version 4.4.1 but after 3.2.0, initializer functions that are invoked separate from contract creation (the most prominent example being minimal proxies) may be reentered if they make an untrusted non-view external call. Once an initializer has finished running it can never be re-executed. However, an exception put in place to support multiple inheritance made reentrancy possible in the scenario described above, breaking the expectation that there is a single execution. Note that upgradeable proxies are commonly initialized together with contract creation, where reentrancy is not feasible, so the impact of this issue is believed to be minor. This issue has been patched, please upgrade to version 4.4.1. As a workaround, avoid untrusted external calls during initialization.", + "CVE-2022-36061": "Elrond go is the go implementation for the Elrond Network protocol. In versions prior to 1.3.35, read only calls between contracts can generate smart contracts results. For example, if contract A calls in read only mode contract B and the called function will make changes upon the contract's B state, the state will be altered for contract B as if the call was not made in the read-only mode. This can lead to some effects not designed by the original smart contracts programmers. This issue was patched in version 1.3.35. There are no known workarounds.", + "CVE-2022-35961": "OpenZeppelin Contracts is a library for secure smart contract development. The functions `ECDSA.recover` and `ECDSA.tryRecover` are vulnerable to a kind of signature malleability due to accepting EIP-2098 compact signatures in addition to the traditional 65 byte signature format. This is only an issue for the functions that take a single `bytes` argument, and not the functions that take `r, v, s` or `r, vs` as separate arguments. The potentially affected contracts are those that implement signature reuse or replay protection by marking the signature itself as used rather than the signed message or a nonce included in it. A user may take a signature that has already been submitted, submit it again in a different form, and bypass this protection. The issue has been patched in 4.7.3.", + "CVE-2022-35916": "OpenZeppelin Contracts is a library for secure smart contract development. Contracts using the cross chain utilities for Arbitrum L2, `CrossChainEnabledArbitrumL2` or `LibArbitrumL2`, will classify direct interactions of externally owned accounts (EOAs) as cross chain calls, even though they are not started on L1. This issue has been patched in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-35915": "OpenZeppelin Contracts is a library for secure smart contract development. The target contract of an EIP-165 `supportsInterface` query can cause unbounded gas consumption by returning a lot of data, while it is generally assumed that this operation has a bounded cost. The issue has been fixed in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-31198": "OpenZeppelin Contracts is a library for secure smart contract development. This issue concerns instances of Governor that use the module `GovernorVotesQuorumFraction`, a mechanism that determines quorum requirements as a percentage of the voting token's total supply. In affected instances, when a proposal is passed to lower the quorum requirements, past proposals may become executable if they had been defeated only due to lack of quorum, and the number of votes it received meets the new quorum requirement. Analysis of instances on chain found only one proposal that met this condition, and we are actively monitoring for new occurrences of this particular issue. This issue has been patched in v4.7.2. Users are advised to upgrade. Users unable to upgrade should consider avoiding lowering quorum requirements if a past proposal was defeated for lack of quorum.", + "CVE-2022-31172": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.1.0 until 4.7.1 are vulnerable to the SignatureChecker reverting. `SignatureChecker.isValidSignatureNow` is not expected to revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-1271 as expected. The contracts that may be affected are those that use `SignatureChecker` to check the validity of a signature and handle invalid signatures in a way other than reverting. The issue was patched in version 4.7.1.", + "CVE-2022-31170": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.0.0 until 4.7.1 are vulnerable to ERC165Checker reverting instead of returning `false`. `ERC165Checker.supportsInterface` is designed to always successfully return a boolean, and under no circumstance revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-165 as expected, specifically if it returns a value other than 0 or 1. The contracts that may be affected are those that use `ERC165Checker` to check for support for an interface and then handle the lack of support in a way other than reverting. The issue was patched in version 4.7.1.", + "CVE-2022-29255": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions prior to 0.3.4 when a calling an external contract with no return value, the contract address (including side effects) could be evaluated twice. This may result in incorrect outcomes for contracts. This issue has been addressed in v0.3.4.", + "CVE-2022-27134": "EOSIO batdappboomx v327c04cf has an Access-control vulnerability in the `transfer` function of the smart contract which allows remote attackers to win the cryptocurrency without paying ticket fee via the `std::string memo` parameter.", + "CVE-2022-24845": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In affected versions, the return of `<iface>.returns_int128()` is not validated to fall within the bounds of `int128`. This issue can result in a misinterpretation of the integer value and lead to incorrect behavior. As of v0.3.0, `<iface>.returns_int128()` is validated in simple expressions, but not complex expressions. Users are advised to upgrade. There is no known workaround for this issue.", + "CVE-2022-24788": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. Versions of vyper prior to 0.3.2 suffer from a potential buffer overrun. Importing a function from a JSON interface which returns `bytes` generates bytecode which does not clamp bytes length, potentially resulting in a buffer overrun. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-24787": "Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. In version 0.3.1 and prior, bytestrings can have dirty bytes in them, resulting in the word-for-word comparisons giving incorrect results. Even without dirty nonzero bytes, two bytestrings can compare to equal if one ends with `\"\\x00\"` because there is no comparison of the length. A patch is available and expected to be part of the 0.3.2 release. There are currently no known workarounds.", + "CVE-2021-41264": "OpenZeppelin Contracts is a library for smart contract development. In affected versions upgradeable contracts using `UUPSUpgradeable` may be vulnerable to an attack affecting uninitialized implementation contracts. A fix is included in version 4.3.2 of `@openzeppelin/contracts` and `@openzeppelin/contracts-upgradeable`. For users unable to upgrade; initialize implementation contracts using `UUPSUpgradeable` by invoking the initializer function (usually called `initialize`). An example is provided [in the forum](https://forum.openzeppelin.com/t/security-advisory-initialize-uups-implementation-contracts/15301).", + "CVE-2021-41122": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions external functions did not properly validate the bounds of decimal arguments. The can lead to logic errors. This issue has been resolved in version 0.3.0.", + "CVE-2021-41121": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions when performing a function call inside a literal struct, there is a memory corruption issue that occurs because of an incorrect pointer to the the top of the stack. This issue has been resolved in version 0.3.0.", + "CVE-2021-39168": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", + "CVE-2021-39167": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", + "CVE-2021-34273": "A security flaw in the 'owned' function of a smart contract implementation for BTC2X (B2X), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", + "CVE-2021-34272": "A security flaw in the 'owned' function of a smart contract implementation for RobotCoin (RBTC), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", + "CVE-2021-34270": "An integer overflow in the mintToken function of a smart contract implementation for Doftcoin Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses.", + "CVE-2021-33403": "An integer overflow in the transfer function of a smart contract implementation for Lancer Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses between two large accounts during a transaction.", + "CVE-2021-3006": "The breed function in the smart contract implementation for Farm in Seal Finance (Seal), an Ethereum token, lacks access control and thus allows price manipulation, as exploited in the wild in December 2020 and January 2021.", + "CVE-2021-3004": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", + "CVE-2020-35962": "The sellTokenForLRC function in the vault protocol in the smart contract implementation for Loopring (LRC), an Ethereum token, lacks access control for fee swapping and thus allows price manipulation.", + "CVE-2020-17753": "An issue was discovered in function addMeByRC in the smart contract implementation for RC, an Ethereum token, allows attackers to transfer an arbitrary amount of tokens to an arbitrary address.", + "CVE-2020-17752": "Integer overflow vulnerability in payable function of a smart contract implementation for an Ethereum token, as demonstrated by the smart contract implemented at address 0xB49E984A83d7A638E7F2889fc8328952BA951AbE, an implementation for MillionCoin (MON).", + "CVE-2019-15080": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", + "CVE-2019-15079": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", + "CVE-2019-15078": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", + "CVE-2018-19834": "The quaker function of a smart contract implementation for BOMBBA (BOMB), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19833": "The owned function of a smart contract implementation for DDQ, an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19832": "The NETM() function of a smart contract implementation for NewIntelTechMedia (NETM), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19831": "The ToOwner() function of a smart contract implementation for Cryptbond Network (CBN), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19830": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", + "CVE-2018-18425": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", + "CVE-2018-17987": "The determineWinner function of a smart contract implementation for HashHeroes Tiles, an Ethereum game, uses a certain blockhash value in an attempt to generate a random number for the case where NUM_TILES equals the number of people who purchased a tile, which allows an attacker to control the awarding of the prize by being the last person to purchase a tile.", + "CVE-2018-17968": "A gambling smart contract implementation for RuletkaIo, an Ethereum gambling game, generates a random value that is predictable by an external contract call. The developer wrote a random() function that uses a block timestamp and block hash from the Ethereum blockchain. This can be predicted by writing the same random function code in an exploit contract to determine the deadSeat value.", + "CVE-2018-17882": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", + "CVE-2018-17877": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-17111": "The onlyOwner modifier of a smart contract implementation for Coinlancer (CL), an Ethereum ERC20 token, has a potential access control vulnerability. All contract users can access functions that use this onlyOwner modifier, because the comparison between msg.sender and owner is incorrect.", + "CVE-2018-17071": "The fallback function of a simple lottery smart contract implementation for Lucky9io, an Ethereum gambling game, generates a random value with the publicly readable variable entry_number. This variable is private, yet it is readable by eth.getStorageAt function. Also, attackers can purchase a ticket at a low price by directly calling the fallback function with small msg.value, because the developer set the currency unit incorrectly. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-17050": "The mintToken function of a smart contract implementation for PolyAi (AI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-15552": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-14715": "The endCoinFlip function and throwSlammer function of the smart contract implementations for Cryptogs, an Ethereum game, generate random numbers with an old block's hash. Therefore, attackers can predict the random number and always win the game.", + "CVE-2018-14576": "The mintTokens function of a smart contract implementation for SunContract, an Ethereum token, has an integer overflow via the _amount variable.", + "CVE-2018-14089": "An issue was discovered in a smart contract implementation for Virgo_ZodiacToken, an Ethereum token. In this contract, 'bool sufficientAllowance = allowance <= _value' will cause an arbitrary transfer in the function transferFrom because '<=' is used instead of '>=' (which was intended). An attacker can transfer from any address to his address, and does not need to meet the 'allowance > value' condition.", + "CVE-2018-14088": "An issue was discovered in a smart contract implementation for STeX White List (STE(WL)), an Ethereum token. The contract has an integer overflow. If the owner sets the value of amount to a large number then the \"amount * 1000000000000000\" will cause an integer overflow in withdrawToFounders().", + "CVE-2018-14087": "An issue was discovered in a smart contract implementation for EUC (EUC), an Ethereum token. The contract has an integer overflow. If the owner sets the value of buyPrice to a large number in setPrices() then the \"msg.value * buyPrice\" will cause an integer overflow in the fallback function.", + "CVE-2018-14086": "An issue was discovered in a smart contract implementation for SingaporeCoinOrigin (SCO), an Ethereum token. The contract has an integer overflow. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", + "CVE-2018-14085": "An issue was discovered in a smart contract implementation for UserWallet 0x0a7bca9FB7AfF26c6ED8029BB6f0F5D291587c42, an Ethereum token. First, suppose that the owner adds the evil contract address to his sweepers. The evil contract looks like this: contract Exploit { uint public start; function sweep(address _token, uint _amount) returns (bool) { start = 0x123456789; return true;} }. Then, when one calls the function sweep() in the UserWallet contract, it will change the sweeperList to 0X123456789.", + "CVE-2018-14084": "An issue was discovered in a smart contract implementation for MKCB, an Ethereum token. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", + "CVE-2018-14063": "The increaseApproval function of a smart contract implementation for Tracto (TRCT), an Ethereum ERC20 token, has an integer overflow.", + "CVE-2018-14006": "An integer overflow vulnerability exists in the function multipleTransfer of Neo Genesis Token (NGT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14005": "An integer overflow vulnerability exists in the function transferAny of Malaysia coins (Xmc), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14004": "An integer overflow vulnerability exists in the function transfer_tokens_after_ICO of GlobeCoin (GLB), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14003": "An integer overflow vulnerability exists in the function batchTransfer of WeMediaChain (WMC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14002": "An integer overflow vulnerability exists in the function distribute of MP3 Coin (MP3), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14001": "An integer overflow vulnerability exists in the function batchTransfer of SHARKTECH (SKT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-13877": "The doPayouts() function of the smart contract implementation for MegaCryptoPolis, an Ethereum game, has a Denial of Service vulnerability. If a smart contract that has a fallback function always causing exceptions buys a land, users cannot buy lands near that contract's land, because those purchase attempts will not be completed unless the doPayouts() function successfully sends Ether to certain neighbors.", + "CVE-2018-13836": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-13783": "The mintToken function of a smart contract implementation for JiucaiToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13782": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13781": "The mintToken function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13780": "The mintToken function of a smart contract implementation for ESH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13779": "The mintToken function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13778": "The mintToken function of a smart contract implementation for CGCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13777": "The mintToken function of a smart contract implementation for RRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13776": "The mintToken function of a smart contract implementation for AppleToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13775": "The mintToken function of a smart contract implementation for RCKT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13774": "The mintToken function of a smart contract implementation for Bitstarti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13773": "The mintToken function of a smart contract implementation for Enterprise Token Ecosystem (ETE) (Contract Name: NetkillerToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13772": "The mintToken function of a smart contract implementation for TheFlashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13771": "The mintToken function of a smart contract implementation for ExacoreContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13770": "The mintToken function of a smart contract implementation for UltimateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13769": "The mintToken function of a smart contract implementation for JeansToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13768": "The mintToken function of a smart contract implementation for ZToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13767": "The mintToken function of a smart contract implementation for Cornerstone, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13766": "The mintToken function of a smart contract implementation for Easticoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13765": "The mintToken function of a smart contract implementation for LandCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13764": "The mintToken function of a smart contract implementation for BiquToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13763": "The mintToken function of a smart contract implementation for Ublasti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13762": "The mintToken function of a smart contract implementation for Yumerium, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13761": "The mintToken function of a smart contract implementation for NetkillerAdvancedTokenAirDrop, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13760": "The mintToken function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13759": "The mintToken function of a smart contract implementation for BIGCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13758": "The mintToken function of a smart contract implementation for LoliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13757": "The mintToken function of a smart contract implementation for Coinquer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13756": "The mintToken function of a smart contract implementation for CherryCoinFoundation, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13755": "The mintToken function of a smart contract implementation for OTAKUToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13754": "The mintToken function of a smart contract implementation for CryptosisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13753": "The mintToken function of a smart contract implementation for DeWeiSecurityServiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13752": "The mintToken function of a smart contract implementation for Thread, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13751": "The mintToken function of a smart contract implementation for JustWallet, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13750": "The mintToken function of a smart contract implementation for RichiumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13749": "The mintToken function of a smart contract implementation for FinalToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13748": "The mintToken function of a smart contract implementation for CarToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13747": "The mintToken function of a smart contract implementation for VanMinhCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13746": "The mintToken function of a smart contract implementation for kBit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13745": "The mintToken function of a smart contract implementation for STCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13744": "The mintToken function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13743": "The mintToken function of a smart contract implementation for SuperEnergy (SEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13742": "The mintToken function of a smart contract implementation for tickets (TKT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13741": "The mintToken function of a smart contract implementation for ABLGenesisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13740": "The mintToken function of a smart contract implementation for OneChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13739": "The mintToken function of a smart contract implementation for dopnetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13738": "The mintToken function of a smart contract implementation for PELOCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13737": "The mintToken function of a smart contract implementation for AnovaBace, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13736": "The mintToken function of a smart contract implementation for ELearningCoinERC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13735": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13734": "The mintToken function of a smart contract implementation for AZTToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13733": "The mintToken function of a smart contract implementation for ProjectJ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13732": "The mintToken function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13731": "The mintToken function of a smart contract implementation for TokenMACHU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13730": "The mintToken function of a smart contract implementation for HEY, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13729": "The mintToken function of a smart contract implementation for JPMD100B, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13728": "The mintToken function of a smart contract implementation for JixoCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13727": "The mintToken function of a smart contract implementation for Eastcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13726": "The mintToken function of a smart contract implementation for ISeeVoiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13725": "The mintToken function of a smart contract implementation for GlobalSuperGameToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13724": "The mint function of a smart contract implementation for HYIPCrowdsale1, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13723": "The mintToken function of a smart contract implementation for SERVVIZIOToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13722": "The mint function of a smart contract implementation for HYIPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13721": "The mintToken function of a smart contract implementation for GoMineWorld, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13720": "The mintToken function of a smart contract implementation for Antoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13719": "The mintToken function of a smart contract implementation for BiteduToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13718": "The mintToken function of a smart contract implementation for FuturXe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13717": "The mintToken function of a smart contract implementation for HormitechToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13716": "The mintToken function of a smart contract implementation for sexhdsolo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13715": "The mintToken function of a smart contract implementation for BpsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13714": "The mintToken function of a smart contract implementation for CM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13713": "The mintToken function of a smart contract implementation for Tradesman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13712": "The mintToken function of a smart contract implementation for PMET, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13711": "The mintToken function of a smart contract implementation for Databits, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13710": "The mintToken function of a smart contract implementation for Mjolnir, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13709": "The mintToken function of a smart contract implementation for Tube, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13708": "The mintToken function of a smart contract implementation for Order (ETH) (Contract Name: BuyToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13707": "The mintToken function of a smart contract implementation for YSS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13706": "The mintToken function of a smart contract implementation for IdeaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13705": "The mintToken function of a smart contract implementation for PMHToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13704": "The mintToken function of a smart contract implementation for eddToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13703": "The mintToken function of a smart contract implementation for CERB_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13702": "The mintToken function of a smart contract implementation for Essence, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13701": "The mintToken function of a smart contract implementation for KissMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13700": "The mintToken function of a smart contract implementation for IPMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13699": "The mintToken function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13698": "The mintTokens function of a smart contract implementation for Play2LivePromo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13697": "The mintToken function of a smart contract implementation for RobotBTC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13696": "The mintToken function of a smart contract implementation for RedTicket, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13695": "The mint function of a smart contract implementation for CTest7, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13694": "The mintToken function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13693": "The mintToken function of a smart contract implementation for GreenEnergyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13692": "The mintToken function of a smart contract implementation for MehdiTAZIToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13691": "The mintToken function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13690": "The mintToken function of a smart contract implementation for Instacocoa, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13689": "The mintToken function of a smart contract implementation for CJXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13688": "The mintToken function of a smart contract implementation for MallToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13687": "The mintToken function of a smart contract implementation for normikaivo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13686": "The mintToken function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13685": "The mintToken function of a smart contract implementation for Vornox (VRX) (Contract Name: VornoxCoinToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13684": "The mintToken function of a smart contract implementation for ZIP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13683": "The mintToken function of a smart contract implementation for exsulcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13682": "The mintToken function of a smart contract implementation for ViteMoneyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13681": "The mintToken function of a smart contract implementation for SOSCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13680": "The mintToken function of a smart contract implementation for LexitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13679": "The mintToken function of a smart contract implementation for ZPEcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13678": "The mintToken function of a smart contract implementation for Lottery, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13677": "The mintToken function of a smart contract implementation for Goochain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13676": "The mintToken function of a smart contract implementation for Orderbook Presale Token (OBP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13675": "The mintToken function of a smart contract implementation for YAMBYO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13674": "The mintToken function of a smart contract implementation for ComBillAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13673": "The mintToken function of a smart contract implementation for GoldTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13672": "The mintToken function of a smart contract implementation for OBTCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13671": "The mintToken function of a smart contract implementation for DinsteinCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13670": "The mintToken function of a smart contract implementation for GFCB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13669": "The mintToken function of a smart contract implementation for NCU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13668": "The mintToken function of a smart contract implementation for BTPCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13667": "The mintToken function of a smart contract implementation for UTBTokenTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13666": "The mintToken function of a smart contract implementation for EristicaICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13665": "The mintToken function of a smart contract implementation for BCaaS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13664": "The mintToken function of a smart contract implementation for CWS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13663": "The mintToken function of a smart contract implementation for BSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13662": "The mintToken function of a smart contract implementation for WorldOpctionChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13661": "The mintToken function of a smart contract implementation for APP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13660": "The mint function of a smart contract implementation for BillionRewardsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13659": "The mintToken function of a smart contract implementation for BrianCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13658": "The mintToken function of a smart contract implementation for TheGoDgital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13657": "The mintToken function of a smart contract implementation for Rice, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13656": "The mintToken function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13655": "The mintToken function of a smart contract implementation for GFC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13654": "The mintToken function of a smart contract implementation for ESTSToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13653": "The mintToken function of a smart contract implementation for ipshoots, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13652": "The mintToken function of a smart contract implementation for TheGoDigital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13651": "The mintToken function of a smart contract implementation for MicoinNetworkToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13650": "The mintToken function of a smart contract implementation for BitmaxerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13649": "The mintToken function of a smart contract implementation for Deploy, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13648": "The mintToken function of a smart contract implementation for BGC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13647": "The mintToken function of a smart contract implementation for TrueGoldCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13646": "The mintToken function of a smart contract implementation for Datiac, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13645": "The mintToken function of a smart contract implementation for Fiocoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13644": "The mintToken function of a smart contract implementation for RoyalClassicCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13643": "The mintToken function of a smart contract implementation for GCRTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13642": "The mintToken function of a smart contract implementation for SECoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13641": "The mintToken function of a smart contract implementation for MVGcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13640": "The mintToken function of a smart contract implementation for EthereumSmart, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13639": "The mintToken function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13638": "The mintToken function of a smart contract implementation for Bitpark, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13637": "The mintToken function of a smart contract implementation for CikkaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13636": "The mintToken function of a smart contract implementation for TurdCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13635": "The mintToken function of a smart contract implementation for HBCM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13634": "The mintToken function of a smart contract implementation for MediaCubeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13633": "The mintToken function of a smart contract implementation for Martcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13632": "The mintToken function of a smart contract implementation for NEXPARA, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13631": "The mintToken function of a smart contract implementation for doccoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13630": "The mintToken function of a smart contract implementation for DoccoinPreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13629": "The mintToken function of a smart contract implementation for CrimsonShilling, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13628": "The mintToken function of a smart contract implementation for MomentumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13627": "The mintToken function of a smart contract implementation for MyOffer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13626": "The mintToken function of a smart contract implementation for SemainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13625": "The mintlvlToken function of a smart contract implementation for Krown, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13624": "The mintToken function of a smart contract implementation for WXSLToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13623": "The mintToken function of a smart contract implementation for AirdropperCryptics, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13622": "The mintToken function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13621": "The mintToken function of a smart contract implementation for SoundTribeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13620": "The mintToken function of a smart contract implementation for TripCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13619": "The mintToken function of a smart contract implementation for MicoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13618": "The mintToken function of a smart contract implementation for VICETOKEN_ICO_IS_A_SCAM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13617": "The mintToken function of a smart contract implementation for CAPTOZ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13616": "The mintToken function of a smart contract implementation for IOCT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13615": "The mintToken function of a smart contract implementation for MJCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13614": "The mintToken function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13613": "The mintToken function of a smart contract implementation for CON0217, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13612": "The mintToken function of a smart contract implementation for Robincoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13611": "The mintToken function of a smart contract implementation for CDcurrency, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13610": "The mintToken function of a smart contract implementation for MedicayunLink, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13609": "The mintToken function of a smart contract implementation for CSAToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13608": "The mintToken function of a smart contract implementation for archercoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13607": "The mintToken function of a smart contract implementation for ResidualShare, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13606": "The mintToken function of a smart contract implementation for ARChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13605": "The mintToken function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13604": "The mintToken function of a smart contract implementation for wellieat, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13603": "The mintToken function of a smart contract implementation for Briant2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13602": "The mint function of a smart contract implementation for MiningToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13601": "The mintToken function of a smart contract implementation for GalacticX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13600": "The mintToken function of a smart contract implementation for AMToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13599": "The mintToken function of a smart contract implementation for ResidualValue, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13598": "The mintToken function of a smart contract implementation for SendMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13597": "The mintToken function of a smart contract implementation for testcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13596": "The mintToken function of a smart contract implementation for TESTAhihi, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13595": "The mintToken function of a smart contract implementation for BitStore, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13594": "The mintToken function of a smart contract implementation for CardFactory, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13593": "The mintToken function of a smart contract implementation for CardToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13592": "The mintToken function of a smart contract implementation for RajTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13591": "The mintToken function of a smart contract implementation for KAPcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13590": "The mintToken function of a smart contract implementation for SIPCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13589": "The mintToken function of a smart contract implementation for MooAdvToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13588": "The mintToken function of a smart contract implementation for Code47 (C47), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13587": "The mintToken function of a smart contract implementation for DECToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13586": "The mintToken function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13585": "The mintToken function of a smart contract implementation for CHERRYCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13584": "The mintToken function of a smart contract implementation for yasudem, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13583": "The mintToken function of a smart contract implementation for Shmoo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13582": "The mintToken function of a smart contract implementation for My2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13581": "The mintToken function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13580": "The mintToken function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13579": "The mintToken function of a smart contract implementation for ForeverCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13578": "The mintToken function of a smart contract implementation for GalaxyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13577": "The mintToken function of a smart contract implementation for ShitCoin (SHITC) (Contract Name: AdvancedShit), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13576": "The mintToken function of a smart contract implementation for Escut (ESCT) (Contract Name: JuntsPerCreixer), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13575": "The mintToken function of a smart contract implementation for YESToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13574": "The mintToken function of a smart contract implementation for DataShieldCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13573": "The mintToken function of a smart contract implementation for TripPay, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13572": "The mintToken function of a smart contract implementation for PGM_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13571": "The mintToken function of a smart contract implementation for GoramCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13570": "The mint function of a smart contract implementation for kkTestCoin1 (KTC1), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13569": "The mintToken function of a smart contract implementation for HitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13568": "The mintToken function of a smart contract implementation for MktCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13567": "The mintToken function of a smart contract implementation for SDR, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13566": "The mintToken function of a smart contract implementation for RETNToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13565": "The mintToken function of a smart contract implementation for Co2Bit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13564": "The mintToken function of a smart contract implementation for GATcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13563": "The mintToken function of a smart contract implementation for UPayToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13562": "The mintToken function of a smart contract implementation for BMVCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13561": "The mintToken function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13560": "The mintToken function of a smart contract implementation for KelvinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13559": "The mintToken function of a smart contract implementation for UTCT, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13558": "The mintToken function of a smart contract implementation for rhovit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13557": "The mintToken function of a smart contract implementation for Trabet_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13556": "The mintToken function of a smart contract implementation for COSMOTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13555": "The mintToken function of a smart contract implementation for JaxBox, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13554": "The mintToken function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13553": "The mintToken function of a smart contract implementation for Micro BTC (MBTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13552": "The mintToken function of a smart contract implementation for Trabet_Coin_PreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13551": "The mintToken function of a smart contract implementation for Bgamecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13550": "The mintToken function of a smart contract implementation for Coquinho Coin (CQNC) (Contract Name: CoquinhoERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13549": "The mintToken function of a smart contract implementation for NeuroToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13548": "The mintToken function of a smart contract implementation for Mimicoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13547": "The mintToken function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13546": "The mintToken function of a smart contract implementation for CCASH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13545": "The mintToken function of a smart contract implementation for HashShield, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13544": "The mintToken function of a smart contract implementation for Numisma, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13543": "The mintToken function of a smart contract implementation for GemstoneToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13542": "The mintToken function of a smart contract implementation for ZIBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13541": "The mintToken function of a smart contract implementation for CryptoLeu, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13540": "The mintToken function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13539": "The mintToken function of a smart contract implementation for Bcxss, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13538": "The mintToken function of a smart contract implementation for SIPCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13537": "The mintToken function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13536": "The mintToken function of a smart contract implementation for ERC20_ICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13535": "The mintToken function of a smart contract implementation for PACCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13534": "The mintToken function of a smart contract implementation for SpeedCashLite (SCSL), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13533": "The mintToken function of a smart contract implementation for ALUXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13532": "The mintToken function of a smart contract implementation for Mindexcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13531": "The mintToken function of a smart contract implementation for MaxHouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13530": "The mintToken function of a smart contract implementation for HunterCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13529": "The mintToken function of a smart contract implementation for BetterThanAdrien, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13528": "The mintToken function of a smart contract implementation for DhaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13527": "The mintToken function of a smart contract implementation for ElevateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13526": "The mintToken function of a smart contract implementation for WangWangToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13525": "The mintToken function of a smart contract implementation for Flow, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13524": "The mintToken function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13523": "The mintToken function of a smart contract implementation for SmartPayment, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13522": "The mintToken function of a smart contract implementation for EXGROUP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13521": "The mintToken function of a smart contract implementation for PinkyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13520": "The mintToken function of a smart contract implementation for TopscoinAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13519": "The mint function of a smart contract implementation for DigitalCloudToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13518": "The mintToken function of a smart contract implementation for TCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13517": "The mintToken function of a smart contract implementation for C3 Token (C3), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13516": "The mintToken function of a smart contract implementation for Super Cool Awesome Money (SCAM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13515": "The mintToken function of a smart contract implementation for aman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13514": "The mintToken function of a smart contract implementation for esportz, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13513": "The mintToken function of a smart contract implementation for Ubiou, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13512": "The mintToken function of a smart contract implementation for SmartHomeCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13511": "The mintToken function of a smart contract implementation for CorelliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13510": "The mintToken function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13509": "The mintToken function of a smart contract implementation for IamRich, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13508": "The mintToken function of a smart contract implementation for VITToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13507": "The mintToken function of a smart contract implementation for SLCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13506": "The mintToken function of a smart contract implementation for SDR22, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13505": "The mintToken function of a smart contract implementation for ecogreenhouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13504": "The mintToken function of a smart contract implementation for MMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13503": "The mintToken function of a smart contract implementation for South Park Token Token (SPTKN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13502": "The mintToken function of a smart contract implementation for HeliumNetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13501": "The mintToken function of a smart contract implementation for HRWtoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13500": "The mintToken function of a smart contract implementation for MSXAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13499": "The mintToken function of a smart contract implementation for Crowdsale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13498": "The mintToken function of a smart contract implementation for KAPAYcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13497": "The mintToken function of a smart contract implementation for COBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13496": "The mintToken function of a smart contract implementation for RajTestICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13495": "The mintToken function of a smart contract implementation for KMCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13494": "The mintToken function of a smart contract implementation for SusanTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13493": "The mintToken function of a smart contract implementation for DaddyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13492": "The mintToken function of a smart contract implementation for naga, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13491": "The mintToken function of a smart contract implementation for Carrot, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13490": "The mintToken function of a smart contract implementation for FILM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13489": "The mintToken function of a smart contract implementation for OllisCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13488": "The mintToken function of a smart contract implementation for Crypto Alley Shares (CAST), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13487": "The mintToken function of a smart contract implementation for PlatoToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13486": "The mintToken function of a smart contract implementation for HELP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13485": "The mintToken function of a smart contract implementation for BitcoinAgileToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13484": "The mintToken function of a smart contract implementation for CBRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13483": "The mintToken function of a smart contract implementation for mkethToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13482": "The mintToken function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13481": "The mintToken function of a smart contract implementation for TRIUM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13480": "The mintToken function of a smart contract implementation for QRG, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13479": "The mintToken function of a smart contract implementation for SlidebitsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13478": "The mintToken function of a smart contract implementation for DMPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13477": "The mintToken function of a smart contract implementation for CTESale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13476": "The mintToken function of a smart contract implementation for PhilCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13475": "The mintToken function of a smart contract implementation for VSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13474": "The mintToken function of a smart contract implementation for FansChainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13473": "The mintToken function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13472": "The mint function of a smart contract implementation for CloutToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13471": "The mintToken function of a smart contract implementation for BeyondCashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13470": "The mintToken function of a smart contract implementation for BuyerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13469": "The mintToken function of a smart contract implementation for IcoContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13468": "The mintToken function of a smart contract implementation for Cavecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13467": "The mintToken function of a smart contract implementation for EpiphanyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13466": "The mintToken function of a smart contract implementation for Crystals, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13465": "The mintToken function of a smart contract implementation for PaulyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13464": "The mintToken function of a smart contract implementation for t_swap, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13463": "The mintToken function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13462": "The mintToken function of a smart contract implementation for MoonToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13328": "The transfer, transferFrom, and mint functions of a smart contract implementation for PFGc, an Ethereum token, have an integer overflow.", + "CVE-2018-13327": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for ChuCunLingAIGO (CCLAG), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13326": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Bittelux (BTX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13325": "The _sell function of a smart contract implementation for GROWCHAIN (GROW), an Ethereum token, has an integer overflow.", + "CVE-2018-13233": "The sell function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13232": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13231": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13230": "The sell function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13229": "The sell function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13228": "The sell function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13227": "The sell function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13226": "The sell function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13225": "The sell function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13224": "The sell function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13223": "The sell function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13222": "The sell function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13221": "The sell function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13220": "The sell function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13219": "The sell function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13218": "The sell function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13217": "The sell function of a smart contract implementation for CoinToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13216": "The sell function of a smart contract implementation for GreenMed (GRMD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13215": "The sell function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13214": "The sell function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13213": "The sell function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13212": "The sell function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13211": "The sell function of a smart contract implementation for MyToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13210": "The sell function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13209": "The sell function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13208": "The sell function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13207": "The sell function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13206": "The sell function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13205": "The sell function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13204": "The sell function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13203": "The sellBuyerTokens function of a smart contract implementation for SwapToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13202": "The sell function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13201": "The sell function of a smart contract implementation for TiTok - Ticket Token (Contract Name: MyAdvancedToken7), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13200": "The sell function of a smart contract implementation for DateMe (DMX) (Contract Name: ProgressiveToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13199": "The sell function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13198": "The sell function of a smart contract implementation for STeX Exchange ICO (STE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13197": "The sell function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13196": "The sell function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13195": "The mintToken function of a smart contract implementation for Cranoo (CRN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13194": "The mintToken function of a smart contract implementation for TongTong Coin (TTCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13193": "The mintToken function of a smart contract implementation for hentaisolo (HAO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13192": "The mintToken function of a smart contract implementation for Jobscoin (JOB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13191": "The mintToken function of a smart contract implementation for Super Carbon Coin (SCC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13190": "The mintToken function of a smart contract implementation for DVChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13189": "The mint function of a smart contract implementation for Unolabo (UNLB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13188": "The mintToken function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13187": "The mintToken function of a smart contract implementation for CIBN Live Token (CIBN LIVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13186": "The mintToken function of a smart contract implementation for MMTCoin (MMT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13185": "The mintToken function of a smart contract implementation for appcoins (APPC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13184": "The mintToken function of a smart contract implementation for TravelZedi Token (ZEDI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13183": "The mintToken function of a smart contract implementation for JWC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13182": "The mintToken function of a smart contract implementation for loncoin (LON), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13181": "The mintToken function of a smart contract implementation for Troo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13180": "The mintToken function of a smart contract implementation for IMM Coin (IMC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13179": "The mintToken function of a smart contract implementation for Air-Contact Token (AIR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13178": "The mintToken function of a smart contract implementation for ECToints (ECT) (Contract Name: ECPoints), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13177": "The mintToken function of a smart contract implementation for MiningRigRentals Token (MRR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13176": "The mintToken function of a smart contract implementation for Trust Zen Token (ZEN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13175": "The mintToken function of a smart contract implementation for AIChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13174": "The mintToken function of a smart contract implementation for CryptoABS (ABS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13173": "The mintToken function of a smart contract implementation for EliteShipperToken (ESHIP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13172": "The mintToken function of a smart contract implementation for bzxcoin (BZX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13171": "The mintToken function of a smart contract implementation for LadaToken (LDT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13170": "The mintToken function of a smart contract implementation for Snoqualmie Coin (SNOW), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13169": "The mintToken function of a smart contract implementation for Ethereum Cash Pro (ECP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13168": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO) (Contract Name: NetkillerBatchToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13167": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13166": "The mintToken function of a smart contract implementation for AthletiCoin (ATHA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13165": "The mintToken function of a smart contract implementation for JustDCoin (JustD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13164": "The mintToken function of a smart contract implementation for EPPCOIN (EPP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13163": "The mintToken function of a smart contract implementation for Ethernet Cash (ENC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13162": "The mintToken function of a smart contract implementation for ALEX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13161": "The mintToken function of a smart contract implementation for MultiGames (MLT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13160": "The mintToken function of a smart contract implementation for etktokens (ETK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13159": "The mintToken function of a smart contract implementation for bankcoin (BNK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13158": "The mintToken function of a smart contract implementation for AssetToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13157": "The mintToken function of a smart contract implementation for CryptonitexCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13156": "The mintToken function of a smart contract implementation for bonusToken (BNS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13155": "The mintToken function of a smart contract implementation for GEMCHAIN (GEM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13146": "The mintToken, buy, and sell functions of a smart contract implementation for LEF, an Ethereum token, have an integer overflow.", + "CVE-2018-13145": "The mintToken function of a smart contract implementation for JavaSwapTest (JST), an Ethereum token, has an integer overflow.", + "CVE-2018-13144": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Pandora (PDX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13132": "Spadeico is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13131": "SpadePreSale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13130": "Bitotal (TFUND) is a smart contract running on Ethereum. The mintTokens function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13129": "SP8DE Token (SPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13128": "Etherty Token (ETY) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13127": "SP8DE PreSale Token (DSPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13126": "MoxyOnePresale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13113": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Easy Trading Token (ETT), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13092": "The mintToken function of a smart contract implementation for Reimburse Token (REIM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13091": "The mintToken function of a smart contract implementation for sumocoin (SUMO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13090": "The mintToken function of a smart contract implementation for YiTongCoin (YTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13089": "The mintToken function of a smart contract implementation for Universal Coin (UCOIN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13088": "The mintToken function of a smart contract implementation for Futures Pease (FP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13087": "The mintToken function of a smart contract implementation for Coinstar (CSTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13086": "The mintToken function of a smart contract implementation for IADOWR Coin (IAD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13085": "The mintToken function of a smart contract implementation for FreeCoin (FREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13084": "The mintToken function of a smart contract implementation for Good Time Coin (GTY), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13083": "The mintToken function of a smart contract implementation for Plaza Token (PLAZA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13082": "The mintToken function of a smart contract implementation for MODI Token (MODI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13081": "The mintToken function of a smart contract implementation for GZS Token (GZS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13080": "The mintToken function of a smart contract implementation for Goutex (GTX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13079": "The mintToken function of a smart contract implementation for GoodTo (GTO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13078": "The mintToken function of a smart contract implementation for Jitech (JTH), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13077": "The mintToken function of a smart contract implementation for CTB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13076": "The mintToken function of a smart contract implementation for Betcash (BC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13075": "The mintToken function of a smart contract implementation for Carbon Exchange Coin Token (CEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13074": "The mintToken function of a smart contract implementation for FIBToken (FIB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13073": "The mintToken function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13072": "The mintToken function of a smart contract implementation for Coffeecoin (COFFEE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13071": "The mintToken function of a smart contract implementation for CCindex10 (T10), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13070": "The mintToken function of a smart contract implementation for EncryptedToken (ECC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13069": "The mintToken function of a smart contract implementation for DYchain (DYC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13068": "The mintToken function of a smart contract implementation for AzurionToken (AZU), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13041": "The mint function of a smart contract implementation for Link Platform (LNK), an Ethereum ERC20 token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-12975": "The random() function of the smart contract implementation for CryptoSaga, an Ethereum game, generates a random value with publicly readable variables such as timestamp, the current block's blockhash, and a private variable (which can be read with a getStorageAt call). Therefore, attackers can precompute the random number and manipulate the game (e.g., get powerful characters or get critical damages).", + "CVE-2018-12959": "The approveAndCall function of a smart contract implementation for Aditus (ADI), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all contract balances into their account).", + "CVE-2018-12885": "The randMod() function of the smart contract implementation for MyCryptoChamp, an Ethereum game, generates a random value with publicly readable variables such as the current block information and a private variable, (which can be read with a getStorageAt call). Therefore, attackers can get powerful champs/items and get rewards.", + "CVE-2018-12703": "The approveAndCallcode function of a smart contract implementation for Block 18 (18T), an tradable Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", + "CVE-2018-12702": "The approveAndCallcode function of a smart contract implementation for Globalvillage ecosystem (GVE), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", + "CVE-2018-12511": "In the mintToken function of a smart contract implementation for Substratum (SUB), an Ethereum ERC20 token, the administrator can control mintedAmount, leverage an integer overflow, and modify a user account's balance arbitrarily.", + "CVE-2018-12454": "The _addguess function of a simplelottery smart contract implementation for 1000 Guess, an Ethereum gambling game, generates a random value with publicly readable variables such as the current block information and a private variable (which can be read with a getStorageAt call). Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-12230": "An wrong logical check identified in the transferFrom function of a smart contract implementation for RemiCoin (RMC), an Ethereum ERC20 token, allows the attacker to steal tokens or conduct resultant integer underflow attacks.", + "CVE-2018-12084": "The mintToken function of a smart contract implementation for BitAsean (BAS), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12083": "The mintToken function of a smart contract implementation for GOAL Bonanza (GOAL), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12082": "The mintToken function of a smart contract implementation for Fujinto (NTO), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12081": "The mintToken function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12080": "The mintToken function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12079": "The mintToken function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12078": "The mintToken function of a smart contract implementation for PolyAI (AI), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12070": "The sell function of a smart contract implementation for SEC, a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12068": "The sell function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12067": "The sell function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12063": "The sell function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12062": "The sell function of a smart contract implementation for SwftCoin (SWFTC), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12056": "The maxRandom function of a smart contract implementation for All For One, an Ethereum gambling game, generates a random value with publicly readable variables because the _seed value can be retrieved with a getStorageAt call. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-12025": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", + "CVE-2018-11687": "An integer overflow in the distributeBTR function of a smart contract implementation for Bitcoin Red (BTCR), an Ethereum ERC20 token, allows the owner to accomplish an unauthorized increase of digital assets by providing a large address[] array, as exploited in the wild in May 2018, aka the \"ownerUnderflow\" issue.", + "CVE-2018-11561": "An integer overflow in the unprotected distributeToken function of a smart contract implementation for EETHER (EETHER), an Ethereum ERC20 token, will lead to an unauthorized increase of an attacker's digital assets.", + "CVE-2018-11446": "The buy function of a smart contract implementation for Gold Reward (GRX), an Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the buyer because of overflow of the multiplication of its argument amount and a manipulable variable buyPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-11429": "ATLANT (ATL) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-11411": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect.", + "CVE-2018-11335": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-11329": "The DrugDealer function of a smart contract implementation for Ether Cartel, an Ethereum game, allows attackers to take over the contract's ownership, aka ceoAnyone. After that, all the digital assets (including Ether balance and tokens) might be manipulated by the attackers, as exploited in the wild in May 2018.", + "CVE-2018-11239": "An integer overflow in the _transfer function of a smart contract implementation for Hexagon (HXG), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets by providing a _to argument in conjunction with a large _value argument, as exploited in the wild in May 2018, aka the \"burnOverflow\" issue.", + "CVE-2018-10973": "An integer overflow in the transferMulti function of a smart contract implementation for KoreaShow, an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _value parameters.", + "CVE-2018-10944": "The request_dividend function of a smart contract implementation for ROC (aka Rasputin Online Coin), an Ethereum ERC20 token, allows attackers to steal all of the contract's Ether.", + "CVE-2018-10769": "The transferProxy and approveProxy functions of a smart contract implementation for SmartMesh (SMT), an Ethereum ERC20 token, allow attackers to accomplish an unauthorized transfer of digital assets because replay attacks can occur with the same-named functions (with the same signatures) in other tokens: First (FST), GG Token (GG), M2C Mesh Network (MTC), M2C Mesh Network (mesh), and UG Token (UGT).", + "CVE-2018-10706": "An integer overflow in the transferMulti function of a smart contract implementation for Social Chain (SCA), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets, aka the \"multiOverflow\" issue.", + "CVE-2018-10705": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", + "CVE-2018-10666": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", + "CVE-2018-10468": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue.", + "CVE-2018-10376": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", + "CVE-2018-10299": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", + "CVE-2017-14457": "An exploitable information leak/denial of service vulnerability exists in the libevm (Ethereum Virtual Machine) `create2` opcode handler of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read leading to memory disclosure or denial of service. An attacker can create/send malicious a smart contract to trigger this vulnerability.", + "CVE-2017-14451": "An exploitable out-of-bounds read vulnerability exists in libevm (Ethereum Virtual Machine) of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read which can subsequently trigger an out-of-bounds write resulting in remote code execution. An attacker can create/send malicious smart contract to trigger this vulnerability." +} \ No newline at end of file diff --git a/data_full/CVE_label/CVE2label.json b/data_full/CVE_label/CVE2label.json new file mode 100644 index 00000000..ad74a711 --- /dev/null +++ b/data_full/CVE_label/CVE2label.json @@ -0,0 +1,21 @@ +{ + "CVE-2018-10299": "Integer Overflow", + "CVE-2018-10376": "Integer Overflow", + "CVE-2018-11335": "Integer Overflow", + "CVE-2018-13836": "Integer Overflow", + "CVE-2018-17882": "Integer Overflow", + "CVE-2018-10468": "Wrong Logic", + "CVE-2018-11411": "Wrong Logic", + "CVE-2018-12025": "Wrong Logic", + "CVE-2021-3004": "Wrong Logic", + "CVE-2018-15552": "Bad Randomness", + "CVE-2018-14715": "Bad Randomness", + "CVE-2018-17877": "Bad Randomness", + "CVE-2018-10666": "Access Control", + "CVE-2018-10705": "Access Control", + "CVE-2018-19830": "Access Control", + "CVE-2019-15078": "Typo Constructor", + "CVE-2019-15079": "Typo Constructor", + "CVE-2019-15080": "Typo Constructor", + "CVE-2018-18425": "Token Devalue" +} \ No newline at end of file diff --git a/data_sample/CVE/2018-13071.sol b/data_sample/CVE/2018-13071.sol new file mode 100644 index 00000000..66840e87 --- /dev/null +++ b/data_sample/CVE/2018-13071.sol @@ -0,0 +1,231 @@ +/** + *Submitted for verification at Etherscan.io on 2017-11-18 +*/ + +//ERC20 Token +pragma solidity ^0.4.17; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "T10 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /*************************************************/ + mapping(address=>uint256) public indexes; + mapping(uint256=>address) public addresses; + uint256 public lastIndex = 0; + /*************************************************/ + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + /*****************************************/ + addresses[1] = msg.sender; + indexes[msg.sender] = 1; + lastIndex = 1; + /*****************************************/ + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract CCindexToken is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 40000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "CCindex10"; + string public tokenSymbol = "T10"; + function CCindexToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + // if(!canHolderTransfer()) throw; + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + if(_value > 0){ + if(balanceOf[msg.sender] == 0){ + addresses[indexes[msg.sender]] = addresses[lastIndex]; + indexes[addresses[lastIndex]] = indexes[msg.sender]; + indexes[msg.sender] = 0; + delete addresses[lastIndex]; + lastIndex--; + } + if(indexes[_to]==0){ + lastIndex++; + addresses[lastIndex] = _to; + indexes[_to] = lastIndex; + } + } + } + + function getAddresses() constant returns (address[]){ + address[] memory addrs = new address[](lastIndex); + for(uint i = 0; i < lastIndex; i++){ + addrs[i] = addresses[i+1]; + } + return addrs; + } + + function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { + // if(balanceOf[owner] < _amount) throw; + uint distributed = 0; + require(startIndex < endIndex); + + for(uint i = startIndex; i < lastIndex; i++){ + address holder = addresses[i+1]; + uint reward = balanceOf[holder] * 3 / 100; + balanceOf[holder] += reward; + distributed += reward; + Transfer(0, holder, reward); + } + + // balanceOf[owner] -= distributed; + totalSupply += distributed; + return distributed; + } + + /************************************************************************/ + + /************************************************************************/ + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_sample/CVE/2018-13072.sol b/data_sample/CVE/2018-13072.sol new file mode 100644 index 00000000..c19de863 --- /dev/null +++ b/data_sample/CVE/2018-13072.sol @@ -0,0 +1,168 @@ +/** + *Submitted for verification at Etherscan.io on 2017-08-16 +*/ + +pragma solidity ^0.4.2; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + revert(); // Prevents accidental sending of ether + } +} + +contract Coffeecoin is owned, token { + + uint public buyRate = 4000; // price of one token + bool public isSelling = true; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function Coffeecoin( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (frozenAccount[msg.sender]) revert(); // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); // Check if frozen + if (balanceOf[_from] < _value) revert(); // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows + if (_value > allowance[_from][msg.sender]) revert(); // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + + function buy() payable { + if(isSelling == false) revert(); + uint amount = msg.value * buyRate; // calculates the amount + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[owner] -= amount; // subtracts amount from seller's balance + Transfer(owner, msg.sender, amount); // execute an event reflecting the change + } + + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_sample/CVE/2018-13073.sol b/data_sample/CVE/2018-13073.sol new file mode 100644 index 00000000..58a0f14c --- /dev/null +++ b/data_sample/CVE/2018-13073.sol @@ -0,0 +1,175 @@ +/** + *Submitted for verification at Etherscan.io on 2017-10-30 +*/ + +//ERC20 Token +pragma solidity ^0.4.17; +contract owned { + address public owner; + + function owned() { + owner = msg.sender; + } + + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} + +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } + +contract token { + /* Public variables of the token */ + string public standard = "ETHEREUMBLACK"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + /* This generates a public event on the blockchain that will notify clients */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + totalSupply = initialSupply; // Update total supply + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + decimals = decimalUnits; // Amount of decimals for display purposes + } + + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + /* Allow another contract to spend some tokens in your behalf */ + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /* Approve and then communicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /* A contract attempts _ to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + /* This unnamed function is called whenever someone tries to send ether to it */ + function () { + throw; // Prevents accidental sending of ether + } +} + +contract ETHEREUMBLACK is owned, token { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping(address=>bool) public frozenAccount; + + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + uint256 public constant initialSupply = 200000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "ETHEREUMBLACK"; + string public tokenSymbol = "ETCBK"; + function ETHEREUMBLACK() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + /* Send coins */ + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (frozenAccount[msg.sender]) throw; // Check if frozen + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place + } + + + /* A contract attempts to get the coins */ + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; // Check if frozen + if (balanceOf[_from] < _value) throw; // Check if the sender has enough + if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows + if (_value > allowance[_from][msg.sender]) throw; // Check allowance + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + + function buy() payable { + uint amount = msg.value / buyPrice; // calculates the amount + if (balanceOf[this] < amount) throw; // checks if it has enough to sell + balanceOf[msg.sender] += amount; // adds the amount to buyer's balance + balanceOf[this] -= amount; // subtracts amount from seller's balance + Transfer(this, msg.sender, amount); // execute an event reflecting the change + } + + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; // checks if the sender has enough to sell + balanceOf[this] += amount; // adds the amount to owner's balance + balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance + if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important + throw; // to do this last to avoid recursion attacks + } else { + Transfer(msg.sender, this, amount); // executes an event reflecting on the change + } + } +} \ No newline at end of file diff --git a/data_sample/CVE/2018-13074.sol b/data_sample/CVE/2018-13074.sol new file mode 100644 index 00000000..e63dfe32 --- /dev/null +++ b/data_sample/CVE/2018-13074.sol @@ -0,0 +1,227 @@ +/** + *Submitted for verification at Etherscan.io on 2018-06-29 +*/ + +pragma solidity ^0.4.16; + +contract owned { + address public owner; + + function owned() public { + owner = msg.sender; + } + + modifier onlyOwner { + require(msg.sender == owner); + _; + } + + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} + +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } + +contract TokenERC20 { + // Public variables of the token + string public name; + string public symbol; + uint8 public decimals = 18; + // 18 decimals is the strongly suggested default, avoid changing it + uint256 public totalSupply; + uint256 initialSupply=5000000000; + string tokenName='FIB'; + string tokenSymbol='FIB'; + + // This creates an array with all balances + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + + // This generates a public event on the blockchain that will notify clients + event Transfer(address indexed from, address indexed to, uint256 value); + + // This notifies clients about the amount burnt + event Burn(address indexed from, uint256 value); + + /** + * Constrctor function + * + * Initializes contract with initial supply tokens to the creator of the contract + */ + function TokenERC20( + + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount + balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens + name = tokenName; // Set the name for display purposes + symbol = tokenSymbol; // Set the symbol for display purposes + } + + /** + * Internal transfer, only can be called by this contract + */ + function _transfer(address _from, address _to, uint _value) internal { + // Prevent transfer to 0x0 address. Use burn() instead + require(_to != 0x0); + // Check if the sender has enough + require(balanceOf[_from] >= _value); + // Check for overflows + require(balanceOf[_to] + _value > balanceOf[_to]); + // Save this for an assertion in the future + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + // Subtract from the sender + balanceOf[_from] -= _value; + // Add the same to the recipient + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + // Asserts are used to use static analysis to find bugs in your code. They should never fail + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + + /** + * Transfer tokens + * + * Send `_value` tokens to `_to` from your account + * + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + + /** + * Transfer tokens from other address + * + * Send `_value` tokens to `_to` in behalf of `_from` + * + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value the amount to send + */ + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); // Check allowance + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + + /** + * Set allowance for other address + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + */ + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + + /** + * Set allowance for other address and notify + * + * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it + * + * @param _spender The address authorized to spend + * @param _value the max amount they can spend + * @param _extraData some extra information to send to the approved contract + */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + + /** + * Destroy tokens + * + * Remove `_value` tokens from the system irreversibly + * + * @param _value the amount of money to burn + */ + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + balanceOf[msg.sender] -= _value; // Subtract from the sender + totalSupply -= _value; // Updates totalSupply + emit Burn(msg.sender, _value); + return true; + } + + /** + * Destroy tokens from other account + * + * Remove `_value` tokens from the system irreversibly on behalf of `_from`. + * + * @param _from the address of the sender + * @param _value the amount of money to burn + */ + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); // Check if the targeted balance is enough + require(_value <= allowance[_from][msg.sender]); // Check allowance + balanceOf[_from] -= _value; // Subtract from the targeted balance + allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance + totalSupply -= _value; // Update totalSupply + emit Burn(_from, _value); + return true; + } +} + +/******************************************/ +/* ADVANCED TOKEN STARTS HERE */ +/******************************************/ + +contract FIBToken is owned, TokenERC20 { + + uint256 public sellPrice; + uint256 public buyPrice; + + mapping (address => bool) public frozenAccount; + + /* This generates a public event on the blockchain that will notify clients */ + event FrozenFunds(address target, bool frozen); + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function FIBToken( + + ) TokenERC20() public {} + + /* Internal transfer, only can be called by this contract */ + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead + require (balanceOf[_from] >= _value); // Check if the sender has enough + require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + require(!frozenAccount[_from]); // Check if sender is frozen + require(!frozenAccount[_to]); // Check if recipient is frozen + balanceOf[_from] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + emit Transfer(_from, _to, _value); + } + + /// @notice Create `mintedAmount` tokens and send it to `target` + /// @param target Address to receive the tokens + /// @param mintedAmount the amount of tokens it will receive + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + + /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens + /// @param target Address to be frozen + /// @param freeze either to freeze it or not + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } + + +} \ No newline at end of file diff --git a/data_sample/CVE_clean/2018-13071.sol b/data_sample/CVE_clean/2018-13071.sol new file mode 100644 index 00000000..1d178d14 --- /dev/null +++ b/data_sample/CVE_clean/2018-13071.sol @@ -0,0 +1,171 @@ +pragma solidity ^0.4.17; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "T10 1.0"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + mapping(address=>uint256) public indexes; + mapping(uint256=>address) public addresses; + uint256 public lastIndex = 0; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + addresses[1] = msg.sender; + indexes[msg.sender] = 1; + lastIndex = 1; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract CCindexToken is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 40000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "CCindex10"; + string public tokenSymbol = "T10"; + function CCindexToken() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + if(_value > 0){ + if(balanceOf[msg.sender] == 0){ + addresses[indexes[msg.sender]] = addresses[lastIndex]; + indexes[addresses[lastIndex]] = indexes[msg.sender]; + indexes[msg.sender] = 0; + delete addresses[lastIndex]; + lastIndex--; + } + if(indexes[_to]==0){ + lastIndex++; + addresses[lastIndex] = _to; + indexes[_to] = lastIndex; + } + } + } + function getAddresses() constant returns (address[]){ + address[] memory addrs = new address[](lastIndex); + for(uint i = 0; i < lastIndex; i++){ + addrs[i] = addresses[i+1]; + } + return addrs; + } + function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { + uint distributed = 0; + require(startIndex < endIndex); + for(uint i = startIndex; i < lastIndex; i++){ + address holder = addresses[i+1]; + uint reward = balanceOf[holder] * 3 / 100; + balanceOf[holder] += reward; + distributed += reward; + Transfer(0, holder, reward); + } + totalSupply += distributed; + return distributed; + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_sample/CVE_clean/2018-13072.sol b/data_sample/CVE_clean/2018-13072.sol new file mode 100644 index 00000000..ff7b130d --- /dev/null +++ b/data_sample/CVE_clean/2018-13072.sol @@ -0,0 +1,125 @@ +pragma solidity ^0.4.2; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) revert(); + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + revert(); + } +} +contract Coffeecoin is owned, token { + uint public buyRate = 4000; + bool public isSelling = true; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function Coffeecoin( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (frozenAccount[msg.sender]) revert(); + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) revert(); + if (balanceOf[_from] < _value) revert(); + if (balanceOf[_to] + _value < balanceOf[_to]) revert(); + if (_value > allowance[_from][msg.sender]) revert(); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + Transfer(0, owner, mintedAmount); + Transfer(owner, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setBuyRate(uint newBuyRate) onlyOwner { + buyRate = newBuyRate; + } + function setSelling(bool newStatus) onlyOwner { + isSelling = newStatus; + } + function buy() payable { + if(isSelling == false) revert(); + uint amount = msg.value * buyRate; + balanceOf[msg.sender] += amount; + balanceOf[owner] -= amount; + Transfer(owner, msg.sender, amount); + } + function withdrawToOwner(uint256 amountWei) onlyOwner { + owner.transfer(amountWei); + } +} \ No newline at end of file diff --git a/data_sample/CVE_clean/2018-13073.sol b/data_sample/CVE_clean/2018-13073.sol new file mode 100644 index 00000000..ac445982 --- /dev/null +++ b/data_sample/CVE_clean/2018-13073.sol @@ -0,0 +1,131 @@ +pragma solidity ^0.4.17; +contract owned { + address public owner; + function owned() { + owner = msg.sender; + } + modifier onlyOwner { + if (msg.sender != owner) throw; + _; + } + function transferOwnership(address newOwner) onlyOwner { + owner = newOwner; + } +} +contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } +contract token { + string public standard = "ETHEREUMBLACK"; + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + function token( + uint256 initialSupply, + string tokenName, + uint8 decimalUnits, + string tokenSymbol + ) { + balanceOf[msg.sender] = initialSupply; + totalSupply = initialSupply; + name = tokenName; + symbol = tokenSymbol; + decimals = decimalUnits; + } + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function approve(address _spender, uint256 _value) + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function () { + throw; + } +} +contract ETHEREUMBLACK is owned, token { + uint256 public sellPrice; + uint256 public buyPrice; + mapping(address=>bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + uint256 public constant initialSupply = 200000000 * 10**18; + uint8 public constant decimalUnits = 18; + string public tokenName = "ETHEREUMBLACK"; + string public tokenSymbol = "ETCBK"; + function ETHEREUMBLACK() token (initialSupply, tokenName, decimalUnits, tokenSymbol) {} + function transfer(address _to, uint256 _value) { + if (balanceOf[msg.sender] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (frozenAccount[msg.sender]) throw; + balanceOf[msg.sender] -= _value; + balanceOf[_to] += _value; + Transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + if (frozenAccount[_from]) throw; + if (balanceOf[_from] < _value) throw; + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + if (_value > allowance[_from][msg.sender]) throw; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + allowance[_from][msg.sender] -= _value; + Transfer(_from, _to, _value); + return true; + } + function mintToken(address target, uint256 mintedAmount) onlyOwner { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + Transfer(0, this, mintedAmount); + Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner { + frozenAccount[target] = freeze; + FrozenFunds(target, freeze); + } + function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { + sellPrice = newSellPrice; + buyPrice = newBuyPrice; + } + function buy() payable { + uint amount = msg.value / buyPrice; + if (balanceOf[this] < amount) throw; + balanceOf[msg.sender] += amount; + balanceOf[this] -= amount; + Transfer(this, msg.sender, amount); + } + function sell(uint256 amount) { + if (balanceOf[msg.sender] < amount ) throw; + balanceOf[this] += amount; + balanceOf[msg.sender] -= amount; + if (!msg.sender.send(amount * sellPrice)) { + throw; + } else { + Transfer(msg.sender, this, amount); + } + } +} \ No newline at end of file diff --git a/data_sample/CVE_clean/2018-13074.sol b/data_sample/CVE_clean/2018-13074.sol new file mode 100644 index 00000000..871884f0 --- /dev/null +++ b/data_sample/CVE_clean/2018-13074.sol @@ -0,0 +1,112 @@ +pragma solidity ^0.4.16; +contract owned { + address public owner; + function owned() public { + owner = msg.sender; + } + modifier onlyOwner { + require(msg.sender == owner); + _; + } + function transferOwnership(address newOwner) onlyOwner public { + owner = newOwner; + } +} +interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } +contract TokenERC20 { + string public name; + string public symbol; + uint8 public decimals = 18; + uint256 public totalSupply; + uint256 initialSupply=5000000000; + string tokenName='FIB'; + string tokenSymbol='FIB'; + mapping (address => uint256) public balanceOf; + mapping (address => mapping (address => uint256)) public allowance; + event Transfer(address indexed from, address indexed to, uint256 value); + event Burn(address indexed from, uint256 value); + function TokenERC20( + ) public { + totalSupply = initialSupply * 10 ** uint256(decimals); + balanceOf[msg.sender] = totalSupply; + name = tokenName; + symbol = tokenSymbol; + } + function _transfer(address _from, address _to, uint _value) internal { + require(_to != 0x0); + require(balanceOf[_from] >= _value); + require(balanceOf[_to] + _value > balanceOf[_to]); + uint previousBalances = balanceOf[_from] + balanceOf[_to]; + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + assert(balanceOf[_from] + balanceOf[_to] == previousBalances); + } + function transfer(address _to, uint256 _value) public { + _transfer(msg.sender, _to, _value); + } + function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { + require(_value <= allowance[_from][msg.sender]); + allowance[_from][msg.sender] -= _value; + _transfer(_from, _to, _value); + return true; + } + function approve(address _spender, uint256 _value) public + returns (bool success) { + allowance[msg.sender][_spender] = _value; + return true; + } + function approveAndCall(address _spender, uint256 _value, bytes _extraData) + public + returns (bool success) { + tokenRecipient spender = tokenRecipient(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + return true; + } + } + function burn(uint256 _value) public returns (bool success) { + require(balanceOf[msg.sender] >= _value); + balanceOf[msg.sender] -= _value; + totalSupply -= _value; + emit Burn(msg.sender, _value); + return true; + } + function burnFrom(address _from, uint256 _value) public returns (bool success) { + require(balanceOf[_from] >= _value); + require(_value <= allowance[_from][msg.sender]); + balanceOf[_from] -= _value; + allowance[_from][msg.sender] -= _value; + totalSupply -= _value; + emit Burn(_from, _value); + return true; + } +} +contract FIBToken is owned, TokenERC20 { + uint256 public sellPrice; + uint256 public buyPrice; + mapping (address => bool) public frozenAccount; + event FrozenFunds(address target, bool frozen); + function FIBToken( + ) TokenERC20() public {} + function _transfer(address _from, address _to, uint _value) internal { + require (_to != 0x0); + require (balanceOf[_from] >= _value); + require (balanceOf[_to] + _value >= balanceOf[_to]); + require(!frozenAccount[_from]); + require(!frozenAccount[_to]); + balanceOf[_from] -= _value; + balanceOf[_to] += _value; + emit Transfer(_from, _to, _value); + } + function mintToken(address target, uint256 mintedAmount) onlyOwner public { + balanceOf[target] += mintedAmount; + totalSupply += mintedAmount; + emit Transfer(0, this, mintedAmount); + emit Transfer(this, target, mintedAmount); + } + function freezeAccount(address target, bool freeze) onlyOwner public { + frozenAccount[target] = freeze; + emit FrozenFunds(target, freeze); + } +} \ No newline at end of file diff --git a/data_sample/CVE_label/CVE2description.json b/data_sample/CVE_label/CVE2description.json new file mode 100644 index 00000000..e05f122c --- /dev/null +++ b/data_sample/CVE_label/CVE2description.json @@ -0,0 +1,564 @@ +{ + "CVE-2023-41052": "Vyper is a Pythonic Smart Contract Language. In affected versions the order of evaluation of the arguments of the builtin functions `uint256_addmod`, `uint256_mulmod`, `ecadd` and `ecmul` does not follow source order. This behaviour is problematic when the evaluation of one of the arguments produces side effects that other arguments depend on. A patch is currently being developed on pull request #3583. When using builtins from the list above, users should make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", + "CVE-2023-40015": "Vyper is a Pythonic Smart Contract Language. For the following (probably non-exhaustive) list of expressions, the compiler evaluates the arguments from right to left instead of left to right. `unsafe_add, unsafe_sub, unsafe_mul, unsafe_div, pow_mod256, |, &, ^ (bitwise operators), bitwise_or (deprecated), bitwise_and (deprecated), bitwise_xor (deprecated), raw_call, <, >, <=, >=, ==, !=, in, not in (when lhs and rhs are enums)`. This behaviour becomes a problem when the evaluation of one of the arguments produces side effects that other arguments depend on. The following expressions can produce side-effect: state modifying external call , state modifying internal call, `raw_call`, `pop()` when used on a Dynamic Array stored in the storage, `create_minimal_proxy_to`, `create_copy_of`, `create_from_blueprint`. This issue has not yet been patched. Users are advised to make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.", + "CVE-2023-40014": "OpenZeppelin Contracts is a library for secure smart contract development. Starting in version 4.0.0 and prior to version 4.9.3, contracts using `ERC2771Context` along with a custom trusted forwarder may see `_msgSender` return `address(0)` in calls that originate from the forwarder with calldata shorter than 20 bytes. This combination of circumstances does not appear to be common, in particular it is not the case for `MinimalForwarder` from OpenZeppelin Contracts, or any deployed forwarder the team is aware of, given that the signer address is appended to all calls that originate from these forwarders. The problem has been patched in v4.9.3.", + "CVE-2023-39363": "Vyer is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a `.vy` contract compiled with `vyper` versions `0.2.15`, `0.2.16`, or `0.3.0`; a primary function that utilizes the `@nonreentrant` decorator with a specific `key` and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same `key` and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.", + "CVE-2023-34459": "OpenZeppelin Contracts is a library for smart contract development. Starting in version 4.7.0 and prior to version 4.9.2, when the `verifyMultiProof`, `verifyMultiProofCalldata`, `procesprocessMultiProof`, or `processMultiProofCalldat` functions are in use, it is possible to construct merkle trees that allow forging a valid multiproof for an arbitrary set of leaves. A contract may be vulnerable if it uses multiproofs for verification and the merkle tree that is processed includes a node with value 0 at depth 1 (just under the root). This could happen inadvertedly for balanced trees with 3 leaves or less, if the leaves are not hashed. This could happen deliberately if a malicious tree builder includes such a node in the tree. A contract is not vulnerable if it uses single-leaf proving (`verify`, `verifyCalldata`, `processProof`, or `processProofCalldata`), or if it uses multiproofs with a known tree that has hashed leaves. Standard merkle trees produced or validated with the @openzeppelin/merkle-tree library are safe. The problem has been patched in version 4.9.2. Some workarounds are available. For those using multiproofs: When constructing merkle trees hash the leaves and do not insert empty nodes in your trees. Using the @openzeppelin/merkle-tree package eliminates this issue. Do not accept user-provided merkle roots without reconstructing at least the first level of the tree. Verify the merkle tree structure by reconstructing it from the leaves.", + "CVE-2023-34449": "ink! is an embedded domain specific language to write smart contracts in Rust for blockchains built on the Substrate framework. Starting in version 4.0.0 and prior to version 4.2.1, the return value when using delegate call mechanics, either through `CallBuilder::delegate` or `ink_env::invoke_contract_delegate`, is decoded incorrectly. This bug was related to the mechanics around decoding a call's return buffer, which was changed as part of pull request 1450. Since this feature was only released in ink! 4.0.0, no previous versions are affected. Users who have an ink! 4.x series contract should upgrade to 4.2.1 to receive a patch.", + "CVE-2023-34234": "OpenZeppelin Contracts is a library for smart contract development. By frontrunning the creation of a proposal, an attacker can become the proposer and gain the ability to cancel it. The attacker can do this repeatedly to try to prevent a proposal from being proposed at all. This impacts the `Governor` contract in v4.9.0 only, and the `GovernorCompatibilityBravo` contract since v4.3.0. This problem has been patched in 4.9.1 by introducing opt-in frontrunning protection. Users are advised to upgrade. Users unable to upgrade may submit the proposal creation transaction to an endpoint with frontrunning protection as a workaround.", + "CVE-2023-32675": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In contracts with more than one regular nonpayable function, it is possible to send funds to the default function, even if the default function is marked `nonpayable`. This applies to contracts compiled with vyper versions prior to 0.3.8. This issue was fixed by the removal of the global `calldatasize` check in commit `02339dfda`. Users are advised to upgrade to version 0.3.8. Users unable to upgrade should avoid use of nonpayable default functions.", + "CVE-2023-32059": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, internal calls with default arguments are compiled incorrectly. Depending on the number of arguments provided in the call, the defaults are added not right-to-left, but left-to-right. If the types are incompatible, typechecking is bypassed. The ability to pass kwargs to internal functions is an undocumented feature that is not well known about. The issue is patched in version 0.3.8.", + "CVE-2023-32058": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, due to missing overflow check for loop variables, by assigning the iterator of a loop to a variable, it is possible to overflow the type of the latter. The issue seems to happen only in loops of type `for i in range(a, a + N)` as in loops of type `for i in range(start, stop)` and `for i in range(stop)`, the compiler is able to raise a `TypeMismatch` when trying to overflow the variable. The problem has been patched in version 0.3.8.", + "CVE-2023-31146": "Vyper is a Pythonic smart contract language for the Ethereum virtual machine. Prior to version 0.3.8, during codegen, the length word of a dynarray is written before the data, which can result in out-of-bounds array access in the case where the dynarray is on both the lhs and rhs of an assignment. The issue can cause data corruption across call frames. The expected behavior is to revert due to out-of-bounds array access. Version 0.3.8 contains a patch for this issue.", + "CVE-2023-30837": "Vyper is a pythonic smart contract language for the EVM. The storage allocator does not guard against allocation overflows in versions prior to 0.3.8. An attacker can overwrite the owner variable. This issue was fixed in version 0.3.8.", + "CVE-2023-30629": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions 0.3.1 through 0.3.7, the Vyper compiler generates the wrong bytecode. Any contract that uses the `raw_call` with `revert_on_failure=False` and `max_outsize=0` receives the wrong response from `raw_call`. Depending on the memory garbage, the result can be either `True` or `False`. A patch is available and, as of time of publication, anticipated to be part of Vyper 0.3.8. As a workaround, one may always put `max_outsize>0`.", + "CVE-2023-30542": "OpenZeppelin Contracts is a library for secure smart contract development. The proposal creation entrypoint (`propose`) in `GovernorCompatibilityBravo` allows the creation of proposals with a `signatures` array shorter than the `calldatas` array. This causes the additional elements of the latter to be ignored, and if the proposal succeeds the corresponding actions would eventually execute without any calldata. The `ProposalCreated` event correctly represents what will eventually execute, but the proposal parameters as queried through `getActions` appear to respect the original intended calldata. This issue has been patched in 4.8.3. As a workaround, ensure that all proposals that pass through governance have equal length `signatures` and `calldatas` parameters.", + "CVE-2023-30541": "OpenZeppelin Contracts is a library for secure smart contract development. A function in the implementation contract may be inaccessible if its selector clashes with one of the proxy's own selectors. Specifically, if the clashing function has a different signature with incompatible ABI encoding, the proxy could revert while attempting to decode the arguments from calldata. The probability of an accidental clash is negligible, but one could be caused deliberately and could cause a reduction in availability. The issue has been fixed in version 4.8.3. As a workaround if a function appears to be inaccessible for this reason, it may be possible to craft the calldata such that ABI decoding does not fail at the proxy and the function is properly proxied through.", + "CVE-2023-26488": "OpenZeppelin Contracts is a library for secure smart contract development. The ERC721Consecutive contract designed for minting NFTs in batches does not update balances when a batch has size 1 and consists of a single token. Subsequent transfers from the receiver of that token may overflow the balance as reported by `balanceOf`. The issue exclusively presents with batches of size 1. The issue has been patched in 4.8.2.", + "CVE-2023-23940": "OpenZeppelin Contracts for Cairo is a library for secure smart contract development written in Cairo for StarkNet, a decentralized ZK Rollup. `is_valid_eth_signature` is missing a call to `finalize_keccak` after calling `verify_eth_signature`. As a result, any contract using `is_valid_eth_signature` from the account library (such as the `EthAccount` preset) is vulnerable to a malicious sequencer. Specifically, the malicious sequencer would be able to bypass signature validation to impersonate an instance of these accounts. The issue has been patched in 0.6.1.", + "CVE-2022-46173": "Elrond-GO is a go implementation for the Elrond Network protocol. Versions prior to 1.3.50 are subject to a processing issue where nodes are affected when trying to process a cross-shard relayed transaction with a smart contract deploy transaction data. The problem was a bad correlation between the transaction caches and the processing component. If the above-mentioned transaction was sent with more gas than required, the smart contract result (SCR transaction) that should have returned the leftover gas, would have been wrongly added to a cache that the processing unit did not consider. The node stopped notarizing metachain blocks. The fix was actually to extend the SCR transaction search in all other caches if it wasn't found in the correct (expected) sharded-cache. There are no known workarounds at this time. This issue has been patched in version 1.3.50.", + "CVE-2022-39384": "OpenZeppelin Contracts is a library for secure smart contract development. Before version 4.4.1 but after 3.2.0, initializer functions that are invoked separate from contract creation (the most prominent example being minimal proxies) may be reentered if they make an untrusted non-view external call. Once an initializer has finished running it can never be re-executed. However, an exception put in place to support multiple inheritance made reentrancy possible in the scenario described above, breaking the expectation that there is a single execution. Note that upgradeable proxies are commonly initialized together with contract creation, where reentrancy is not feasible, so the impact of this issue is believed to be minor. This issue has been patched, please upgrade to version 4.4.1. As a workaround, avoid untrusted external calls during initialization.", + "CVE-2022-36061": "Elrond go is the go implementation for the Elrond Network protocol. In versions prior to 1.3.35, read only calls between contracts can generate smart contracts results. For example, if contract A calls in read only mode contract B and the called function will make changes upon the contract's B state, the state will be altered for contract B as if the call was not made in the read-only mode. This can lead to some effects not designed by the original smart contracts programmers. This issue was patched in version 1.3.35. There are no known workarounds.", + "CVE-2022-35961": "OpenZeppelin Contracts is a library for secure smart contract development. The functions `ECDSA.recover` and `ECDSA.tryRecover` are vulnerable to a kind of signature malleability due to accepting EIP-2098 compact signatures in addition to the traditional 65 byte signature format. This is only an issue for the functions that take a single `bytes` argument, and not the functions that take `r, v, s` or `r, vs` as separate arguments. The potentially affected contracts are those that implement signature reuse or replay protection by marking the signature itself as used rather than the signed message or a nonce included in it. A user may take a signature that has already been submitted, submit it again in a different form, and bypass this protection. The issue has been patched in 4.7.3.", + "CVE-2022-35916": "OpenZeppelin Contracts is a library for secure smart contract development. Contracts using the cross chain utilities for Arbitrum L2, `CrossChainEnabledArbitrumL2` or `LibArbitrumL2`, will classify direct interactions of externally owned accounts (EOAs) as cross chain calls, even though they are not started on L1. This issue has been patched in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-35915": "OpenZeppelin Contracts is a library for secure smart contract development. The target contract of an EIP-165 `supportsInterface` query can cause unbounded gas consumption by returning a lot of data, while it is generally assumed that this operation has a bounded cost. The issue has been fixed in v4.7.2. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-31198": "OpenZeppelin Contracts is a library for secure smart contract development. This issue concerns instances of Governor that use the module `GovernorVotesQuorumFraction`, a mechanism that determines quorum requirements as a percentage of the voting token's total supply. In affected instances, when a proposal is passed to lower the quorum requirements, past proposals may become executable if they had been defeated only due to lack of quorum, and the number of votes it received meets the new quorum requirement. Analysis of instances on chain found only one proposal that met this condition, and we are actively monitoring for new occurrences of this particular issue. This issue has been patched in v4.7.2. Users are advised to upgrade. Users unable to upgrade should consider avoiding lowering quorum requirements if a past proposal was defeated for lack of quorum.", + "CVE-2022-31172": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.1.0 until 4.7.1 are vulnerable to the SignatureChecker reverting. `SignatureChecker.isValidSignatureNow` is not expected to revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-1271 as expected. The contracts that may be affected are those that use `SignatureChecker` to check the validity of a signature and handle invalid signatures in a way other than reverting. The issue was patched in version 4.7.1.", + "CVE-2022-31170": "OpenZeppelin Contracts is a library for smart contract development. Versions 4.0.0 until 4.7.1 are vulnerable to ERC165Checker reverting instead of returning `false`. `ERC165Checker.supportsInterface` is designed to always successfully return a boolean, and under no circumstance revert. However, an incorrect assumption about Solidity 0.8's `abi.decode` allows some cases to revert, given a target contract that doesn't implement EIP-165 as expected, specifically if it returns a value other than 0 or 1. The contracts that may be affected are those that use `ERC165Checker` to check for support for an interface and then handle the lack of support in a way other than reverting. The issue was patched in version 4.7.1.", + "CVE-2022-29255": "Vyper is a Pythonic Smart Contract Language for the ethereum virtual machine. In versions prior to 0.3.4 when a calling an external contract with no return value, the contract address (including side effects) could be evaluated twice. This may result in incorrect outcomes for contracts. This issue has been addressed in v0.3.4.", + "CVE-2022-27134": "EOSIO batdappboomx v327c04cf has an Access-control vulnerability in the `transfer` function of the smart contract which allows remote attackers to win the cryptocurrency without paying ticket fee via the `std::string memo` parameter.", + "CVE-2022-24845": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In affected versions, the return of `<iface>.returns_int128()` is not validated to fall within the bounds of `int128`. This issue can result in a misinterpretation of the integer value and lead to incorrect behavior. As of v0.3.0, `<iface>.returns_int128()` is validated in simple expressions, but not complex expressions. Users are advised to upgrade. There is no known workaround for this issue.", + "CVE-2022-24788": "Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. Versions of vyper prior to 0.3.2 suffer from a potential buffer overrun. Importing a function from a JSON interface which returns `bytes` generates bytecode which does not clamp bytes length, potentially resulting in a buffer overrun. Users are advised to upgrade. There are no known workarounds for this issue.", + "CVE-2022-24787": "Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. In version 0.3.1 and prior, bytestrings can have dirty bytes in them, resulting in the word-for-word comparisons giving incorrect results. Even without dirty nonzero bytes, two bytestrings can compare to equal if one ends with `\"\\x00\"` because there is no comparison of the length. A patch is available and expected to be part of the 0.3.2 release. There are currently no known workarounds.", + "CVE-2021-41264": "OpenZeppelin Contracts is a library for smart contract development. In affected versions upgradeable contracts using `UUPSUpgradeable` may be vulnerable to an attack affecting uninitialized implementation contracts. A fix is included in version 4.3.2 of `@openzeppelin/contracts` and `@openzeppelin/contracts-upgradeable`. For users unable to upgrade; initialize implementation contracts using `UUPSUpgradeable` by invoking the initializer function (usually called `initialize`). An example is provided [in the forum](https://forum.openzeppelin.com/t/security-advisory-initialize-uups-implementation-contracts/15301).", + "CVE-2021-41122": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions external functions did not properly validate the bounds of decimal arguments. The can lead to logic errors. This issue has been resolved in version 0.3.0.", + "CVE-2021-41121": "Vyper is a Pythonic Smart Contract Language for the EVM. In affected versions when performing a function call inside a literal struct, there is a memory corruption issue that occurs because of an incorrect pointer to the the top of the stack. This issue has been resolved in version 0.3.0.", + "CVE-2021-39168": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", + "CVE-2021-39167": "OpenZepplin is a library for smart contract development. In affected versions a vulnerability in TimelockController allowed an actor with the executor role to escalate privileges. Further details about the vulnerability will be disclosed at a later date. As a workaround revoke the executor role from accounts not strictly under the team's control. We recommend revoking all executors that are not also proposers. When applying this mitigation, ensure there is at least one proposer and executor remaining.", + "CVE-2021-34273": "A security flaw in the 'owned' function of a smart contract implementation for BTC2X (B2X), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", + "CVE-2021-34272": "A security flaw in the 'owned' function of a smart contract implementation for RobotCoin (RBTC), a tradeable Ethereum ERC20 token, allows attackers to hijack victim accounts and arbitrarily increase the digital supply of assets.", + "CVE-2021-34270": "An integer overflow in the mintToken function of a smart contract implementation for Doftcoin Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses.", + "CVE-2021-33403": "An integer overflow in the transfer function of a smart contract implementation for Lancer Token, an Ethereum ERC20 token, allows the owner to cause unexpected financial losses between two large accounts during a transaction.", + "CVE-2021-3006": "The breed function in the smart contract implementation for Farm in Seal Finance (Seal), an Ethereum token, lacks access control and thus allows price manipulation, as exploited in the wild in December 2020 and January 2021.", + "CVE-2021-3004": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", + "CVE-2020-35962": "The sellTokenForLRC function in the vault protocol in the smart contract implementation for Loopring (LRC), an Ethereum token, lacks access control for fee swapping and thus allows price manipulation.", + "CVE-2020-17753": "An issue was discovered in function addMeByRC in the smart contract implementation for RC, an Ethereum token, allows attackers to transfer an arbitrary amount of tokens to an arbitrary address.", + "CVE-2020-17752": "Integer overflow vulnerability in payable function of a smart contract implementation for an Ethereum token, as demonstrated by the smart contract implemented at address 0xB49E984A83d7A638E7F2889fc8328952BA951AbE, an implementation for MillionCoin (MON).", + "CVE-2019-15080": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", + "CVE-2019-15079": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", + "CVE-2019-15078": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", + "CVE-2018-19834": "The quaker function of a smart contract implementation for BOMBBA (BOMB), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19833": "The owned function of a smart contract implementation for DDQ, an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19832": "The NETM() function of a smart contract implementation for NewIntelTechMedia (NETM), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19831": "The ToOwner() function of a smart contract implementation for Cryptbond Network (CBN), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function does not check the caller's identity.", + "CVE-2018-19830": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", + "CVE-2018-18425": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", + "CVE-2018-17987": "The determineWinner function of a smart contract implementation for HashHeroes Tiles, an Ethereum game, uses a certain blockhash value in an attempt to generate a random number for the case where NUM_TILES equals the number of people who purchased a tile, which allows an attacker to control the awarding of the prize by being the last person to purchase a tile.", + "CVE-2018-17968": "A gambling smart contract implementation for RuletkaIo, an Ethereum gambling game, generates a random value that is predictable by an external contract call. The developer wrote a random() function that uses a block timestamp and block hash from the Ethereum blockchain. This can be predicted by writing the same random function code in an exploit contract to determine the deadSeat value.", + "CVE-2018-17882": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", + "CVE-2018-17877": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-17111": "The onlyOwner modifier of a smart contract implementation for Coinlancer (CL), an Ethereum ERC20 token, has a potential access control vulnerability. All contract users can access functions that use this onlyOwner modifier, because the comparison between msg.sender and owner is incorrect.", + "CVE-2018-17071": "The fallback function of a simple lottery smart contract implementation for Lucky9io, an Ethereum gambling game, generates a random value with the publicly readable variable entry_number. This variable is private, yet it is readable by eth.getStorageAt function. Also, attackers can purchase a ticket at a low price by directly calling the fallback function with small msg.value, because the developer set the currency unit incorrectly. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-17050": "The mintToken function of a smart contract implementation for PolyAi (AI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-15552": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-14715": "The endCoinFlip function and throwSlammer function of the smart contract implementations for Cryptogs, an Ethereum game, generate random numbers with an old block's hash. Therefore, attackers can predict the random number and always win the game.", + "CVE-2018-14576": "The mintTokens function of a smart contract implementation for SunContract, an Ethereum token, has an integer overflow via the _amount variable.", + "CVE-2018-14089": "An issue was discovered in a smart contract implementation for Virgo_ZodiacToken, an Ethereum token. In this contract, 'bool sufficientAllowance = allowance <= _value' will cause an arbitrary transfer in the function transferFrom because '<=' is used instead of '>=' (which was intended). An attacker can transfer from any address to his address, and does not need to meet the 'allowance > value' condition.", + "CVE-2018-14088": "An issue was discovered in a smart contract implementation for STeX White List (STE(WL)), an Ethereum token. The contract has an integer overflow. If the owner sets the value of amount to a large number then the \"amount * 1000000000000000\" will cause an integer overflow in withdrawToFounders().", + "CVE-2018-14087": "An issue was discovered in a smart contract implementation for EUC (EUC), an Ethereum token. The contract has an integer overflow. If the owner sets the value of buyPrice to a large number in setPrices() then the \"msg.value * buyPrice\" will cause an integer overflow in the fallback function.", + "CVE-2018-14086": "An issue was discovered in a smart contract implementation for SingaporeCoinOrigin (SCO), an Ethereum token. The contract has an integer overflow. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", + "CVE-2018-14085": "An issue was discovered in a smart contract implementation for UserWallet 0x0a7bca9FB7AfF26c6ED8029BB6f0F5D291587c42, an Ethereum token. First, suppose that the owner adds the evil contract address to his sweepers. The evil contract looks like this: contract Exploit { uint public start; function sweep(address _token, uint _amount) returns (bool) { start = 0x123456789; return true;} }. Then, when one calls the function sweep() in the UserWallet contract, it will change the sweeperList to 0X123456789.", + "CVE-2018-14084": "An issue was discovered in a smart contract implementation for MKCB, an Ethereum token. If the owner sets the value of sellPrice to a large number in setPrices() then the \"amount * sellPrice\" will cause an integer overflow in sell().", + "CVE-2018-14063": "The increaseApproval function of a smart contract implementation for Tracto (TRCT), an Ethereum ERC20 token, has an integer overflow.", + "CVE-2018-14006": "An integer overflow vulnerability exists in the function multipleTransfer of Neo Genesis Token (NGT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14005": "An integer overflow vulnerability exists in the function transferAny of Malaysia coins (Xmc), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14004": "An integer overflow vulnerability exists in the function transfer_tokens_after_ICO of GlobeCoin (GLB), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14003": "An integer overflow vulnerability exists in the function batchTransfer of WeMediaChain (WMC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14002": "An integer overflow vulnerability exists in the function distribute of MP3 Coin (MP3), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-14001": "An integer overflow vulnerability exists in the function batchTransfer of SHARKTECH (SKT), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-13877": "The doPayouts() function of the smart contract implementation for MegaCryptoPolis, an Ethereum game, has a Denial of Service vulnerability. If a smart contract that has a fallback function always causing exceptions buys a land, users cannot buy lands near that contract's land, because those purchase attempts will not be completed unless the doPayouts() function successfully sends Ether to certain neighbors.", + "CVE-2018-13836": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "CVE-2018-13783": "The mintToken function of a smart contract implementation for JiucaiToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13782": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13781": "The mintToken function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13780": "The mintToken function of a smart contract implementation for ESH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13779": "The mintToken function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13778": "The mintToken function of a smart contract implementation for CGCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13777": "The mintToken function of a smart contract implementation for RRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13776": "The mintToken function of a smart contract implementation for AppleToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13775": "The mintToken function of a smart contract implementation for RCKT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13774": "The mintToken function of a smart contract implementation for Bitstarti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13773": "The mintToken function of a smart contract implementation for Enterprise Token Ecosystem (ETE) (Contract Name: NetkillerToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13772": "The mintToken function of a smart contract implementation for TheFlashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13771": "The mintToken function of a smart contract implementation for ExacoreContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13770": "The mintToken function of a smart contract implementation for UltimateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13769": "The mintToken function of a smart contract implementation for JeansToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13768": "The mintToken function of a smart contract implementation for ZToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13767": "The mintToken function of a smart contract implementation for Cornerstone, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13766": "The mintToken function of a smart contract implementation for Easticoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13765": "The mintToken function of a smart contract implementation for LandCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13764": "The mintToken function of a smart contract implementation for BiquToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13763": "The mintToken function of a smart contract implementation for Ublasti, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13762": "The mintToken function of a smart contract implementation for Yumerium, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13761": "The mintToken function of a smart contract implementation for NetkillerAdvancedTokenAirDrop, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13760": "The mintToken function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13759": "The mintToken function of a smart contract implementation for BIGCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13758": "The mintToken function of a smart contract implementation for LoliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13757": "The mintToken function of a smart contract implementation for Coinquer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13756": "The mintToken function of a smart contract implementation for CherryCoinFoundation, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13755": "The mintToken function of a smart contract implementation for OTAKUToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13754": "The mintToken function of a smart contract implementation for CryptosisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13753": "The mintToken function of a smart contract implementation for DeWeiSecurityServiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13752": "The mintToken function of a smart contract implementation for Thread, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13751": "The mintToken function of a smart contract implementation for JustWallet, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13750": "The mintToken function of a smart contract implementation for RichiumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13749": "The mintToken function of a smart contract implementation for FinalToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13748": "The mintToken function of a smart contract implementation for CarToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13747": "The mintToken function of a smart contract implementation for VanMinhCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13746": "The mintToken function of a smart contract implementation for kBit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13745": "The mintToken function of a smart contract implementation for STCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13744": "The mintToken function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13743": "The mintToken function of a smart contract implementation for SuperEnergy (SEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13742": "The mintToken function of a smart contract implementation for tickets (TKT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13741": "The mintToken function of a smart contract implementation for ABLGenesisToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13740": "The mintToken function of a smart contract implementation for OneChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13739": "The mintToken function of a smart contract implementation for dopnetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13738": "The mintToken function of a smart contract implementation for PELOCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13737": "The mintToken function of a smart contract implementation for AnovaBace, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13736": "The mintToken function of a smart contract implementation for ELearningCoinERC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13735": "The mintToken function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13734": "The mintToken function of a smart contract implementation for AZTToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13733": "The mintToken function of a smart contract implementation for ProjectJ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13732": "The mintToken function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13731": "The mintToken function of a smart contract implementation for TokenMACHU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13730": "The mintToken function of a smart contract implementation for HEY, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13729": "The mintToken function of a smart contract implementation for JPMD100B, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13728": "The mintToken function of a smart contract implementation for JixoCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13727": "The mintToken function of a smart contract implementation for Eastcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13726": "The mintToken function of a smart contract implementation for ISeeVoiceToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13725": "The mintToken function of a smart contract implementation for GlobalSuperGameToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13724": "The mint function of a smart contract implementation for HYIPCrowdsale1, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13723": "The mintToken function of a smart contract implementation for SERVVIZIOToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13722": "The mint function of a smart contract implementation for HYIPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13721": "The mintToken function of a smart contract implementation for GoMineWorld, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13720": "The mintToken function of a smart contract implementation for Antoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13719": "The mintToken function of a smart contract implementation for BiteduToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13718": "The mintToken function of a smart contract implementation for FuturXe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13717": "The mintToken function of a smart contract implementation for HormitechToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13716": "The mintToken function of a smart contract implementation for sexhdsolo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13715": "The mintToken function of a smart contract implementation for BpsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13714": "The mintToken function of a smart contract implementation for CM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13713": "The mintToken function of a smart contract implementation for Tradesman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13712": "The mintToken function of a smart contract implementation for PMET, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13711": "The mintToken function of a smart contract implementation for Databits, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13710": "The mintToken function of a smart contract implementation for Mjolnir, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13709": "The mintToken function of a smart contract implementation for Tube, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13708": "The mintToken function of a smart contract implementation for Order (ETH) (Contract Name: BuyToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13707": "The mintToken function of a smart contract implementation for YSS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13706": "The mintToken function of a smart contract implementation for IdeaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13705": "The mintToken function of a smart contract implementation for PMHToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13704": "The mintToken function of a smart contract implementation for eddToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13703": "The mintToken function of a smart contract implementation for CERB_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13702": "The mintToken function of a smart contract implementation for Essence, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13701": "The mintToken function of a smart contract implementation for KissMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13700": "The mintToken function of a smart contract implementation for IPMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13699": "The mintToken function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13698": "The mintTokens function of a smart contract implementation for Play2LivePromo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13697": "The mintToken function of a smart contract implementation for RobotBTC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13696": "The mintToken function of a smart contract implementation for RedTicket, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13695": "The mint function of a smart contract implementation for CTest7, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13694": "The mintToken function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13693": "The mintToken function of a smart contract implementation for GreenEnergyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13692": "The mintToken function of a smart contract implementation for MehdiTAZIToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13691": "The mintToken function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13690": "The mintToken function of a smart contract implementation for Instacocoa, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13689": "The mintToken function of a smart contract implementation for CJXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13688": "The mintToken function of a smart contract implementation for MallToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13687": "The mintToken function of a smart contract implementation for normikaivo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13686": "The mintToken function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13685": "The mintToken function of a smart contract implementation for Vornox (VRX) (Contract Name: VornoxCoinToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13684": "The mintToken function of a smart contract implementation for ZIP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13683": "The mintToken function of a smart contract implementation for exsulcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13682": "The mintToken function of a smart contract implementation for ViteMoneyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13681": "The mintToken function of a smart contract implementation for SOSCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13680": "The mintToken function of a smart contract implementation for LexitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13679": "The mintToken function of a smart contract implementation for ZPEcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13678": "The mintToken function of a smart contract implementation for Lottery, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13677": "The mintToken function of a smart contract implementation for Goochain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13676": "The mintToken function of a smart contract implementation for Orderbook Presale Token (OBP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13675": "The mintToken function of a smart contract implementation for YAMBYO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13674": "The mintToken function of a smart contract implementation for ComBillAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13673": "The mintToken function of a smart contract implementation for GoldTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13672": "The mintToken function of a smart contract implementation for OBTCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13671": "The mintToken function of a smart contract implementation for DinsteinCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13670": "The mintToken function of a smart contract implementation for GFCB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13669": "The mintToken function of a smart contract implementation for NCU, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13668": "The mintToken function of a smart contract implementation for BTPCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13667": "The mintToken function of a smart contract implementation for UTBTokenTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13666": "The mintToken function of a smart contract implementation for EristicaICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13665": "The mintToken function of a smart contract implementation for BCaaS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13664": "The mintToken function of a smart contract implementation for CWS, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13663": "The mintToken function of a smart contract implementation for BSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13662": "The mintToken function of a smart contract implementation for WorldOpctionChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13661": "The mintToken function of a smart contract implementation for APP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13660": "The mint function of a smart contract implementation for BillionRewardsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13659": "The mintToken function of a smart contract implementation for BrianCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13658": "The mintToken function of a smart contract implementation for TheGoDgital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13657": "The mintToken function of a smart contract implementation for Rice, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13656": "The mintToken function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13655": "The mintToken function of a smart contract implementation for GFC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13654": "The mintToken function of a smart contract implementation for ESTSToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13653": "The mintToken function of a smart contract implementation for ipshoots, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13652": "The mintToken function of a smart contract implementation for TheGoDigital, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13651": "The mintToken function of a smart contract implementation for MicoinNetworkToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13650": "The mintToken function of a smart contract implementation for BitmaxerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13649": "The mintToken function of a smart contract implementation for Deploy, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13648": "The mintToken function of a smart contract implementation for BGC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13647": "The mintToken function of a smart contract implementation for TrueGoldCoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13646": "The mintToken function of a smart contract implementation for Datiac, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13645": "The mintToken function of a smart contract implementation for Fiocoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13644": "The mintToken function of a smart contract implementation for RoyalClassicCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13643": "The mintToken function of a smart contract implementation for GCRTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13642": "The mintToken function of a smart contract implementation for SECoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13641": "The mintToken function of a smart contract implementation for MVGcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13640": "The mintToken function of a smart contract implementation for EthereumSmart, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13639": "The mintToken function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13638": "The mintToken function of a smart contract implementation for Bitpark, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13637": "The mintToken function of a smart contract implementation for CikkaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13636": "The mintToken function of a smart contract implementation for TurdCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13635": "The mintToken function of a smart contract implementation for HBCM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13634": "The mintToken function of a smart contract implementation for MediaCubeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13633": "The mintToken function of a smart contract implementation for Martcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13632": "The mintToken function of a smart contract implementation for NEXPARA, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13631": "The mintToken function of a smart contract implementation for doccoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13630": "The mintToken function of a smart contract implementation for DoccoinPreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13629": "The mintToken function of a smart contract implementation for CrimsonShilling, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13628": "The mintToken function of a smart contract implementation for MomentumToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13627": "The mintToken function of a smart contract implementation for MyOffer, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13626": "The mintToken function of a smart contract implementation for SemainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13625": "The mintlvlToken function of a smart contract implementation for Krown, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13624": "The mintToken function of a smart contract implementation for WXSLToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13623": "The mintToken function of a smart contract implementation for AirdropperCryptics, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13622": "The mintToken function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13621": "The mintToken function of a smart contract implementation for SoundTribeToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13620": "The mintToken function of a smart contract implementation for TripCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13619": "The mintToken function of a smart contract implementation for MicoinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13618": "The mintToken function of a smart contract implementation for VICETOKEN_ICO_IS_A_SCAM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13617": "The mintToken function of a smart contract implementation for CAPTOZ, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13616": "The mintToken function of a smart contract implementation for IOCT_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13615": "The mintToken function of a smart contract implementation for MJCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13614": "The mintToken function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13613": "The mintToken function of a smart contract implementation for CON0217, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13612": "The mintToken function of a smart contract implementation for Robincoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13611": "The mintToken function of a smart contract implementation for CDcurrency, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13610": "The mintToken function of a smart contract implementation for MedicayunLink, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13609": "The mintToken function of a smart contract implementation for CSAToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13608": "The mintToken function of a smart contract implementation for archercoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13607": "The mintToken function of a smart contract implementation for ResidualShare, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13606": "The mintToken function of a smart contract implementation for ARChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13605": "The mintToken function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13604": "The mintToken function of a smart contract implementation for wellieat, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13603": "The mintToken function of a smart contract implementation for Briant2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13602": "The mint function of a smart contract implementation for MiningToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13601": "The mintToken function of a smart contract implementation for GalacticX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13600": "The mintToken function of a smart contract implementation for AMToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13599": "The mintToken function of a smart contract implementation for ResidualValue, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13598": "The mintToken function of a smart contract implementation for SendMe, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13597": "The mintToken function of a smart contract implementation for testcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13596": "The mintToken function of a smart contract implementation for TESTAhihi, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13595": "The mintToken function of a smart contract implementation for BitStore, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13594": "The mintToken function of a smart contract implementation for CardFactory, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13593": "The mintToken function of a smart contract implementation for CardToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13592": "The mintToken function of a smart contract implementation for RajTest, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13591": "The mintToken function of a smart contract implementation for KAPcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13590": "The mintToken function of a smart contract implementation for SIPCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13589": "The mintToken function of a smart contract implementation for MooAdvToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13588": "The mintToken function of a smart contract implementation for Code47 (C47), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13587": "The mintToken function of a smart contract implementation for DECToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13586": "The mintToken function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13585": "The mintToken function of a smart contract implementation for CHERRYCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13584": "The mintToken function of a smart contract implementation for yasudem, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13583": "The mintToken function of a smart contract implementation for Shmoo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13582": "The mintToken function of a smart contract implementation for My2Token, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13581": "The mintToken function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13580": "The mintToken function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13579": "The mintToken function of a smart contract implementation for ForeverCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13578": "The mintToken function of a smart contract implementation for GalaxyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13577": "The mintToken function of a smart contract implementation for ShitCoin (SHITC) (Contract Name: AdvancedShit), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13576": "The mintToken function of a smart contract implementation for Escut (ESCT) (Contract Name: JuntsPerCreixer), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13575": "The mintToken function of a smart contract implementation for YESToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13574": "The mintToken function of a smart contract implementation for DataShieldCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13573": "The mintToken function of a smart contract implementation for TripPay, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13572": "The mintToken function of a smart contract implementation for PGM_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13571": "The mintToken function of a smart contract implementation for GoramCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13570": "The mint function of a smart contract implementation for kkTestCoin1 (KTC1), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13569": "The mintToken function of a smart contract implementation for HitToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13568": "The mintToken function of a smart contract implementation for MktCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13567": "The mintToken function of a smart contract implementation for SDR, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13566": "The mintToken function of a smart contract implementation for RETNToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13565": "The mintToken function of a smart contract implementation for Co2Bit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13564": "The mintToken function of a smart contract implementation for GATcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13563": "The mintToken function of a smart contract implementation for UPayToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13562": "The mintToken function of a smart contract implementation for BMVCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13561": "The mintToken function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13560": "The mintToken function of a smart contract implementation for KelvinToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13559": "The mintToken function of a smart contract implementation for UTCT, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13558": "The mintToken function of a smart contract implementation for rhovit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13557": "The mintToken function of a smart contract implementation for Trabet_Coin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13556": "The mintToken function of a smart contract implementation for COSMOTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13555": "The mintToken function of a smart contract implementation for JaxBox, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13554": "The mintToken function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13553": "The mintToken function of a smart contract implementation for Micro BTC (MBTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13552": "The mintToken function of a smart contract implementation for Trabet_Coin_PreICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13551": "The mintToken function of a smart contract implementation for Bgamecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13550": "The mintToken function of a smart contract implementation for Coquinho Coin (CQNC) (Contract Name: CoquinhoERC20), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13549": "The mintToken function of a smart contract implementation for NeuroToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13548": "The mintToken function of a smart contract implementation for Mimicoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13547": "The mintToken function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13546": "The mintToken function of a smart contract implementation for CCASH, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13545": "The mintToken function of a smart contract implementation for HashShield, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13544": "The mintToken function of a smart contract implementation for Numisma, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13543": "The mintToken function of a smart contract implementation for GemstoneToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13542": "The mintToken function of a smart contract implementation for ZIBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13541": "The mintToken function of a smart contract implementation for CryptoLeu, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13540": "The mintToken function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13539": "The mintToken function of a smart contract implementation for Bcxss, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13538": "The mintToken function of a smart contract implementation for SIPCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13537": "The mintToken function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13536": "The mintToken function of a smart contract implementation for ERC20_ICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13535": "The mintToken function of a smart contract implementation for PACCOIN, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13534": "The mintToken function of a smart contract implementation for SpeedCashLite (SCSL), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13533": "The mintToken function of a smart contract implementation for ALUXToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13532": "The mintToken function of a smart contract implementation for Mindexcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13531": "The mintToken function of a smart contract implementation for MaxHouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13530": "The mintToken function of a smart contract implementation for HunterCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13529": "The mintToken function of a smart contract implementation for BetterThanAdrien, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13528": "The mintToken function of a smart contract implementation for DhaCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13527": "The mintToken function of a smart contract implementation for ElevateCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13526": "The mintToken function of a smart contract implementation for WangWangToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13525": "The mintToken function of a smart contract implementation for Flow, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13524": "The mintToken function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13523": "The mintToken function of a smart contract implementation for SmartPayment, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13522": "The mintToken function of a smart contract implementation for EXGROUP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13521": "The mintToken function of a smart contract implementation for PinkyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13520": "The mintToken function of a smart contract implementation for TopscoinAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13519": "The mint function of a smart contract implementation for DigitalCloudToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13518": "The mintToken function of a smart contract implementation for TCash, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13517": "The mintToken function of a smart contract implementation for C3 Token (C3), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13516": "The mintToken function of a smart contract implementation for Super Cool Awesome Money (SCAM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13515": "The mintToken function of a smart contract implementation for aman, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13514": "The mintToken function of a smart contract implementation for esportz, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13513": "The mintToken function of a smart contract implementation for Ubiou, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13512": "The mintToken function of a smart contract implementation for SmartHomeCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13511": "The mintToken function of a smart contract implementation for CorelliCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13510": "The mintToken function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13509": "The mintToken function of a smart contract implementation for IamRich, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13508": "The mintToken function of a smart contract implementation for VITToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13507": "The mintToken function of a smart contract implementation for SLCAdvancedToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13506": "The mintToken function of a smart contract implementation for SDR22, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13505": "The mintToken function of a smart contract implementation for ecogreenhouse, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13504": "The mintToken function of a smart contract implementation for MMCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13503": "The mintToken function of a smart contract implementation for South Park Token Token (SPTKN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13502": "The mintToken function of a smart contract implementation for HeliumNetwork, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13501": "The mintToken function of a smart contract implementation for HRWtoken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13500": "The mintToken function of a smart contract implementation for MSXAdvanced, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13499": "The mintToken function of a smart contract implementation for Crowdsale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13498": "The mintToken function of a smart contract implementation for KAPAYcoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13497": "The mintToken function of a smart contract implementation for COBToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13496": "The mintToken function of a smart contract implementation for RajTestICO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13495": "The mintToken function of a smart contract implementation for KMCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13494": "The mintToken function of a smart contract implementation for SusanTokenERC20, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13493": "The mintToken function of a smart contract implementation for DaddyToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13492": "The mintToken function of a smart contract implementation for naga, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13491": "The mintToken function of a smart contract implementation for Carrot, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13490": "The mintToken function of a smart contract implementation for FILM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13489": "The mintToken function of a smart contract implementation for OllisCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13488": "The mintToken function of a smart contract implementation for Crypto Alley Shares (CAST), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13487": "The mintToken function of a smart contract implementation for PlatoToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13486": "The mintToken function of a smart contract implementation for HELP, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13485": "The mintToken function of a smart contract implementation for BitcoinAgileToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13484": "The mintToken function of a smart contract implementation for CBRToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13483": "The mintToken function of a smart contract implementation for mkethToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13482": "The mintToken function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13481": "The mintToken function of a smart contract implementation for TRIUM, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13480": "The mintToken function of a smart contract implementation for QRG, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13479": "The mintToken function of a smart contract implementation for SlidebitsToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13478": "The mintToken function of a smart contract implementation for DMPToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13477": "The mintToken function of a smart contract implementation for CTESale, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13476": "The mintToken function of a smart contract implementation for PhilCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13475": "The mintToken function of a smart contract implementation for VSCToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13474": "The mintToken function of a smart contract implementation for FansChainToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13473": "The mintToken function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13472": "The mint function of a smart contract implementation for CloutToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13471": "The mintToken function of a smart contract implementation for BeyondCashToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13470": "The mintToken function of a smart contract implementation for BuyerToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13469": "The mintToken function of a smart contract implementation for IcoContract, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13468": "The mintToken function of a smart contract implementation for Cavecoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13467": "The mintToken function of a smart contract implementation for EpiphanyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13466": "The mintToken function of a smart contract implementation for Crystals, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13465": "The mintToken function of a smart contract implementation for PaulyCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13464": "The mintToken function of a smart contract implementation for t_swap, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13463": "The mintToken function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13462": "The mintToken function of a smart contract implementation for MoonToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13328": "The transfer, transferFrom, and mint functions of a smart contract implementation for PFGc, an Ethereum token, have an integer overflow.", + "CVE-2018-13327": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for ChuCunLingAIGO (CCLAG), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13326": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Bittelux (BTX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13325": "The _sell function of a smart contract implementation for GROWCHAIN (GROW), an Ethereum token, has an integer overflow.", + "CVE-2018-13233": "The sell function of a smart contract implementation for GSI, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13232": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterCoin), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13231": "The sell function of a smart contract implementation for ENTER (ENTR) (Contract Name: EnterToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13230": "The sell function of a smart contract implementation for DestiNeed (DSN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13229": "The sell function of a smart contract implementation for RiptideCoin (RIPT), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13228": "The sell function of a smart contract implementation for Crowdnext (CNX), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13227": "The sell function of a smart contract implementation for MoneyChainNet (MCN), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13226": "The sell function of a smart contract implementation for YLCToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13225": "The sell function of a smart contract implementation for MyYLC, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13224": "The sell function of a smart contract implementation for Virtual Energy Units (VEU) (Contract Name: VEU_TokenERC20), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13223": "The sell function of a smart contract implementation for R Time Token v3 (RS) (Contract Name: RTokenMain), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13222": "The sell function of a smart contract implementation for ObjectToken (OBJ), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13221": "The sell function of a smart contract implementation for Extreme Coin (XT) (Contract Name: ExtremeToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13220": "The sell function of a smart contract implementation for MAVCash, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13219": "The sell function of a smart contract implementation for YourCoin (ICO) (Contract Name: ETH033), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13218": "The sell function of a smart contract implementation for ICO Dollar (ICOD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13217": "The sell function of a smart contract implementation for CoinToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13216": "The sell function of a smart contract implementation for GreenMed (GRMD), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13215": "The sell function of a smart contract implementation for Sample Token (STK) (Contract Name: cashBackMintable), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13214": "The sell function of a smart contract implementation for GMile, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13213": "The sell function of a smart contract implementation for TravelCoin (TRV), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13212": "The sell function of a smart contract implementation for EthereumLegit, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13211": "The sell function of a smart contract implementation for MyToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13210": "The sell function of a smart contract implementation for Providence Crypto Casino (PVE) (Contract Name: ProvidenceCasinoToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13209": "The sell function of a smart contract implementation for Nectar (NCTR), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13208": "The sell function of a smart contract implementation for MoneyTree (TREE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13207": "The sell function of a smart contract implementation for PornCoin (PRNC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13206": "The sell function of a smart contract implementation for ProvidenceCasino (PVE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13205": "The sell function of a smart contract implementation for ohni_2 (OHNI), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13204": "The sell function of a smart contract implementation for ETHERCASH (ETC), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13203": "The sellBuyerTokens function of a smart contract implementation for SwapToken, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13202": "The sell function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13201": "The sell function of a smart contract implementation for TiTok - Ticket Token (Contract Name: MyAdvancedToken7), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13200": "The sell function of a smart contract implementation for DateMe (DMX) (Contract Name: ProgressiveToken), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13199": "The sell function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13198": "The sell function of a smart contract implementation for STeX Exchange ICO (STE), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13197": "The sell function of a smart contract implementation for Welfare Token Fund (WTF), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13196": "The sell function of a smart contract implementation for T-Swap-Token (T-S-T), an Ethereum token, has an integer overflow in which \"amount * sellPrice\" can be zero, consequently reducing a seller's assets.", + "CVE-2018-13195": "The mintToken function of a smart contract implementation for Cranoo (CRN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13194": "The mintToken function of a smart contract implementation for TongTong Coin (TTCoin), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13193": "The mintToken function of a smart contract implementation for hentaisolo (HAO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13192": "The mintToken function of a smart contract implementation for Jobscoin (JOB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13191": "The mintToken function of a smart contract implementation for Super Carbon Coin (SCC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13190": "The mintToken function of a smart contract implementation for DVChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13189": "The mint function of a smart contract implementation for Unolabo (UNLB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13188": "The mintToken function of a smart contract implementation for MyBO, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13187": "The mintToken function of a smart contract implementation for CIBN Live Token (CIBN LIVE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13186": "The mintToken function of a smart contract implementation for MMTCoin (MMT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13185": "The mintToken function of a smart contract implementation for appcoins (APPC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13184": "The mintToken function of a smart contract implementation for TravelZedi Token (ZEDI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13183": "The mintToken function of a smart contract implementation for JWC, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13182": "The mintToken function of a smart contract implementation for loncoin (LON), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13181": "The mintToken function of a smart contract implementation for Troo, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13180": "The mintToken function of a smart contract implementation for IMM Coin (IMC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13179": "The mintToken function of a smart contract implementation for Air-Contact Token (AIR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13178": "The mintToken function of a smart contract implementation for ECToints (ECT) (Contract Name: ECPoints), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13177": "The mintToken function of a smart contract implementation for MiningRigRentals Token (MRR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13176": "The mintToken function of a smart contract implementation for Trust Zen Token (ZEN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13175": "The mintToken function of a smart contract implementation for AIChain, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13174": "The mintToken function of a smart contract implementation for CryptoABS (ABS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13173": "The mintToken function of a smart contract implementation for EliteShipperToken (ESHIP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13172": "The mintToken function of a smart contract implementation for bzxcoin (BZX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13171": "The mintToken function of a smart contract implementation for LadaToken (LDT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13170": "The mintToken function of a smart contract implementation for Snoqualmie Coin (SNOW), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13169": "The mintToken function of a smart contract implementation for Ethereum Cash Pro (ECP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13168": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO) (Contract Name: NetkillerBatchToken), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13167": "The mintToken function of a smart contract implementation for Yu Gi Oh (YGO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13166": "The mintToken function of a smart contract implementation for AthletiCoin (ATHA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13165": "The mintToken function of a smart contract implementation for JustDCoin (JustD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13164": "The mintToken function of a smart contract implementation for EPPCOIN (EPP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13163": "The mintToken function of a smart contract implementation for Ethernet Cash (ENC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13162": "The mintToken function of a smart contract implementation for ALEX, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13161": "The mintToken function of a smart contract implementation for MultiGames (MLT), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13160": "The mintToken function of a smart contract implementation for etktokens (ETK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13159": "The mintToken function of a smart contract implementation for bankcoin (BNK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13158": "The mintToken function of a smart contract implementation for AssetToken, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13157": "The mintToken function of a smart contract implementation for CryptonitexCoin, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13156": "The mintToken function of a smart contract implementation for bonusToken (BNS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13155": "The mintToken function of a smart contract implementation for GEMCHAIN (GEM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13146": "The mintToken, buy, and sell functions of a smart contract implementation for LEF, an Ethereum token, have an integer overflow.", + "CVE-2018-13145": "The mintToken function of a smart contract implementation for JavaSwapTest (JST), an Ethereum token, has an integer overflow.", + "CVE-2018-13144": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Pandora (PDX), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13132": "Spadeico is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13131": "SpadePreSale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13130": "Bitotal (TFUND) is a smart contract running on Ethereum. The mintTokens function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13129": "SP8DE Token (SPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13128": "Etherty Token (ETY) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13127": "SP8DE PreSale Token (DSPX) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13126": "MoxyOnePresale is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-13113": "** DISPUTED ** The transfer and transferFrom functions of a smart contract implementation for Easy Trading Token (ETT), an Ethereum token, have an integer overflow. NOTE: this has been disputed by a third party.", + "CVE-2018-13092": "The mintToken function of a smart contract implementation for Reimburse Token (REIM), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13091": "The mintToken function of a smart contract implementation for sumocoin (SUMO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13090": "The mintToken function of a smart contract implementation for YiTongCoin (YTC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13089": "The mintToken function of a smart contract implementation for Universal Coin (UCOIN), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13088": "The mintToken function of a smart contract implementation for Futures Pease (FP), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13087": "The mintToken function of a smart contract implementation for Coinstar (CSTR), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13086": "The mintToken function of a smart contract implementation for IADOWR Coin (IAD), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13085": "The mintToken function of a smart contract implementation for FreeCoin (FREE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13084": "The mintToken function of a smart contract implementation for Good Time Coin (GTY), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13083": "The mintToken function of a smart contract implementation for Plaza Token (PLAZA), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13082": "The mintToken function of a smart contract implementation for MODI Token (MODI), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13081": "The mintToken function of a smart contract implementation for GZS Token (GZS), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13080": "The mintToken function of a smart contract implementation for Goutex (GTX), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13079": "The mintToken function of a smart contract implementation for GoodTo (GTO), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13078": "The mintToken function of a smart contract implementation for Jitech (JTH), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13077": "The mintToken function of a smart contract implementation for CTB, an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13076": "The mintToken function of a smart contract implementation for Betcash (BC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13075": "The mintToken function of a smart contract implementation for Carbon Exchange Coin Token (CEC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13074": "The mintToken function of a smart contract implementation for FIBToken (FIB), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13073": "The mintToken function of a smart contract implementation for ETHEREUMBLACK (ETCBK), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13072": "The mintToken function of a smart contract implementation for Coffeecoin (COFFEE), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13071": "The mintToken function of a smart contract implementation for CCindex10 (T10), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13070": "The mintToken function of a smart contract implementation for EncryptedToken (ECC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13069": "The mintToken function of a smart contract implementation for DYchain (DYC), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13068": "The mintToken function of a smart contract implementation for AzurionToken (AZU), an Ethereum token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-13041": "The mint function of a smart contract implementation for Link Platform (LNK), an Ethereum ERC20 token, has an integer overflow that allows the owner of the contract to set the balance of an arbitrary user to any value.", + "CVE-2018-12975": "The random() function of the smart contract implementation for CryptoSaga, an Ethereum game, generates a random value with publicly readable variables such as timestamp, the current block's blockhash, and a private variable (which can be read with a getStorageAt call). Therefore, attackers can precompute the random number and manipulate the game (e.g., get powerful characters or get critical damages).", + "CVE-2018-12959": "The approveAndCall function of a smart contract implementation for Aditus (ADI), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all contract balances into their account).", + "CVE-2018-12885": "The randMod() function of the smart contract implementation for MyCryptoChamp, an Ethereum game, generates a random value with publicly readable variables such as the current block information and a private variable, (which can be read with a getStorageAt call). Therefore, attackers can get powerful champs/items and get rewards.", + "CVE-2018-12703": "The approveAndCallcode function of a smart contract implementation for Block 18 (18T), an tradable Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", + "CVE-2018-12702": "The approveAndCallcode function of a smart contract implementation for Globalvillage ecosystem (GVE), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer the contract's balances into their account) because the callcode (i.e., _spender.call(_extraData)) is not verified, aka the \"evilReflex\" issue. NOTE: a PeckShield disclosure states \"some researchers have independently discussed the mechanism of such vulnerability.\"", + "CVE-2018-12511": "In the mintToken function of a smart contract implementation for Substratum (SUB), an Ethereum ERC20 token, the administrator can control mintedAmount, leverage an integer overflow, and modify a user account's balance arbitrarily.", + "CVE-2018-12454": "The _addguess function of a simplelottery smart contract implementation for 1000 Guess, an Ethereum gambling game, generates a random value with publicly readable variables such as the current block information and a private variable (which can be read with a getStorageAt call). Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-12230": "An wrong logical check identified in the transferFrom function of a smart contract implementation for RemiCoin (RMC), an Ethereum ERC20 token, allows the attacker to steal tokens or conduct resultant integer underflow attacks.", + "CVE-2018-12084": "The mintToken function of a smart contract implementation for BitAsean (BAS), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12083": "The mintToken function of a smart contract implementation for GOAL Bonanza (GOAL), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12082": "The mintToken function of a smart contract implementation for Fujinto (NTO), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12081": "The mintToken function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12080": "The mintToken function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12079": "The mintToken function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12078": "The mintToken function of a smart contract implementation for PolyAI (AI), a tradable Ethereum ERC20 token, has no period constraint, which allows the owner to increase the total supply of the digital assets arbitrarily so as to make profits, aka the \"tradeTrap\" issue.", + "CVE-2018-12070": "The sell function of a smart contract implementation for SEC, a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12068": "The sell function of a smart contract implementation for Target Coin (TGT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12067": "The sell function of a smart contract implementation for Substratum (SUB), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12063": "The sell function of a smart contract implementation for Internet Node Token (INT), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12062": "The sell function of a smart contract implementation for SwftCoin (SWFTC), a tradable Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the seller, because of overflow of the multiplication of its argument amount and a manipulable variable sellPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-12056": "The maxRandom function of a smart contract implementation for All For One, an Ethereum gambling game, generates a random value with publicly readable variables because the _seed value can be retrieved with a getStorageAt call. Therefore, it allows attackers to always win and get rewards.", + "CVE-2018-12025": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", + "CVE-2018-11687": "An integer overflow in the distributeBTR function of a smart contract implementation for Bitcoin Red (BTCR), an Ethereum ERC20 token, allows the owner to accomplish an unauthorized increase of digital assets by providing a large address[] array, as exploited in the wild in May 2018, aka the \"ownerUnderflow\" issue.", + "CVE-2018-11561": "An integer overflow in the unprotected distributeToken function of a smart contract implementation for EETHER (EETHER), an Ethereum ERC20 token, will lead to an unauthorized increase of an attacker's digital assets.", + "CVE-2018-11446": "The buy function of a smart contract implementation for Gold Reward (GRX), an Ethereum ERC20 token, allows a potential trap that could be used to cause financial damage to the buyer because of overflow of the multiplication of its argument amount and a manipulable variable buyPrice, aka the \"tradeTrap\" issue.", + "CVE-2018-11429": "ATLANT (ATL) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-11411": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect.", + "CVE-2018-11335": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "CVE-2018-11329": "The DrugDealer function of a smart contract implementation for Ether Cartel, an Ethereum game, allows attackers to take over the contract's ownership, aka ceoAnyone. After that, all the digital assets (including Ether balance and tokens) might be manipulated by the attackers, as exploited in the wild in May 2018.", + "CVE-2018-11239": "An integer overflow in the _transfer function of a smart contract implementation for Hexagon (HXG), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets by providing a _to argument in conjunction with a large _value argument, as exploited in the wild in May 2018, aka the \"burnOverflow\" issue.", + "CVE-2018-10973": "An integer overflow in the transferMulti function of a smart contract implementation for KoreaShow, an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _value parameters.", + "CVE-2018-10944": "The request_dividend function of a smart contract implementation for ROC (aka Rasputin Online Coin), an Ethereum ERC20 token, allows attackers to steal all of the contract's Ether.", + "CVE-2018-10769": "The transferProxy and approveProxy functions of a smart contract implementation for SmartMesh (SMT), an Ethereum ERC20 token, allow attackers to accomplish an unauthorized transfer of digital assets because replay attacks can occur with the same-named functions (with the same signatures) in other tokens: First (FST), GG Token (GG), M2C Mesh Network (MTC), M2C Mesh Network (mesh), and UG Token (UGT).", + "CVE-2018-10706": "An integer overflow in the transferMulti function of a smart contract implementation for Social Chain (SCA), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets, aka the \"multiOverflow\" issue.", + "CVE-2018-10705": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", + "CVE-2018-10666": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", + "CVE-2018-10468": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue.", + "CVE-2018-10376": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", + "CVE-2018-10299": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", + "CVE-2017-14457": "An exploitable information leak/denial of service vulnerability exists in the libevm (Ethereum Virtual Machine) `create2` opcode handler of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read leading to memory disclosure or denial of service. An attacker can create/send malicious a smart contract to trigger this vulnerability.", + "CVE-2017-14451": "An exploitable out-of-bounds read vulnerability exists in libevm (Ethereum Virtual Machine) of CPP-Ethereum. A specially crafted smart contract code can cause an out-of-bounds read which can subsequently trigger an out-of-bounds write resulting in remote code execution. An attacker can create/send malicious smart contract to trigger this vulnerability." +} \ No newline at end of file diff --git a/data_sample/CVE_label/CVE2label.json b/data_sample/CVE_label/CVE2label.json new file mode 100644 index 00000000..ad74a711 --- /dev/null +++ b/data_sample/CVE_label/CVE2label.json @@ -0,0 +1,21 @@ +{ + "CVE-2018-10299": "Integer Overflow", + "CVE-2018-10376": "Integer Overflow", + "CVE-2018-11335": "Integer Overflow", + "CVE-2018-13836": "Integer Overflow", + "CVE-2018-17882": "Integer Overflow", + "CVE-2018-10468": "Wrong Logic", + "CVE-2018-11411": "Wrong Logic", + "CVE-2018-12025": "Wrong Logic", + "CVE-2021-3004": "Wrong Logic", + "CVE-2018-15552": "Bad Randomness", + "CVE-2018-14715": "Bad Randomness", + "CVE-2018-17877": "Bad Randomness", + "CVE-2018-10666": "Access Control", + "CVE-2018-10705": "Access Control", + "CVE-2018-19830": "Access Control", + "CVE-2019-15078": "Typo Constructor", + "CVE-2019-15079": "Typo Constructor", + "CVE-2019-15080": "Typo Constructor", + "CVE-2018-18425": "Token Devalue" +} \ No newline at end of file diff --git a/data_sample/prompts.py b/data_sample/prompts.py new file mode 100644 index 00000000..530209fe --- /dev/null +++ b/data_sample/prompts.py @@ -0,0 +1,91 @@ + +####### Basic Prompt ######## +topk_prompt1 = '''Output {topk} most severe vulnerabilities.\n''' +topk_prompt2 = '''If no vulnerability is detected, you should only output in this json format {"output_list": []}.\n''' + +####### Auditor Prompt ####### +auditor_prompt = '''You are a smart contract auditor, identify and explain severe vulnerabilities in the provided smart contract. Make sure that they are exploitable in real world and beneficial to attackers. Provide each identified vulnerability with intermediate reasoning and its associated function. Remember, you must provide the entire function code and do not use "...". Make your reasoning comprehensive and detailed. Smart contract code:\n\n''' +auditor_format_constrain = '''\nYou should only output in below json format: +{ + "output_list": [ + { + "function_name": "", + "code": "", + "vulnerability": "", + "reason": "" + }, + { + "function_name": "", + "code": "", + "vulnerability": "", + "reason": "" + } + ] +} +''' + +####### Critic Prompt ####### +critic_zero_shot_prompt = '''Below vulnerabilities and reasoning are likely contain mistakes. As a harsh vulnerability critic, your duty is to scrutinize the function and evaluate the correctness, severity and profitability of given vulnerabilities and associated reasoning with corresponding scores ranging from 0 (lowest) to 9 (highest). Your also need to provide criticism, which must include explanations for your scoring. Make your criticism comprehensive and detailed\n''' +critic_few_shot_prompt = '''Below vulnerabilities and reasoning are likely contain mistakes. As a harsh vulnerability critic, your duty is to scrutinize the function and evaluate the correctness, severity and profitability of given vulnerabilities and associated reasoning with corresponding scores ranging from 0 (lowest) to 9 (highest). Your also need to provide criticism, which must include explanations for your scoring. Make your criticism comprehensive and detailed. Below are three examples:\n +Input: +"function_name": "mintToken", +"code": "function mintToken(address target, uint256 mintedAmount) onlyOwner{ balances[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0,owner,mintedAmount); Transfer(owner,target,mintedAmount); }", +"vulnerability": "Arbitrary Minting". +"reason" +Output: +"function_name": "mintToken", +"criticism": "The reasoning is correct. The owner of the contract can mint arbitrary tokens. This could lead to an arbitrary increase in the token supply, devaluing existing tokens. However, isn't inherently a vulnerability, but rather a design decision that might be questionable. The severity is moderate because it is based on the owner's intention. The profitability is low because an external attacker cannot profit from it.", +"correctness": 7, +"severity": 4, +"profitability": 0 + +Input: +"function_name": "transferFrom", +"code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; transfer(_from, _to, _value); return true;}", +"vulnerability": "Unchecked Transfer", +"reason": "The transferFrom function does not check if the _to address is a valid address before transferring tokens. This allows an attacker to send tokens to an invalid address, resulting in a loss of tokens."" +Output: +"function_name": "transferFrom", +"vulnerability": "Unchecked Transfer", +"criticism": "The reasoning is correct that there is no address check in the transferFrom function. However, the severity and profitability of this vulnerability are very low, because it does not cause severe exploitation and an external attacker cannot profit from this vulnerability." +"correctness": 7, +"severity": 2, +"profitability": 0 + +Input: +"function_name": "approve", +"code": "function approve(address _spender, uint256 _value) returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", +"vulnerability": "Race condition (front-running)", +"reason": "The approve function is vulnerable to front-running because it does not require the spender to have a zero allowance before setting a new one. An attacker can call the approve function and then the transferFrom function before the original transaction is mined." +Output: +"function_name": "approve", +"criticism": "The statement is correct in pointing out that this function does not inherently reset the allowance. However, the function does include a check to ensure that if the allowance is non-zero, the new value must be zero (and vice versa). Therefore, the risk is not as serve as stated, and also not profitable.", +"correctness": 3, +"severity": 0, +"profitability": 0 +''' + +critic_format_constrain = '''\nYou should only output in below json format: +{ + "output_list": [ + { + "function_name": "", + "vulnerability": "", + "criticism": "", + "correctness": <0~9>, + "severity": <0~9>, + "profitability": <0~9>, + }, + { + "function_name": "", + "vulnerability": "", + "criticism": "", + "correctness": <0~9>, + "severity": <0~9>, + "profitability": <0~9>, + } + ] +} +''' + + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..d3aaa90d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: win-64 +openai==1.11.1 +streamlit==1.31.0 +tqdm==4.66.1 +STqdm +# pyautogui +# python-xlib +streamlit_js_eval \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json new file mode 100644 index 00000000..82491755 --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json @@ -0,0 +1,23 @@ +[ + { + "function_name": "transfer", + "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (frozenAccount[msg.sender]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); if(_value > 0){ if(balanceOf[msg.sender] == 0){ addresses[indexes[msg.sender]] = addresses[lastIndex]; indexes[addresses[lastIndex]] = indexes[msg.sender]; indexes[msg.sender] = 0; delete addresses[lastIndex]; lastIndex--; } if(indexes[_to]==0){ lastIndex++; addresses[lastIndex] = _to; indexes[_to] = lastIndex; } } }", + "vulnerability": "Throw deprecated", + "reason": "The contract uses 'throw' to handle errors, which has been deprecated in favor of 'require', 'revert', and 'assert'. Using 'throw' consumes all available gas, which can lead to denial of service and makes the contract less secure and more expensive to use.", + "file_name": "2018-13071.sol" + }, + { + "function_name": "mintToken", + "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); }", + "vulnerability": "Unchecked minting", + "reason": "The 'mintToken' function allows the contract owner to mint an arbitrary amount of tokens to any address without any checks or limits. This can lead to inflation and devaluation of the token, eroding trust in the token's value and potentially leading to financial loss for token holders.", + "file_name": "2018-13071.sol" + }, + { + "function_name": "distributeTokens", + "code": "function distributeTokens(uint startIndex,uint endIndex) onlyOwner returns (uint) { uint distributed = 0; require(startIndex < endIndex); for(uint i = startIndex; i < lastIndex; i++){ address holder = addresses[i+1]; uint reward = balanceOf[holder] * 3 / 100; balanceOf[holder] += reward; distributed += reward; Transfer(0, holder, reward); } totalSupply += distributed; return distributed; }", + "vulnerability": "Integer overflow", + "reason": "The calculation for 'reward' in 'distributeTokens' does not prevent integer overflow. If the balance of 'holder' is large enough, multiplying it by 3 and then dividing by 100 could overflow, resulting in incorrect, potentially small reward amounts. This can be exploited to disrupt the token distribution process.", + "file_name": "2018-13071.sol" + } +] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json new file mode 100644 index 00000000..524c030b --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json @@ -0,0 +1,23 @@ +[ + { + "function_name": "mintToken", + "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner { balanceOf[target] += mintedAmount; Transfer(0, owner, mintedAmount); Transfer(owner, target, mintedAmount); }", + "vulnerability": "Arbitrary minting", + "reason": "The 'mintToken' function allows the contract owner to mint an arbitrary amount of tokens to any address. This can lead to inflation, diluting the value of existing tokens.", + "file_name": "2018-13072.sol" + }, + { + "function_name": "buy", + "code": "function buy() payable { if(isSelling == false) revert(); uint amount = msg.value * buyRate; balanceOf[msg.sender] += amount; balanceOf[owner] -= amount; Transfer(owner, msg.sender, amount); }", + "vulnerability": "Unchecked token transfer", + "reason": "The 'buy' function calculates the amount of tokens to transfer based on the sent Ether and a fixed rate but does not check if the owner has enough tokens to sell, potentially leading to an underflow in the owner's balance.", + "file_name": "2018-13072.sol" + }, + { + "function_name": "transfer", + "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) revert(); if (balanceOf[_to] + _value < balanceOf[_to]) revert(); if (frozenAccount[msg.sender]) revert(); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); }", + "vulnerability": "Reentrancy", + "reason": "Though not directly exploitable for reentrancy in this context as the function does not call an untrusted contract, the pattern of making state changes after calling an external contract (Transfer event in this case) could be risky if the code evolves or is reused without considering reentrancy attacks.", + "file_name": "2018-13072.sol" + } +] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json new file mode 100644 index 00000000..2c3802fc --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json @@ -0,0 +1,23 @@ +[ + { + "function_name": "transfer", + "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (frozenAccount[msg.sender]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); }", + "vulnerability": "reentrancy", + "reason": "This function directly modifies the state without considering the potential for a reentrant attack. A malicious contract could take advantage of the call to 'Transfer' event to re-enter and drain funds in an unexpected manner.", + "file_name": "2018-13073.sol" + }, + { + "function_name": "sell", + "code": "function sell(uint256 amount) { if (balanceOf[msg.sender] < amount ) throw; balanceOf[this] += amount; balanceOf[msg.sender] -= amount; if (!msg.sender.send(amount * sellPrice)) { throw; } else { Transfer(msg.sender, this, amount); } }", + "vulnerability": "DoS with (unexpected) revert", + "reason": "This function uses 'throw' for error handling, which will revert all state changes and consume all provided gas. An attacker can intentionally fail the 'send' function to cause the transaction to fail, leading to a denial of service.", + "file_name": "2018-13073.sol" + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (frozenAccount[_from]) throw; if (balanceOf[_from] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (_value > allowance[_from][msg.sender]) throw; balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; }", + "vulnerability": "Integer overflow", + "reason": "The check 'if (balanceOf[_to] + _value < balanceOf[_to])' is intended to prevent overflow, but it could be bypassed or incorrectly trigger due to the arithmetic properties of unsigned integers in Solidity, leading to unintended behavior.", + "file_name": "2018-13073.sol" + } +] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json new file mode 100644 index 00000000..e726b43e --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json @@ -0,0 +1,23 @@ +[ + { + "function_name": "_transfer", + "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", + "vulnerability": "Integer Overflow and Underflow", + "reason": "The function does not properly validate the input values to prevent overflows and underflows. Although there is a check to ensure that the balance after transfer is greater than before, it does not protect against overflow in the addition operation. This could allow attackers to exploit the contract by manipulating balances.", + "file_name": "2018-13074.sol" + }, + { + "function_name": "mintToken", + "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); }", + "vulnerability": "Arbitrary Minting", + "reason": "This function allows the contract owner to mint an arbitrary amount of tokens to any account. There is no check on the amount being minted, potentially leading to inflation or devaluation of the token by creating tokens out of thin air and transferring them to any account, including the owner's.", + "file_name": "2018-13074.sol" + }, + { + "function_name": "burnFrom", + "code": "function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; }", + "vulnerability": "Unchecked Burn Permissions", + "reason": "The function burns tokens from a user's account with the caller's permission but does not check if the caller is allowed to initiate the burn. This could potentially allow an attacker to burn tokens from another's account without explicit permission, reducing the victim's balance unfairly.", + "file_name": "2018-13074.sol" + } +] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json new file mode 100644 index 00000000..fc2cce48 --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json @@ -0,0 +1,35 @@ +[ + { + "function_name": "transfer", + "vulnerability": "reentrancy", + "criticism": "The criticism of reentrancy vulnerability in the 'transfer' function is misplaced. The function does not make an external call to an untrusted contract but merely emits an event. Reentrancy attacks are primarily a concern when a contract interacts with external contracts in a way that allows control to be handed over to an untrusted contract before all internal state changes are completed. Since the 'Transfer' event does not allow for external code execution, it does not pose a reentrancy risk. Therefore, the reasoning is incorrect, and the severity and profitability of this supposed vulnerability are overestimated.", + "correctness": 1, + "severity": 0, + "profitability": 0, + "reason": "This function directly modifies the state without considering the potential for a reentrant attack. A malicious contract could take advantage of the call to 'Transfer' event to re-enter and drain funds in an unexpected manner.", + "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (frozenAccount[msg.sender]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); }", + "file_name": "2018-13073.sol" + }, + { + "function_name": "sell", + "vulnerability": "DoS with (unexpected) revert", + "criticism": "The reasoning correctly identifies a potential denial of service (DoS) vulnerability due to the use of 'throw' for error handling in the 'sell' function. Using 'throw' reverts all state changes and consumes all gas when a transaction fails, which can indeed be exploited by an attacker to cause a DoS by intentionally failing the 'send' operation. However, the criticism should also note that modern Solidity practices recommend using 'require' for error handling to avoid such issues. The severity is moderate because it can disrupt the contract's functionality, but the profitability is low as it does not directly result in financial gain for the attacker.", + "correctness": 7, + "severity": 5, + "profitability": 1, + "reason": "This function uses 'throw' for error handling, which will revert all state changes and consume all provided gas. An attacker can intentionally fail the 'send' function to cause the transaction to fail, leading to a denial of service.", + "code": "function sell(uint256 amount) { if (balanceOf[msg.sender] < amount ) throw; balanceOf[this] += amount; balanceOf[msg.sender] -= amount; if (!msg.sender.send(amount * sellPrice)) { throw; } else { Transfer(msg.sender, this, amount); } }", + "file_name": "2018-13073.sol" + }, + { + "function_name": "transferFrom", + "vulnerability": "Integer overflow", + "criticism": "The criticism regarding the integer overflow vulnerability due to the check 'if (balanceOf[_to] + _value < balanceOf[_to])' is partially correct. This check is indeed intended to prevent overflow, and while Solidity's unsigned integers are prone to overflow, the condition described is actually a safeguard against it. The reasoning seems to misunderstand the nature of the check, which is correctly implemented to catch overflows. However, the overall concern for integer overflow is valid in the context of Solidity contracts. The correctness of identifying an overflow risk is appreciated, but the specific criticism of the check is misplaced. The severity of potential overflow issues is high due to the unpredictable behavior they can cause, but the profitability depends on the specific context and whether an attacker can exploit such a vulnerability for gain.", + "correctness": 5, + "severity": 7, + "profitability": 4, + "reason": "The check 'if (balanceOf[_to] + _value < balanceOf[_to])' is intended to prevent overflow, but it could be bypassed or incorrectly trigger due to the arithmetic properties of unsigned integers in Solidity, leading to unintended behavior.", + "code": "function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (frozenAccount[_from]) throw; if (balanceOf[_from] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (_value > allowance[_from][msg.sender]) throw; balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; }", + "file_name": "2018-13073.sol" + } +] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json new file mode 100644 index 00000000..de2f619e --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json @@ -0,0 +1,35 @@ +[ + { + "function_name": "_transfer", + "vulnerability": "Integer Overflow and Underflow", + "criticism": "The criticism of the function not validating input values to prevent overflows and underflows is partially correct. The function does include checks to ensure that the balance is sufficient and that the transfer does not result in an overflow for the recipient's balance. However, the specific mention of overflow in the addition operation is misleading because the 'require' statement that checks if the recipient's new balance is greater than the old balance indirectly prevents overflow. Solidity's 'require' statements are effective in preventing such vulnerabilities if correctly implemented. The severity is overestimated because the function's checks mitigate the risk of overflow and underflow to a significant extent. The profitability of exploiting such a vulnerability, if it existed, would be high, but given the safeguards in place, the actual risk is low.", + "correctness": 5, + "severity": 3, + "profitability": 2, + "reason": "The function does not properly validate the input values to prevent overflows and underflows. Although there is a check to ensure that the balance after transfer is greater than before, it does not protect against overflow in the addition operation. This could allow attackers to exploit the contract by manipulating balances.", + "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", + "file_name": "2018-13074.sol" + }, + { + "function_name": "mintToken", + "vulnerability": "Arbitrary Minting", + "criticism": "The criticism is valid in highlighting the potential for arbitrary minting by the contract owner, which could indeed lead to inflation or devaluation of the token. This design choice places a significant amount of trust in the contract owner and could be seen as a vulnerability if the intention was to create a decentralized system. However, the severity of this issue depends largely on the governance model of the contract and whether such control by the owner is within the expected use case. The profitability for the owner could be high if the minted tokens are sold or used to manipulate the market, but this does not constitute a vulnerability in the traditional sense where an external attacker benefits. Therefore, the profitability score is adjusted to reflect this.", + "correctness": 8, + "severity": 6, + "profitability": 3, + "reason": "This function allows the contract owner to mint an arbitrary amount of tokens to any account. There is no check on the amount being minted, potentially leading to inflation or devaluation of the token by creating tokens out of thin air and transferring them to any account, including the owner's.", + "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); }", + "file_name": "2018-13074.sol" + }, + { + "function_name": "burnFrom", + "vulnerability": "Unchecked Burn Permissions", + "criticism": "The reasoning provided is incorrect. The function does check if the caller is allowed to initiate the burn through the 'require' statement that ensures the value to be burned is less than or equal to the allowance the '_from' account has given to the caller. This mechanism is designed to prevent unauthorized burning of tokens. The criticism fails to recognize the role of allowances in ERC-20 token contracts, which are a standard way to manage permissions for token operations like burning. Therefore, the identified 'vulnerability' is not a vulnerability but rather a misunderstanding of how ERC-20 token allowances work. The severity and profitability of exploiting such a non-existent vulnerability are both non-applicable.", + "correctness": 1, + "severity": 0, + "profitability": 0, + "reason": "The function burns tokens from a user's account with the caller's permission but does not check if the caller is allowed to initiate the burn. This could potentially allow an attacker to burn tokens from another's account without explicit permission, reducing the victim's balance unfairly.", + "code": "function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; }", + "file_name": "2018-13074.sol" + } +] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json new file mode 100644 index 00000000..6dfa6dc5 --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json @@ -0,0 +1,38 @@ +[ + { + "function_name": "transferFrom", + "vulnerability": "Integer overflow", + "criticism": "The criticism regarding the integer overflow vulnerability due to the check 'if (balanceOf[_to] + _value < balanceOf[_to])' is partially correct. This check is indeed intended to prevent overflow, and while Solidity's unsigned integers are prone to overflow, the condition described is actually a safeguard against it. The reasoning seems to misunderstand the nature of the check, which is correctly implemented to catch overflows. However, the overall concern for integer overflow is valid in the context of Solidity contracts. The correctness of identifying an overflow risk is appreciated, but the specific criticism of the check is misplaced. The severity of potential overflow issues is high due to the unpredictable behavior they can cause, but the profitability depends on the specific context and whether an attacker can exploit such a vulnerability for gain.", + "correctness": 5, + "severity": 7, + "profitability": 4, + "reason": "The check 'if (balanceOf[_to] + _value < balanceOf[_to])' is intended to prevent overflow, but it could be bypassed or incorrectly trigger due to the arithmetic properties of unsigned integers in Solidity, leading to unintended behavior.", + "code": "function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (frozenAccount[_from]) throw; if (balanceOf[_from] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (_value > allowance[_from][msg.sender]) throw; balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; }", + "file_name": "2018-13073.sol", + "final_score": 5.25 + }, + { + "function_name": "sell", + "vulnerability": "DoS with (unexpected) revert", + "criticism": "The reasoning correctly identifies a potential denial of service (DoS) vulnerability due to the use of 'throw' for error handling in the 'sell' function. Using 'throw' reverts all state changes and consumes all gas when a transaction fails, which can indeed be exploited by an attacker to cause a DoS by intentionally failing the 'send' operation. However, the criticism should also note that modern Solidity practices recommend using 'require' for error handling to avoid such issues. The severity is moderate because it can disrupt the contract's functionality, but the profitability is low as it does not directly result in financial gain for the attacker.", + "correctness": 7, + "severity": 5, + "profitability": 1, + "reason": "This function uses 'throw' for error handling, which will revert all state changes and consume all provided gas. An attacker can intentionally fail the 'send' function to cause the transaction to fail, leading to a denial of service.", + "code": "function sell(uint256 amount) { if (balanceOf[msg.sender] < amount ) throw; balanceOf[this] += amount; balanceOf[msg.sender] -= amount; if (!msg.sender.send(amount * sellPrice)) { throw; } else { Transfer(msg.sender, this, amount); } }", + "file_name": "2018-13073.sol", + "final_score": 5.0 + }, + { + "function_name": "transfer", + "vulnerability": "reentrancy", + "criticism": "The criticism of reentrancy vulnerability in the 'transfer' function is misplaced. The function does not make an external call to an untrusted contract but merely emits an event. Reentrancy attacks are primarily a concern when a contract interacts with external contracts in a way that allows control to be handed over to an untrusted contract before all internal state changes are completed. Since the 'Transfer' event does not allow for external code execution, it does not pose a reentrancy risk. Therefore, the reasoning is incorrect, and the severity and profitability of this supposed vulnerability are overestimated.", + "correctness": 1, + "severity": 0, + "profitability": 0, + "reason": "This function directly modifies the state without considering the potential for a reentrant attack. A malicious contract could take advantage of the call to 'Transfer' event to re-enter and drain funds in an unexpected manner.", + "code": "function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (frozenAccount[msg.sender]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); }", + "file_name": "2018-13073.sol", + "final_score": 0.5 + } +] \ No newline at end of file diff --git a/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json new file mode 100644 index 00000000..f2aecd76 --- /dev/null +++ b/results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json @@ -0,0 +1,38 @@ +[ + { + "function_name": "mintToken", + "vulnerability": "Arbitrary Minting", + "criticism": "The criticism is valid in highlighting the potential for arbitrary minting by the contract owner, which could indeed lead to inflation or devaluation of the token. This design choice places a significant amount of trust in the contract owner and could be seen as a vulnerability if the intention was to create a decentralized system. However, the severity of this issue depends largely on the governance model of the contract and whether such control by the owner is within the expected use case. The profitability for the owner could be high if the minted tokens are sold or used to manipulate the market, but this does not constitute a vulnerability in the traditional sense where an external attacker benefits. Therefore, the profitability score is adjusted to reflect this.", + "correctness": 8, + "severity": 6, + "profitability": 3, + "reason": "This function allows the contract owner to mint an arbitrary amount of tokens to any account. There is no check on the amount being minted, potentially leading to inflation or devaluation of the token by creating tokens out of thin air and transferring them to any account, including the owner's.", + "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); }", + "file_name": "2018-13074.sol", + "final_score": 6.25 + }, + { + "function_name": "_transfer", + "vulnerability": "Integer Overflow and Underflow", + "criticism": "The criticism of the function not validating input values to prevent overflows and underflows is partially correct. The function does include checks to ensure that the balance is sufficient and that the transfer does not result in an overflow for the recipient's balance. However, the specific mention of overflow in the addition operation is misleading because the 'require' statement that checks if the recipient's new balance is greater than the old balance indirectly prevents overflow. Solidity's 'require' statements are effective in preventing such vulnerabilities if correctly implemented. The severity is overestimated because the function's checks mitigate the risk of overflow and underflow to a significant extent. The profitability of exploiting such a vulnerability, if it existed, would be high, but given the safeguards in place, the actual risk is low.", + "correctness": 5, + "severity": 3, + "profitability": 2, + "reason": "The function does not properly validate the input values to prevent overflows and underflows. Although there is a check to ensure that the balance after transfer is greater than before, it does not protect against overflow in the addition operation. This could allow attackers to exploit the contract by manipulating balances.", + "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", + "file_name": "2018-13074.sol", + "final_score": 3.75 + }, + { + "function_name": "burnFrom", + "vulnerability": "Unchecked Burn Permissions", + "criticism": "The reasoning provided is incorrect. The function does check if the caller is allowed to initiate the burn through the 'require' statement that ensures the value to be burned is less than or equal to the allowance the '_from' account has given to the caller. This mechanism is designed to prevent unauthorized burning of tokens. The criticism fails to recognize the role of allowances in ERC-20 token contracts, which are a standard way to manage permissions for token operations like burning. Therefore, the identified 'vulnerability' is not a vulnerability but rather a misunderstanding of how ERC-20 token allowances work. The severity and profitability of exploiting such a non-existent vulnerability are both non-applicable.", + "correctness": 1, + "severity": 0, + "profitability": 0, + "reason": "The function burns tokens from a user's account with the caller's permission but does not check if the caller is allowed to initiate the burn. This could potentially allow an attacker to burn tokens from another's account without explicit permission, reducing the victim's balance unfairly.", + "code": "function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; }", + "file_name": "2018-13074.sol", + "final_score": 0.5 + } +] \ No newline at end of file diff --git a/src/CS8903_Aditya_PAL_GPTLens_Demo.pdf b/src/CS8903_Aditya_PAL_GPTLens_Demo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bfec0a0514af0c4675089ba48e61830a1b97da90 GIT binary patch literal 797910 zcmbrm2UwHK);9cv(2dlfM2ZLqq4(ZG389k&P()EMbdg>JR61&;7@B~T(2ErXdqL^a zAu58PND~Abs2l4)Ptd*3yU#x7df)HIE0Qqt%&fKUb+1{|vYlvQsidZ?vyppyGx*ua zttO!=5xhTOBe$WUigQeew~D!EglAx|uL{xA*E?K79TbyQ>^y^fvED&)5-Ls+VUd&w z=P++?a&T~jgq}9D+%YmD&_4)N*U@Euw)YG>U>)QW4BCX>dV5KL$GnY=RqVYZJiR~% z5;{8TPww#dj`j{ChI#vVhj|B4;3jl*;5LknH*$Lic`-$Uh4>#bGG$XS4~`6qkWkZ6 zvGw-~-z}j5KPI8ZlvqMtlle)V*_MRHdYJ~ZPYDe@W|`)CO--%!PfW=rv|xLXCA8Kb z&{}_7d;O2v>wnZx01BS`y4Aftm1!A_z_qo)O-lh~T6xv2H7Zlb!@qbWp=GI0$~uQcZ#>qKc)ugqkWW zIw&KC1yh{7BX+9*tW})74@ImuZ?^u+eEpX-EIGi#%iq&1_|R_fsH%jHx~hbxs+PM1 zFl|r-kU3m}X+{-7Sa4(r=#J?i%nvF~D$Ze^LE#~=Zj=}mb0-xG?zeU`~vQy3yWat~$Y{5s7fwxT#xcTb1q(yAzxeETEi%1b(HEBzaL;toX^ zWWU^-Av1e@??HO8Y#Ftkpq%pIkOK zP#I{3bWQ!HvQt0VPKMp+VKVTy?SGRI_R-(KG5z6}7ppi$?vH>22-BBUcKUk({M58G zv{kIU{eAr+By_bkfnNm%hdG6KQoR3i7Zo%Ah;X8Jn0fHQkl-MgDY`1ZJi@}<`IkRf z1Ahz)35Gp{8B2aUh?b6~I@7Oyi}`c(=L?9>#?smnLLd;32lxm5oPyl&hx~mY$le~3 zhaiX(VnZSzHt-GsUN%T1^Edn+BJr)ihd+?`Ay)7Uyya;n3HZ9D zhd9~UIoR1aIXF1DxH!2{=#8ii8&DVlL0+`jmaXDqTSP@Aq?KhQBo(DZMX@?^imGaw znwnc>^^A1Y4V5)C)!{}ETwGkJ4JhG_8->-kiEdN>KmYt}f%rL*9_$bjAqlbYBar-v zpKZ`qASoNL1Z<37KL{2iD;qlpCl~hyP@$O*VnHC0EUZX2Hddf6;s_{*SozrmwyBx2 z3z9rJBty~aiL`P~DYM4=Lgb-$(i;22lDN1xZ5GCC*)AiCm6O-h($>+{(>J%kTN13S zZJeB4cIK)h2&>t+or}YU`pcf3>B1APvk_K(aIa|b4h8C z-wEvx8{*z1tvR**J**m2v;Uo9N&iop{i)brdW}IS;Fv7@NPfr!`mhCCafkAd8(Wd^ z-(MHbv>X-6Y5yUAb>!XAhh=wehJI5^?)p+%mLW5|lVW|%EB4;~eH)Z>YT_T5#&Lb! zTcN$1#dyZ}-aDx;h`smisKWF#-TfJ4U4}eX6e|kJ^*%g#<2aJ>q)<=KW@)utNXU!z zh2R3|zV7v`*d+GQJ}XWssZ;(T9HwNVvr0(4VMw0zJu`joQ~LSx!kfeh)dontb_o6C z;PHOT5DjyEdXFly#@^sOL|}bzD22+&(O55cu4l_8Lo7yX$8%EJ%U~sQdtc{{Iiw+Kki}MlsvX9~t&wO!=Gwm#N@&&9{LvIaXDQ#z9h5Gz zI|MTjKy%+`;3^stYMWR*T?Dyh`djcdr3j!S&~uSwq$*~iD0*)b#PE23HZh^qaHQ^) zT*Kltwk3;%QKdKc=$R`B8z03xPW6b4-L8c>fA#I2i^J&bs?!~ z(}PaOIqK-F98#K1DGBNhP`Ru68#1R+J4D#{pm!Lm3JeteT<_N+#-Q5hej?lT$%Lh0f`s;rQl7_b{J9?Fyu$iAyZ7RdH>zKxf6_z<-G2FUn`9DV zDZovY!_=N9z1^IpwQj%$qC8U!@8l=ju1e8?NK6PYK2U5CB$gzlhG`ia=f>M@O`(tI^!v_NL=lWZ76#Gb%Gm>t`{@H>$`#2HzVmbXfh zF4oi8WT7%s(s;kJqySbzaFCIZq^`e(2))8Wb){3}scrIM6TAVjUFp3IEtfxv=U&J3 z12?$vRmxYQq*51cctW`65~(=cfzFPX$lo5x%3?6GaG__5hBz8kbpBu+K3q1xJnv@u zXFAv2!F&E6RHG?+okB`7?BSXIm`7?i61rRZAnD7TmA-*fgaFrP)?2Rka}H>}X^H@L zx7BZMHA6hBl+Bb|T%49~nI0}lEPk25?KON(tq|Z>t)MT5C}4?2PL@154@q8%KFP>Hpb>^E=WoY76VS+Hv*N)S zH-)qs^7%<4vP0M)B|Q4I!p%B8^JE%XLE*xzMDjE83myjK?BsBXO_A$ah^pMzCrA5Q zLzf*|jPMYetieX^4dEdBv8u9)CJzp>hU`)NdNoPASd^N73exAce|^tq>K3LQQs4D> zQ--VPjg}U`2P6DW0N*3i!`ZP2oM29ZW3@UaKjIlZu{cal>5agg(!xkNN3(5$J~t#U zr!1hCEy**#km$%${VyjrqvEcxobEWgT-ym6``ZR5Dn;v~S%52~@3Zxys^nTmax zSK=g6fGS3Pu8n+++nCWtJDdI@eZ`>??mxYfy|WrpbvPd~m=KNao~Gu5u-K`YzIYC% zBF7y_+drSP=aMw9O>D_S;b=@X;34#h&Qg&%FF!jMEgI@X=Hn%qdNl0Hgcj`q^lT6Mg&Sy1(?zHFTKK|v&3^$9v`J3N ztg4WQ-N5Pdh3{w5rp8L(_`FS*^^5c7owPBmGM6kJ{WUJ-#>rm0>2mf2PTAcligXZI z$wL4_zeq)ARYmxD{_=^ z2M-VghB%PAJN1}<4{E;I$ldkSIW94rk=!WYAXH=ZQuk?>G`62j0Ui}GA8Uz7$y4?M zT?j;4i2v%7NUHksgSv*tV<|h;(Zu^q3LYK47w|#*>XNTfLx3G>UUXQaffA0$Ni1E3 zo>ucc80NDg6?2E_9(vT$B4s#o^J66}fo*Esu@t$7={aMi7cQuu$>$ao^E=M+ zb#ky~CMC#TzrH&H#T?;GyEq4b(j7J>BZDk z{D!K}Y6lq?6Y>v##Q#8l^cAxzd z8JXIrguUWh{ZrLlv;7`g-OByQenwHoS}IgZd8C*pt@?s_9iG^LMj=|NtE42d+%h@S z)s~e9`okE|Y?>ym$^|iA|FL$6WVn4k(@`y9-;~%!NZ*xGsNGe5TJL`CD%#0Cx>DJy zs{;)FVywrzCWJj68MtdH&8_I2 zDntnm$WP#w%P!B>#PK^oTUFhop%Fp0`S7Z}fEEl1aqloHsOLGLqD; z7!r|HX?ixNi8jSq0ol|{zurc54!N?IVtB|Jq-In0jdd>lA#$WB$qUvk9geY)kdWCC zCE4rhZ>3BQx#T9CZ|#{=Lm4j^au+4=JIkkvK`r!zmgK>Yb@Rvj_;E`qKOupS^=MCA ze+U-QXmP5h>q$T+h?VQD8i8#lm{CEW9%|KS5#4?R?d4bhdT3%sFDL^Nx1~E{U`2(N6pKbHqXsjnYH8v}n1-jk*vWF&HA}&-sv6>_uc@__O*;Sv4T9O&T|y zvhX~aRPV7RHo&QNVeQr$7+d`llfCc070r z0OC?+n|UBhBL?~?6tj+LbzSZ8zD@U~WQ}&7hpcek@|LE;nxikRC|p~XNrO%aEiAwU zo=hBd>RL3r=xWw5y5cFT^>t9qO~vD+H0N}FyHY{*IstXhD|v6pgGkaQP0nO)eeOsh zv}!^0oaK>D6P*BPpQMRF|CnJfCDIyiuF39`egdOiJmu&HdCwM2&{^}mU->`2diKDk zc0K8tqS8z-$R0o)P_RLB1aW<=N)qH2QrDP0(c|0%Ic+~7W1o%nHp)OXh)GE8tt|?Hgq?!TTo*E4KV`AcFR(Rb7LS+?H$0; zPEJWJZmw<+A{4g=ZP}-G+%w}&Dx`Rdpip^}rTepEwKblg>ElY}kSm=AKv-Jx#(I&Y zzEWg@kyn)7jev%!RE0N0Z9%c(jZTEj@iaGbE0POjj#RskVHl zy3v?QJ!E$uN6R_jJNp*L8?lR@*5Q)ISsy+J8E|{x}+(lpyO>oAfIrw z4~(taf)f$p60DfNymM}>XOMBl%-gSvmg5QNmY*Qee08_$Rk?0iX~t@b7eDDff2#Ir z-+8?N$R$ZDubLS*0V-Yz-I`%s7_)dz!!6L^M(OU$c+}mrVz6v5NFG*wR^^Kk^Fst^ zrs+;hpxMLojhjsQ(n+UXAA(n+^`8 z$+<^&JmlJw?iE#)rh&Fe?RjxznlZ>`Yp->%Mt!qlERVj+qP&Xq_u9S{5#f%026Wk6 zwA!}Lz=6 za&Z1aR+Qe;beF+2A8C%3SgrXnGyx;lEw17Qs2L-%P`@A@rp}>5P>0TRb7WZV>fD zchIA-_Fb`Cj-0Rq`+Cc=V8x@wPjy+f_H9B%Q`O`&%-arZ54iIv}z7)rZbpOVwe{EMV5P*nLNckW9MOF8S_Y}25Vq-1!)nk9rGB1c;U z2_M^;izb1Y#D91RZNGE-NwnJT-5p*019NMH?v5W%tMVzLw3?2C^BA!PH*R~K;nJXq8*6F~Nlu!k4}}IOFrOXgJr5U0u3cF$EjXEXlH!s6 zW*PVtUY(%U(T~2$VQS$xXL+&d0>K=IN*-AIwtVO4o>*swvt(G1o$+oD)SG482Az@{ zhUc#j^p)A)!NEnd>}uqcne5=P^IxDTTfr> z85k&SlAgUFuA-Fo{N++W03;`3;4pdpWo4-o3jbhprzaVi$06KBXE&W&Gw<*C@dt=r zl?C03CmK%&hfgN3uiPEJ6}6_jb_b;Uq&;>Xc#rfo-4;5>-Q|ocB8?sX+g1##S3>XI zm20IHfy_qb`H|W`4wu}^^h={CSaGW_1%^+8C|{^kIIEMF@%@T@5d}zG6>`>y`8x7& z{F;fjzeU@#CIb=3HyTcN4V=S!X4>}11xBG~4!%FjpPv5W6P#zc_O zNW!400nk>RiM`&>bG^qx!P=4I^X~w=;-h-?b#*?)4~7y&w5Kx-h{)L$!A?!jOTHp!^47LHGsfco0>l$((8z)FqFKal}f+t7{#GsR0FwM?GF?EPkH_h?MF(5%zA$v&lD_f@8fK zU$`~zn$OY03hZxR1fyuLZ0&DVeXCxV!Vc z?|JF)wVduv9U=y_`*0cwbK@-~oe{0^z0~L{W~~G5OrJIVh=#fhpJQW2pFbDcE`-up zyKHp}6D8{Pna*Y$J;tuR<~sjGOG#*B+Yg*m*?e~PD{RvFaiW0V* zxw`Qu6es$!#L59-oF{gB^04<+^%X!hiu z@rg*#4zcuT)Ei_XkO{9%cq(GdHKvhhpSDk5D97KuwVcj+tiNaNR%qF2@jN9V-m)Kg zGfP2*6JrURf(_Kxc8A^qP}<@NhIj3hWQNBHri?+>W4hDl@xk-U!6rdV0J{h{VkW7B zbx|;lKi$7V`S59JV4w(J7CBBJyP@@ee zNG11uxOXIDZJ9ho?9|Klm-_HDD%xlx#5@1JT>Btkk?(nXJl?Pa{fzJ4?^p-$9PwN+ z%v))ki|({JG~)vpowD{5@)sVTnJ(Ki+^UvW#fFK})&nyJgx%@*T$pvU1LxIadJRHF zi~*6H8Bo`?wF7gMqk8QiH|0vdf5LK)D2TBLK;A3Y9(Ib~sQ0U@F6fjF;6D=s&#ZTS zdyZYxT`}+}1_1ssks0bx1uye6tmk9i-V4slIxXgxL{Z;_b>a|)Awd5KKK->gXdvE3 ze1A@-c!$AH=y-&X5+u>j9{ahvDrzjXv6v^fYrBSpXt~`dO=$G?Pe|Pnrc(i6e9?a8 zO-kven2Av$!lb16aLJ7Uz14cZnl7*&dS4gQ@)pNaM_;-0BkK8`4`8)YaE+#rr*Peu zqZ!QS(t-`-W~N2%27V#Umo=>!@1|fT#%ky+$s<&+Vc~LL?%jT`42CO%Gj_9j`LZWq zI7%+9jYs>Y!-3XX?ZB~<6sYoTlqQtD_9O7<-sdVN#sLBHdb6tQ(GvR9KazRn$e!;;gzBEYax5p1x`bq!eJ%o9z5TDHF+MY(_e4w$xR+fVKe>{tpd@^0&3 zMe&!(3JXc-L4*IBlw{vf#F>m}*X9u=!rLHG(3(qQyn{Gl2HkJdNs&wfHJS+9&-N=D%#=B zv&c7_@towJ){X%&zK&ZhS z>k-Cl<3>?87k5o{L5~JWUT5u?YJ8j^dd2dCW&m^9`iozN(9;JAeT*+7b%^YTr!FiA zWBb*?GFgT+XeKQ@*#Ru)5k!X`_SUuJ=>`X67to{w+tDl&R$x|CW33qqd3oH>#ng`M z)yxrLX!BV5As8TCQ`f6J9o50%f4_D_Kr_n#t?b|+Z_?c2^WpaWd&3FR*?uqO#S#=l zj21vgqDhN9BeYV+A|yw%$&qfFe+jUpDKm(b7uX>E%9u*)P1+uqyRSah%Vh`{ zoV}dXGx&vwT;PHPVtK&gCW~q;2+d(t^>?*VcPq;5EnJ@jU|m+xi;!oLntYpUu;(ec z)z&Q-)>L?Er+uJ+-dXU%w;HnQ6|z-p5wn*LQ>+u?abDGA$?l}3?buqvd2&lCjwLgJ zh^#M-I2xUIJ*J=^jLri}h65UY&(nPpw%SL#4&ExpF8VXlsf#WN^0CP{&dkdak$PnH zjrufa$y8FR7@HELYLCfn6Ang7J1rz>3Sd~6$v9FvZ=2Z%RTnYqS{6>$2qQVMO?df5 zj3dQd9WOq&%>@rs-c=d1MayGXY?h7HZ`g_(C2#51p(Y&9L&k-Q_1rQ^6S@HM(XjoqDKO^cv7)OxMg<5nhnfDNTB zn-ZILzpD=r&?}sv{8lOXpsw!6+7a?ExUdLDw@jwCOBB@DBHk=~E1_?ei~UDIy_;s( z2CQ_1bOfD)=)mq6fL+8QX!fE#H?>hWI`GCt$7$)3sp1JvU~OH~U$RmaHNkP-xQJru z(QfKFNEd%dvE?=B6Y%TcHarJV^{Vno zhg7Yi5mHRU4-rh%ZTBtZ*LVsR@92)oEA#m zVoH66?g@j`@`$#zfVA>Fw|-G1h;HNy^!mk(ko+ZYRIS8nbrpn#P>5lG_^wKSH;I;; zAI0;wt6H4g7D88BJmS9!b#J%IIh-zZ#9o&VCske*v1{{zI?q@BVob;?61Kv&pKwX^ z()C=hM!k2qk&#R}FW+&z_aS}L3~dsW=le|&y*%i}sF8(i%j^U(ute4e8H1&Fc7kSD zK4;6at})}weoI<53D*sHb_7zlt~_2Bg$!+hQR~PSQl>BKVU``hL`HO|mn$O~3JG;w zlsmD-f)mfpD~pD{Pmw40hlUvyE2m%g^c!ViZQ#~27!r3oxE7jc`EI4BkILLz=a@*f0Vl#A>p+Z2T}GW%PqTLNa`1Kj&xQgbd3+QYrweng&GQ_i>J}}DeiUU z1Ug_GYUtcqeh;xUT}(2tDrKAiO(yZqM}}oSpmHR=2v%D=a)uDdqhMrT9MRiHsDVAP`x0 zh3Q#TNMo-GtB(JDcO82bCT6{>V%mjcFGxrAUkd6+3$%#yuYt$DQZz+ zwqZKk=s>>_;u20`2jZmHd{I92gvE2e{k?|gLJS5G(k#|eVZGX-2?mTN=kODD7G}7k zZG%V^2_5ZaVO_ATJF>L*QOS&lEy}}X_8DK0USK%LwJhFolx%<2QtLT5cv7{b=aO34 zO(S_XNbbU|q1%q04&4dDw+MaJt2eGl^ZAXRfNEJk^(XTV5jh=pL|G zr-}@_5)_!29tD!%T0y?MworKg5iDX@B3s)GY&7BdC8%0Bu(e}vOoa?~*esAY&}W}` z9DMrLjZd*PzPM%P+jV#izi#fh;|9yNgx0#M0=r#?H4qZa+pFp96)73SF!cTs(*+Vv z#`V1hdmz~HhfW06hpn(5?A61(tf?rc`D$2FJft}0!0xS58_P>U5dp*-dAx`-uPN2d zvVY{-1zoV%u>YECbvDjgIflIi%C%r^+x!M^jbroOH)hn=e6LxZ=tkx^IqeIzwd5W1Tp(9va$NYkxx z*zQqk+wkJs)7APgaI!!f+eT9K$VO9S%Eoe}7|z5Px=Hb3*mGqAZfL+=-ZV<|`lv|s zodaaASSpnycj((SBK_M_Fa;^)H&lXAksG3CYT?4rl%hRZBvV6CesGv6Rq2tkxJRc7 zBdX$gAAtC*b}aR@6gW@9*vY5Vws*GxdpONnB6k2oAPIkM`OFjq@<1%u+V77Nt77j& zcNyLnI8kW(Su#OD#5--5sD{A2tV~T+*GD12n0tO^7rpx`(M^2uvRHs!7Rf#*G$ToMVkip&))NE%E4#(+8lrlDW~% z{-Jyy5gyBpGBRIxEWe(ae)GA{o(7UIzhzR-?Y0Lph_8aS;uZm7iGg9jRFiDi%o?nF zHqBMTk_fEb^9$?0OWKNki(|doquJQCE781#ohha04~m6_a>Mr%boRZw&zubx*468( z)BL)*S$SA>`}LNy4M$1W0c5~pxDCWRH}5>KbDbq1oB2;z3~!FaIzBX#XBOGhSZS99 zaGsg+dfy(K&fGi;CiTuYz;-u=Rg!aumUQAXMsA^aMa9WJo*$HYCVQdr`kR6?Z#G;L z1H128B$DG?NvTs^>*1%XbdDb3BAN7TB+852k)-b;P3{ag3)x5?1%)oAp}S zmA1jiXY#61+WOC}8G=Iy0#J@M)@S>dVmzb#O2`i`wNZBZ^KSdCv00;qA&P7%%%SS4AA223Q>) z+}9T=0k7jQMX9l02Rji7^`hR(q938x%`Q|(7<*3E zz=9wW*p#%ovG=VuX3AZ9%U72Nm`P+Yhf<5vD7WWJA1T4zTb)_nmV7ZMlW-Vps(m-M zEo`G*UcJwLVZ40?N1HbwxB*C=yr1p&6oLMDQ3M^qv$8-f8rsvPzsP<#3~#`UJmi+` z**c1?o?Xa062N_|BjLbY#EeSA{4{E2yy^oB#qzI$j%H?1+on!UsB0VFHe&nb@IKfz zYjlciV!$D} zwJXnv$hmZTK}!(v)!~yEbuiwru2!9_M99)qyg832Ptu*k*PR;P={A_$$9Z_3{B&A~ z={j|_DUSRZC!o*hrxqQqy+P$1lN@*8un4(~l@mO{0Bj<6AG1ulKgaoAL+&u_Qsd{G ztR?o_m6#gIGoy~qnNKP5uV)b}JZp58mlHvJ3Tnc7FBo(X zw^Ynn*!xDQu7tVtR(JZL`{&k){vZ&qy7MpK|Q=`pW&q zCuXnY8A+9#nJ=qnK4Oj^UdPD`y=`3FS7TG;X=e zR*jbZ^W2p($0xip+#Ouf@LmDxTzg&izZdS(g}@=#y0-UC%bX_q=`<>2?H!S=<$99c zkTzCbQK;F?>SN7=j?|@dh$D2tsemlSxKa(wfH_%#o!DBA0cpImqr$oO^y8PW?Oc*0 zADY~G!ogiX-8mO>a;H|Ry0`H_Z|#c?y|DivDyO?Z28%r`y3+ppQSWmp-{7+))R%fC zk9cfEb$m%!G9o^K{pW1i88q(Zwe+1lP@xFHL>0f8%WJEZc!!U_>V zJmK}#`s70csQ(A!(ldhbTg7?*`!C_mAC0C^4av=(Lxfms-%Nq>{tco$@-|R_Kvz|| zfS!2nqP(t;^~hmgh2jW0d)0*}yqFV7JXxb4A#w~A4XX+a8Tf38g-Quj$!-ko*gGoC zTAoX|Yr)pa%0+q=DFYmwx--UW$MJ@XmPQLhb~zp58hKzo2gxg(*t?xf!*Jpz*cW zR~YQfYF@=k-kTyyXWom#Vom8j=Y45^pgX_ip;zttwy6`om3lM?co4yEA@ zszwt(p$Coh!H){*flZMdx4zx$Z`%JZV;u4+#dgwrwv_qr-M#I@{UCD{YP0OuH0)1k z!tN)eU-M3YmQadPF%^#A{7-z^aw5Za(sV>{c>({$*5u}=IYx| zS@V|ge|t}V+OX{>qmam@}%ZS(!h@+5s>-P1PiP)~0{f-%jrgOeU#)?<2S$wl zY{UA~2B}|a|JmG~fqC0o-!DGCqp`Fpo+&uG%=2=;aW_x_eT4LxHy}$B?(XmM=lrhz zOV7F$`{&C?n}R-@l*I1)Q=I>xfWJ;$SwHAedspXE*lLt-|DmEE3tUV`oRV_k_`;=Z?@{fM~rZ}t9kgx?l90~>fFY~a7( zC;hXNyom)`sQd-^fAgg)6fYAdrX~+g|2Exk(R@TQYgZ~^{9}FpGM#a&_b=@KMTgSb zm1?F<3jY+z@zPV?wFuzBS??+rv#!UvjQ)b+Cv@QBMZ147n8%f$P??p<+tJ_kj9|#l zFn#VmU_$)X z*8dhz;-9oFK9UVQ*yI7THPW2-Ke*;!Jo{CNNr#DbI_%oYGy`?t->9_|Qwr001MG7E zt^cFXQH}5a8xB4q|L9A9^SLZdSg?N}&ffzB)8&{-{707~6uyB0sG1mXS_9!Gtw;B( zG&30eH|h`nxc}dr4(I?v>HqW*+0npz|1*$;f*yyNo&T#ZfqKWj-TYS`7BSnZjNTge zzjwNUOHbD^`$u9kJ6&%O_}!_W&}rCre?r{<0pNeIG~tK)dVKjSE*d%hQ^5O04A3}p z7$6kEflTCY(Sq$A4~~IXvM$4x`~O3s|A5_}E&m!+ zdavF1ry*+7x(EKnNH73oOwO-dwEfEVANft1gUR-P58b~<+8^k9{}zB$L8t#Y6#Ql7 ze*(?p@>XVC`D>tM^5}mRx~<_D1pN7TG;9BVrjhTh@0Dx+7V|uR#k{{{i-V)AJBYW< z3uS+rq3VCQ^{)g(bE0$df9-qg3B$chzhd9N^QiJyP=59!av|RH@-ILChhg*=+x|WX z-TyT#{0hrEDShzRo$>FA>{HrV z+2e1f`|i-526BD{r#yc`30aJcV=_grOygC+LHF@X8n3Av5RAk!CtH$zP)_divfLSu zCtT00a8j&ZL`q zR~CeX;BXQW#mD)%ZYFU%P3%gp9(+3PcZ3lW}^it=s09Ve*UA4BJ2Nw9{z zK57O*FK9V~WQJoi+HY+yLsidSC$(g?6x#h);OY&sWhbV zxDchlYNpvg^xA>voE3@--s*_nINCK(&1N16eGkwGN}KZ4n`GxO1P8w1n>=V1&MrOl zQz@`M`m_}#N)p|VeY9DZlvo6Xxa>_peIZ>B8mE=n4KpMs*t*L~W+)fY2svWtDIR^I z6;k>|-0+CZ37->{hnIt{(>Xq(6V1}G$OS7ZzYqsr7;Ku`KXg!6H}FYnu##pWn3K-m zlwQVigh$q%CWg4O#Q7wk!9|n=qlH6KW0ghdQVo%;+>sUtTLobXG+UGW!ufc$Zi%yCp|RnfGCsg8omi;-QUkl0Ad{!MXNr zAfV71@17y^NedjRMRC_hH$2^??0X#-f0M`ho5HEP@0C8z?a=14jFWZx)}_yJUGHfBDi6p z3aVW=SjfiGSAG|P=`&TW2rf~hLfDFQaGnYcUSjagAv<{Y1x*AOmZ)-S{eB3)3Q(o8 z8f-6FXEKZ6#>tf8L6#xBm>*~YG?ODb3=W=d!@%vzso^%@(J4L&o0yl7aB6UK1%2R{ zH3=vDKN_Wn!j}Ol#qhJ>uJB(PFn-Ac6atSCE&cv_EJ@>EbuiO_8z&>ck`uP7{g?8H zb&2M{Q7SAw^esn629kbg`~TdN_QlIDH80tC9Z0zFLI%hIeg~O7HO( zP78Z-8GE;8y*M6e;xrgnWM6fmBPXcq0Fj6Pi`f~=5FFNk1Ie&`_)2bv~ z<9dBY8_?ud6hR6cFk#z2`Se+LY;VIZ*Kg+xb~G5)MDIxF?3@Vv2=0Y6CNt65pa%4y*UMp$3%i+dnqqC)q!?rPTH+Am~O&R5WYl|y- zm^68y-Xg?uSZ}FPtJ_Ivn7y&~QIUSyy}0?7PO$o7Rq%T#}=*IL-1_t^2W$tr)cal&1$Da5R-GLRY z;jz)Nr!wP*$ZF3LyT1jrOAN#=ree*#d}b!6`u+W?=9<9uQxHyAa*99FBVeAHFB9|t zgvrBH4zL23Toj2eo=ZR$!F5jgA8t2YZCric`L# z>y_p;p)H_0XtkzJua+m5h_DK0ibUnL!6Mk>hKH>C{h+yg@DY;Z0K!8xeBlmEk*vZq z!QBusY(-8H1mX?)m{A=f4o*+V;YHxVL4>`By^<0n`A*KSN_-Up{Q^lL_Iwa!s^$_$ zfEYkx5)c%kuT~@uCv2h5mEdLd=+N+xDL5hrj0bwFn%86sOdrB=f_8wk!#w`0h`ifARj$WNo?Hm70JPF`xnWv^kTk9N55J3f4q>#W*Lw`oOBx z?vItSjA4@1{+TaD>PPIiqoEtdHR)we)_6$SvHoKDU7$II}^~)|h~bPc;$zg4~CHA|nZ|jpBumR0KCaiy!d)_Ufy9 z=eJMs{pA%m9FqR+ZwWHLinG>hFK)rI{O3wF;AXeB$aw7M0k>M42KS`IYzHMKjUlGbLgfO`|d)jM}$$ef=Vuo<$1!k5q+huh9g1(<%h4Rs#X2^4VV-nYcV{tXwV zlch>DeHdJCF5-f`-m!tp%|Z|C-ZbzKU(7gD*S}-}K0^jphKnK-fcPp0rc<(tm7mt73BHa1jBHffluWOT#An}C<)#>o z#Fk5oav@y(Ks+h22G>uR@Qe{^3}O3! zeI*NO2#_@8C6kC8noUH6C8!90R|^ylvKba%X86ejB#e-<$rJS zS9iY(#DOvp7JkmkLGIUcnm`|!bwP@UVAZPEW#?&v3u4;g{y^>qVyq$15JbB5m)!~w ziH@v>J7Cs=NX4*a;D`Ky`Y50Zh`FM}KrOg=W(lSb7LsX>L|6*Tn0D|#un|X_i->4Z zxG1-GY)0vRQ#_h1{Ci&JRGBfGCz-LKYe~qN$J&TZ`;NvGZ|c1!t({MTD*Kvgbfpn-eSqaEzw z;N}<@a^MS|4Z_X`QNi+EJ*OSgXxqF>X4EygPqM){ygFNbT;@NAbyWVB)B_>I(4N_G-(I1#5qC}TH9}3 zDJSu;l<@+5-BnV4W#KSZY$kLIqDK(ynP2dAdGg{)w$(W(X8c%A!^IKCW1rfKwuU~B z9~1cE(Z|x_-w73ZQ$pi)($Ry48}cY`V<%u<3! zR!0`Hg8>p8Ao8n79!}uahkcG5&CJeYfG-V$tiKOZ)~ldyWO^JLB=ukr$8Td!2-rYL zADT>L`B(vnRw+8n0|wm6^Rlt<2o6R}6bUa2&Mz=anKgdRU6?F|OI}j3hQR+9;6G&g z8^H4gb}9sf*uLKK7Lfh}`l$8$L+xM`CBt2#xgj+?Xy`novR;T=05V5bb;5}X)qsR! z2gM~T@LUC)*aB%RkPKbGoHQ6Q83yE?2Gra(w?2_c4=*x>CmXp%Q+JMa>ILW9Pz_kRkR;6GxZtC0;)*R)oond}`K%v@ajk)g_<>UVakLuVHxZY)}O-79~t*=L#cGgMixr!9JKe@=FF z{n|qpR?Rql=WxzgvyPHb*5fQse7K}<07<%xm^lUSR%JDb!Oe|IZrz7E4bT-Jj|7u zoxh^#v$CEJVDdhBP>1cr)l(n_tivhWXrm;}C z9p+7~7}u{kx=t=|U@9dW8!#=KCt80j!Lh7^ve@|Ot6K5g0WLaEx02|m!mw7JRBRx7 zYqW-v{w2dimto%Gv)>stpTxPzxyj>w#oNH$9_!Q&vPTTMetzUwqsx4;DU%yjjTVml zV)w?KJAIv+TYr5~C&hQ)`N4+!?C0}(9R8X8(D3EmfIGpPm%f-V-)Ezn)1(_BJr6GT zOuI0paB1M{VD;tKr7T{^M2)na`p@^L3TH~iN1u~<|BJeJM5!U!_g4RyW(Dz}8TD)D ze6pV;eSM{D)v%%bPZJ)`nPa(#+SWAgph+g6TN=Bbonln0$-d-jB>$~F&)R)~&zgO4 z?sJXvYK-!Vb_`gXM^@ed-wUJVQ<1SrwL336@)9hE?}f2T39yZZp`mnT9r|8^m*Wxt z1~*>@9dCKT8w}7(3{(1dF2UfrI`Sn{P<9jth`!D6o2~&zDl`Dbg#~OXsYwn8nGLYT zWT{v3#Q?e8eA8V;CI&i~0GLwpk>>4wsJHDTj5JwVI3D0Hxiv;K00us#`lkojm69!3 z$2iA~to>m|d3SIxdU?BKnYQ}jmt(G`ckY-VVjWnE4de0m-m{CwMdXeJer!5qvi2z z1Gp9-EY4?{n`mStjzhR!l$Fp zChJXRedT`I^S~UR+|!e_5ucnzfAZ*@^|P)i@7h{Ychp;_bW6dHYVnQEUu17ar+XP@ z4)2!rJeR4%|Do70Mrq0YG4=Ih4k*fem2Ixwbn=af&i1Y{nTI`l982s5^t8Tyw{gzd zv^&|w8TQixXJ65OfIa6npFHtDUqu-vPj7AylTH2lO{)5MWX&0BcYMgwCkLlYQJ!iu z!-qP}3A@uCBfs+IZQk)Nos$-OuksJ%?$mr|BW-SN^l_X&(yWYm(7^73-~FO^g}eQz zs@hQUg%z5WmHm!RX(#UXdI>H9@9UXLlE^D(J7>t6aZAk0P4=n!4_t07m2-^5JM7Sw zOHrw;l>fFU%7C53Z;}uV&aV|Q(9=bF=x*6pepG1>6ev5+lZ!3cAh@Wjiln!|0N!yK$)_apBPPkzA7KE{&!^KxfM z?Vs++;^|%Z^mgLlBD0RIYLY<~5rk9FD!V(nA^_sfNvldE0U933NB855l6C^@(|;i=G={jaC;=M$oTjux6k z?o&g0y^}T1wGI9AVVaP|ORVVs!%M9bOM@8A;Otm9YW)c_|KERppVkYx**O=`KGMej zzc1SjbpjMXcm3X92_=mWva|W*r1QUwT50~=uO~vHEvEN4k274(|89Op^8KXI(`Ji2 zHhlCTMe$K4o9Co(zE!LZp^qo6#cjEB-nXuS9`tBI}I4XfB6}4XMxnlfofqqK z$9)W_e4j=borG2T$D(-;o~3EZXmN*$f4G5|WsL!=uAW$F{B^fOTGW=lKO5{9wKRug zMx5Y`@E-m!DE*&M5-srlf(_#d>&7z@%;?e{eZ!t}fNx(M2FjAvQ?WDRo!ZMLR5jbdP(Db`K zwD|+J<->|l@^bO^^e3Y%(*rrAl*IH}3PuX{&&e$|9kX$mQcn7J0+ZFSiHQmtr0-}g znU9KCfTA)LKQRpbL8+9|e)L=Ggd9)XnJ?%M4a4U&Nsif`AL#qWI}{_6UEQ1XrI>!2ZCuU z5EfY*cU@)h)EPR3BD|rlH3nAlhnIhkHR^CNsL&aZ((_zNBo{+X!Xh6$x7Dswp+hO7 zBRO)9Zr@q;L}kRiOEsZsQ9Gt7rC&Ywndc3k(gS{}A{8}fo;9BgY|^F=}L27#%!GSi}E=C{qyNTpA+V&d|13}&!CyN;#V$nnRGX0?Gp=U zhYy~+x4!P^savph*(!yi6amc;Fj92uw;nl+7Iqta<__MP<-X7Ack57iA02*=m5ubaHaX0DNzP#luK6$H;n>6OkiQx z1z@m9n-Khrzr5k}7i-P1VFNCS5qeczgU~Y$^E$~k9h>ATBIUuZ0f+12->^9P1y73M za4(S4OOyeC<2y56TgejlZ?ktw*@&^8> zxrU`}jMYOO1Rzp*g!&=pNWx-?&_#xdb z(?h3DM{6a%m^oq4q#PEM&;(RqH2@-Jze%m=^aRrW&M3+XRFN9KEsu|Y+oC@LqbUYt z3R?5Zb;ED^HUS)Q@J{6Y08$gbi!?)~fop?>#!za}cKcnd35fMgqw88PUn=M+xTzeo z7rX)Wb=H(*-URy*84Xs3FxWW1m57r{#Giwp=0>yQMqdSIw`WZL9B& zifg=$Y!R32c&_WB>8w}m8GXWSiLfbQ6OiU_JxY-ds$9$|G`QLKaZd=gmr6Aflo<^g zN~C(9VjQbRB2QJ?RYdRLn7fp$rH$n)|E27rdqd)r66UqE)QWbG>G^K+Og}A%^V+ZA zK)A1zVth%9XRX*42}LapI3pYsiDuzsLODg&-kEK)HP16gG{qw6!HRqRAK4=o$l3GD zA-9h!%A=h-Z;t=+_F`6ywS9qYYOLP7>*j}FI~Oi2DYbC>QM`NA!irOnfIK(*Ii1hc zl>9UyGS9!GaN%{T(z4UecF9resk57>TNBpj?Z`w~N#ihk<*J8k_BTMdJ<>dY$jF2) z!SfI$b3BojYsl(h6U!ssi(v$BXlY`ul23s^fdLe#vwLZV23cqEUL1y`&Uyr!(U@~# zhk8Y399v;h{;Q%*FdosOX_*;035hMn@3d*8&qeZkNn@-G1dY{DB+Jr?SUY(r#lj|G z6-2?T;Q-4}LMHUO6)5E&nMEb+qZ!t%yxZcxI^snJVgxNfyGoFcI|-V?dGWhYwyM-$ z6_QF(1v=0FNPZS5?2%Orbah({IKi&)Bkxc|&vx??FhL-wNK0|T_dWw-_CChOb-o}dh}t;A?=SFx34UZIsV0b+R{VM zpG@lb#tWWzRYvJT&7yeFTkf$oj;8@{T+x zx0z_;`~+e}+>Aa%J4|oOqX3~wusP}AT#qLVu*NJC{#w2mKo3D;04~@hft|2)dUa82 zN~4_tPeiaA1~eiNMaiPD3&a>w;6Ed1Id3?ni=VL-SNo}Vl|T(m=Mo$WbjcS3LW8!- z0%#+(1Nwk=V6<0MN-M97hAHcUtkeXb5hkaOd|kKyXbL+#GK&E`<^oyekqs7L%ojoQ zu!;`!l4afnxv38A1S>JU9`+DwYhx^0!X9lL^m{<@9^9+j6ceC*{Ky%TE?1^-80yCtO>t@HA`hGfyTL@_VQH zI9b>JuI1TrBy+D!mx!W>jO8oD%=kKP^>KQpityYL9;<^3 zt(FjXwCB0lDajk?Nf(pM@KLXy&E?d48NJf$r_#K3&YX$IJIg&13^O%jCyksQ)Ez(9 z_tv~Y4QW(nc1Ya_yV&5#NQ^I9xOhL3T=RK$+S2eFD!K2uV>SX_l2cum>=13*gDl|B zQ+1;4QX4ngAgTpkQ|>eF?v%O|e_s-bsUK^cnJp6>AJ3#D56|*Yx*Jf+t8uCovDYkD zG4+)izgjP4f1$1Kfe8=VwED=d37zpX`^>_DOBXIL`=~X!H1eh5tGT5=larUG$CtV7 zS2>}PIz~tP<;(c8fzF{aiHpy!*s|Jl)nvo%cVhxCD%{!decQ#jP4Bd})C7I{F|znl z^)l7brelKU+pirQo5Y>(V~J%TLR36!il}&)%R~r-%;w)mf=8{<^+VPZQNouqS{tY` zz=|A0GM|j(OV$A?8DgXzg$Raw4@LkanLvyq)Vj*Kv~@_n?#N*o(MLK)gVZ5Q120-t zlSqtokU~Bpk~r^tJS)Ga7>Z$ z_otBYWDrph(Q6nA3W$=Bjj<85v17B&mFBy7`lRqgaP*;}AKr|>&vfJI!bKfD?`+qM zO1hRHNzgRh#u$- zOeY>3Ihe8f60K8Q_H98~Th7m<%}cC*QRYLt4h3r67^G)WVXji2p?tjJU{xuvD(~cfGM+U;U!;78c~kwCp&% zM)A?)^-}-!6AP%VRC@ZlyzI-1w|7rp*je|Ba+rKP`xlkD``e7Y+3_Rd)7)-8T^E2v zeSdr+)c@3LW9g^v?lmfvJlkQ>k?G-Xu}N=5HDeYT4_(n~a29sWx z9UouVX!i_RT@JE~nzufQ8!)e>(^14MKs>?u?c^vN1#?ow(%GwB?!?=9#XUY8;Wj{8 z{<=q8+(G1{P|~iIm|0f1*|+`Luxs@{3Oime+ji=7!n;-@O{EYO(H~3iohVRqbPciW zsb^5==^r`=z6MPAk<+?4#jIPcrg_1JeMK{Gd98bA)7q1f8#FWi(KUz*wV2Y*ql2Rp^Oy=Rmj+BQ2~NrZI}0`<~Me zHIu@<$R;v^O_#0AFfCwg7-L@|ta+#hO2{=Nwp@cDd>p6+CD@6Grb{~Z#=aM8VC80f z69|%cG7we8M;O>{D#4d+m$In}KLX;?JCfIaJ-xS1+%BX+BTi~~dZ9OPZIz5TGo&35(h6uT?ObQ|LD zA%R@l%Lq8Bdhz@rBy!4UgLrg{MSillROR903s3^`=qX(*zcf=tMg}37R(E>x{j5I* zd_GZ){BcT0#KgzrA_OEe{J2L>KU(C=Gi9wYi`_L?l`T>mk^I@=&c^-8aea!f`le~5 zyBxMU{;WA3(~(obM z+AP5n^N)U~CU0ZWE}4j7Fng|J7gapAHXIUNP^y=Ny!1oWL5+E8#@T5d#Y#JLM9oOl zx<^omSiwR5k6iVVS4#$6Q`M!qCk&?)YStfeo7jEGchIJfi#orL{Y5P}HD>JMlcQTB z6kJPJ-fi1+f7Qm2(YG_^{bMeu9BvIk3NgGrMUOyD157uros1s^HWeJrlyvYDG)UuC;Xl=G zkO}x4F|CY>M!{{4d_ah)VZpIFWkr4~dj!++KY+-o#!dm)4V{gA1jGli;~;ASQNjp6 z)-;9=3UrWxC5&rR<mx+y(jnmJfR?Bg!p^Rbkiv(huPV zWS@ya1heew0?G!ODYi%aN_ZJl;@(7{Fc=~Xvm4y^8SyX?U86gH^0#&fm?4yj@t}x5 zB@k52Qi3Kxh&7;ZIL*LSi9Vi)y@0!6It_$~R7vl2@Y4cOE=7{U6>8dzk5&wGFN`l& z9eE1*-fQH)QF#`5(t|>r6yqCW@2(#3x=)L`HTO(?eHe1M&+B>qW>&J52KSPv2v3Bg zWKM1kIu{?Vo}GlN7Ag&)+l{#9dJs8Y))`iYUm48WZTZIKfMR^^9I1#mbk-y*t3vH( zQXV#R*7w(JYUV80o0gLM~_reJ6fvF-f zZ4rJf+$s_iY%0zLtV4>h{kE<*kq=NtY+PlFvIj?`fbx_{DxvB$4U(k$$>h{$IL(gt z_MO4nhg&jgMHfsZUsbAbHZ3?{KhWWvx9e47a!CdieRBu7`suFYMjMr#8%|2gF8_SU zCBp8ZN{+O0<(Vio{`41BG;e^*Nf+PZbDy=m zY;eH{=MpRJcMu8RcB&-pMi}=^T#0~gY!-X9n zd&^3t^3fxjm@$uCA6;9r=%(+P*Sd8_aJR)=Q6=;C2GwTd8k|0oHFw*d+lv*wRxPqV zo%J%S1lf-#enZOG>9Yo;zF?~!n8vjqo7HCfvg2cCXX^n-K~fTd;f{8XPN|iJsZL)V za?!Q3xa=aErOCT)n4qL|y4zgb+1l#o=EgxjPe%@&7+Ndx*vgl)|KYg6c-&6HK5(P# z){4DPVhuPl1)jVs-Xm;QbYzCP?R$S4gio?yf;44zecTHw$b8##Z#@Ju}ecK z_5nva$uP-EjM!scl9jk>H?F-nKSJEo+xM2Q&Ph~!adYF`pr<-R#}-ioFL|d->O`jF zXTi`yj+njI{t6#NAD%XS@l4You`tIIo#|Oaf2u6CU=y6TEm zTgm!MS0gA5q>CJc1U!GQG+YFTd9}qS7Iq7>-WAbgeL$gOzvYP-{H5awgg!Xh=kcl4 zfMn^lETWxZ`xZK%t1@2opqUy|2&LaEErQiGiy~_SoF!A^_IO+3VFL*cx63IKo+gk{ z^I#UJa@uzYavxk|z;MExP(41VEQ2IaAOb1+~hBetc3_*X^2r*-00YzA40{a;bjP4=p5?uF)FbbY0LZ&!-Ou;J=B;NYvamj1+9O(se@$aw!d6h|Xvl0EnTO*MUau{d3^O zRB?zPQX@I1{3+=&3NkchB#;Ne&^z)(WX?FN(ix^V8Au`>P$g^(|%O&xoOqV~?(K{JHVyh4jzetvSCa&b?pM zMUUMbPo^0CtX}o~<)KjBoYY{O%RD3G%x@@O*frp1i+a-8NctSvi%ue^o!bX zQgVKS#;iz^cjba~zki?YazLOZvA*68jkYis=eFtX=d!RFfk=z{(M zqymChb+EU3y<)?H=?yq{9h|-d%g&l6$+@ zY}AMuejh3qmCH&-dsLh&OPeXX!utKR4_+&d>_4}~vEMfLZ*Es7rFpB+skLXDjO@2@ zX=~$%CoHkuSMxiM#GV~zl)6|q(AmSjq=%akx-|XmsnD%c%vuL#X_4gh?&k&hNHb0j z4^rGJ4Vj<^67w$KeSG2?i&s_J3ArQB+DI8hr(OGCk>5Rc*or}$x&x|B$8N64b86kM?qhi5 zZJfyRsvao$t2MlI`jGk3wDJFANd?9OMUjQSQlp~k;^TERlw6rR zJ1&>YlcQYC#RHzdXq)6_b0TP7K@hys`w6Mrx`LkV|o{0-1dn=s~W|I zvI$IE!sW0SG94l&agC77qb)eN!5aGTLC7@p!~u*Q0KtV<*!<8c@P^!{V7`c=2{%Jh zwL#SwKjuv$UNQ{_zv@a;c?@mXL5DK-cB(&pAV()a*#$Ue3cihgK=);MF_xVS&CnYP z>J@}GFe5EPu!ca6#aL3<#)M=jIsq_5#s|kK0Ve8;-shOriU9UwC=u&d*Y}0rgE*Di zJ2{rBOCycAv3`_Yz5W&?j>V-^11}v~eMjWcUe9OlxFI{-r6&3_{UxaR2IA-IW4V6IexlPSRkT%WYK9l zyY|Gey^BwTZ6B81FRN%q*|D(H!FCUP6*cZzcYkd=U9Yjc!#I9BvIBkE8qi!kc~eUV$9&dxYW7pb5y^P>pFTC!t zPGQicqb3fHD_wZ%Y^v1HO)_Cah~FgD?(&f8{h^;fAD>sIvis)bvlq6mT`;QQ*pO*E z&;F=y?ox=^-+tY#K|yg->*Ta49qnK4%V@d;PJgjNe97(VJy(@iJsfrMj^>Lw6*ggG zSA8gICg*K5MHv$3YANJqOI0_}lZ=)*Kv@V^9M)_8*`kCjbG zu*64c7sL z`}RuCM1LYmu>fbM0vk_SWk|hdTrAK*L5T5xcJ7H^t|$m{DIgbonGs+4(geTng=ig{ z%Ec;C*n)x)yWbjp%9?7g(1a>7@Jg)Jw=8` zoY~I^*w;|xizDzFAIB0Ugr*>Vx<0xUHeMk6(&5$EUjH4j?1rS`R-GJ~KlJSpG$8AP z&6qH1sTsq3tRG)meX*pt*zay?P_Zg9A;v!RnO&I?IdQ!v^3l%mo-|r1dW-0=9zQDC zhvcRmFf=_BdC_JKG~*7AHPG^X7e&P%ckTH8;6+aOlG(h}$jNK;IQFh~m$kr1D)c*C z(K>Oa2vQ%uv6nw?R9#`K-pL3H$axv^!P5z_{nfFKTV( z)%za~?y0|6bf}Nl%&_&c!@|C0wa+)fWpoG)P)}}g{Y5P=H+lbTTYTrng|A|7{A}H$ zGiPa!$*{PcgB1oI^F=OP>nUQ#?Yw1`oQuLUUt9=`wmQ*sbaeo-oPI}m^pJr!MEA7U4L9OuVuBfoTMB(?&YPH?{{7ys$j;xj#0O--qZ@WK7ZWduy=ID6i?A6 zkb&7}=6DPo=6Uo%n*Eaa;W0DE-@KkcZq;abEH_2Y& zwB~I2IKzEW#ZLoL$>xFv|4qh(yei7yp0)&%<|QTh4wegOTINW6&RrE5T70O8e4p;QY6)}}ph zW^)Uq-$$4$@Zfp*N#Ir&>i zX4)WN?tTl&&~yn`#xUdCQfLP#hPYCu79ck-JpyDg|1DI%=deJK(Qgtmf#7|#nZT9; zmITgJc%Mk+|0z}b`!Qj|O*ExN>+wSNj2TFX(Zu;)iVhl1qEwq{vx?IdY+&!hid)O4 zd}uM7@N{SfsIzWtXENB6UW5%dZ zR-$v%^vrP|(hJ`s&%7Wh$Kc~9tESFrRIL5^jk~p5t;&CowX~x&`$k({;Hju}MgB+9 zH|Jd0ZZ=lW-ObZwUXy=h?_=+@CKsZoiA+{^RNfA2yo|~n?N0`;y!3=g+VY7nmS7zB z)VJ}(J#Q+m)zVDC<;l6yeJVAgs9SeGtv|fH^})leciGJdZ;*P{9P5~R&rm!!{+RiV zBDFAAK@{eJLxfW<1+a?E7hQ{rRt_J@WM)JPC_0t@H2p&!2sL zW!4o7uh(H|C#@Bl5*#Wo0W7=Ij1o-`i4Y;0QKoy*Awzh3to-nU%^WNy%}^3x|w4C zrEOE`G;5Z|2KW}r;xq{TD;gH`JPpVNRne?9Y4P7ux)NOYu=S{XIHDwGV=0 z(Psm?E^KWyjfMz3sN6J67gr;1)9n=w2SvKVCXO*As+IHzKhm8hqajMa$*9)7LBm+Y z46^4ykH>c*CE#C_!b+$(F}1Gj$)ZSy9a`4buW}IhNC5^zg*7PM)_;Jl_R^^dtF&8` zQ+Uer<#|YWGsqcPZYGcJEJ^<`XV$%00~Z)%r_6j6Sbwrv+-rtcil|tvNH~w`aJ0LW ztf4y4Xu`Z3-6JO^yl{TR8h*jw!9n-N+ige}Qh8r{K-Td`-Zg7%eyBHP#Vqr`x6I2s zZufa(OrLu;yF{NZxK&tf`dqRM_T;p>vGQ|O`z@l$pN@`Y4Ox&|ocJbp1CI1!udhvT z(Ti#?JNkp=vsK6SXu4>op5>)-`TOGW5$OYsERtWRM;>JJ?HrSEAG3e$p#SFDBHss|}vy47jF>exJLASb~t_Tf#{Scu)mbE>`i4y&g-_sSEgxQ>osDV`aF+bq&5HGNZBims~#3Px8!_I zl-*;#=NEN!e*aMuEM`A>cinAP5bOn#hO2SVj1WxzgO*a6wS2paJUsTU777!X!lY3@1iyhOY;fPlYa4c(faBDs04R zb3}MU;GhMgC@(O(^ac@_MmGW8Q*hr>PrCbm+eSCAyy`Y? z1aB};-!6yPRVT*!6Xlk4RLCOo#o>ptJ&zjQ+tYP_smJi+$|Z{tqCK&UIYr|l(>7w! zbJ~Ue`HFxdL1@QfvKrwe?MG#&T}qn)tlUM1*m|LvhD?MmFnBh>>-}*SAo{pwM1K+i zJX(GmZwNR;j2NT+TPndF8sHk%8Nxbhq&8tUbQK*wrdU5_ijk^lQ_A>?31h}xTVt-< zfV#71?tMJ|IBS6F#LzmiHzp~rS0#szBNr80n>rK^l9JreHDagE?3c0Q755m4$%rGA zrWDD7jap_+E^_&Nzt}%c{p%X@&EM`GEod4YlX!d6XKVHRlRjTUYu_e(Td*W4eNg+; z&Z8rT>MY1zz531J^JKlgxtixP=0yAHqd!C)swahS*v%fL&l}KIi0d2MOVD4wlO?uBK|_ubE_TJ>aF27S35dMwaV> z3=qTPEvau&8*y3Z`|(L1y^u7>yGvdrX^4f5N{~T%0J%JG{2Vc^VKfq+1x#Jj*K3aa z07Y*fo{Ff`&89VC8vn3fBQ^8zGc(WlaaP4TJ%I1{Z>D#|3!@X}!rLNSi?JQi{S8nLph4e}FuH&wqW8QgZ zPT3QGeDjraMWW6>Ywp}%-_uoQ@I6%a${Ed!rKiJG%GQkFv!=5VHP5mok)HSYp7M|_ ze}{U4I)#UL9ate+#Dob238ia5KWGvIiFuHUv@?iCp#g86Y8~x1DAbAv0EoeQP+(MG zM@Yyg4Ja9{xbGzbYC%=ef+@BL$kM&3S(u98s6?q1WXB0I&Q$$&!UPbfkjn*B6K&0O zV19`fDrgDfVhDF++`)u)!sL;^(7yfHi-<5wXk?}_qy(nVbU>{nO6rYn1^>@~g zV;8W%BS5VQV_W@gH32byN11Z^kfQ5xE&hd?aatHZkz+8tP$89cUX6y*Xi-5XundnOUoWF{qmxtRep?2iaQFadl3 z=*AE@Zpp+F&{aXLCZq3;wqVytua5*(m}`7po(Ur6{X3GCj;qvQzlNc5McS4Av^SN} z&10A43-%Ati>AgwbI6`L#&z6dlc;qz!(x2=t$w^6=ShDRc8TdY|@N?K@;1zxG+%aK%ps?;gDIxH;D*aFuM6R$1ZC>=_iM>CBbe z7j>IzR8I~YOZx2oODToq-#Zh41iz~%DMwyOHq zX7ejL6F>1KpZOXoeaiKnUePLQZs1bzG6FZO@5;#6PlI6vbK^lBlhB?ZkOH{3E929(%IZjLKQ{sf_WzUReCRXi~@NpBr}V^)$BVc(B>y-O|id&$M-0 zg5KO>?Xf6oIBpS`I)P*kkfuIi{J7 zFtgiYAvmRz+A(mBgose^d1v4vK8zGhG>oJHWGwynd*pl3frMAN$3SOxIlj$g!22uD z9jTbsu!(;CM_I(jJ_o*50&vWPF7$ST)Q!w=3~j@Wu4QE2zqD}3+YB`Q7bo>c9i)^$ z+l!{)5-Db+NL5T)K0z_q=}5Sdpta;cfaVGMMt*}i6#T~goenA@HIOgjm2-0Zs&P}B zTqT?~l(svP+g^j4gN)0m@lAu6OUOq6wYg7jR2;W(^(d5m>AeDUfUh3fJ8X|a%H=Spv_4oq|#(-9do$t&IM z{*i#KQ~xT%B7dt!WQ;5oHdBC}nu56m%MGkM2ncw1WejF@J`R=MZ|H$BC<9Sc^aJqn1)I0%=m z+t2b7NTx* z4Xk+TaO;D5UbmXrb(O{b7iZvX?3A0MQk)m;weN#WUUv^Cd*Y()FBb+rzWZLv|Dt!% zW{t1zFLzm7sPgpixDghtaDGZ_VDvYc)(ayVn@k=3p6ys9w|ZpMmihLjmG@R9ugUh% zm37e_GNEblSeOG$XkGHia`V)?!0Grg;h;FpM5ILdnijC0#*BuG5Z<9rVE|(^>qkqK zpj$zxA{&eRy(-Ei%JL5Em9FWZnl4c)-!p5ElzX3W7zE&VZ#0 zmD!?!q*Ch;2EDB^E$qSuU5y=j0M2ZMXv`j`4V^I zCmfl)>`2lWayHe~ukoOXUOEtzRw^%T4pi2}=V zmUo*(LLc<2kW2yip!I)K(2=Ny0M|PqPjDe{6bvh;j|3SajP}2D+&Y+a!648aFJfU$ zp$cJ01s-KxbgZmktmDtRjqzi_VhRSEFB0cQXdx@}SIl##!+@pO2c+NeC52UCkD%a| z`n&%ku?@Y-<7|^{?s2&6G`8>gmpWc!WXAdXrjC9Vl4~?wX~OWp#wS;s=9eFso1So~ z^fSB=)*W$Lsq?yP-o2yV=S~-&lv+?9)PBEqm*dlrgKAdmA4clW?qT6$QtbyvE?bM+ z-xROkj1HiM);&J3 zwt9uadiyam78?DRz3&G2D=b=PzyWqV2|mCkE%>27>$ecCGC0cjlQ7ukXTJ zJG1FN!y*(|lYav7CUIog?5&bQ5IP;qO}PH*%4>Lq#n{*)IR z=ZGIW5&p4$^I@&y-!@ICX*UU5>Vc?(uU@Tj-$t)~G2-QLmk|wj_ZXN=mTJG~d~QKy z+4-bJ1`juX`&2h5-0EQVLEKSzN%Z9Cb$245tt4eUxe~=bG=M04Le;x~_N8lI5kq$waq=;cr3&fXnf@CM)${^mq$pTf5X{;us`8X>Js zrU_j0U5&{K1V|LHON7l4&?&#)a2rHt7({cJa04iYXk9942z1FNrWZ&csP>9Uk;a5k zE#Sj7-&v916P#IR?%3IxeGH`rF1(jspF zQj^4LG*p*#fMFCANnAC4_ks0{{7eLCd{=@odQ20Q$%ru_5nEpD5oB;6!#Ic`!lZr| zi6>+;W1Ze51#`>&)AhD;c_vaGrmo`4zLy_A5%NeZd@Ig!OTKKXin{RQ$1Pn``>uDJ zmGccZH+md=X!Z8qhvG5U+TQ$BXwW;TnaxwMq0|ml=KXxQYu%=D^C9VH%Tlg;|DpmN z6FVF?TlybWwmUa}%Gmt}>_u*jS~J+wwS`(gVRUGlB99tpB$5)p?d8bV`rONXBFv+1 zUp2m^nns0IM7@2@Hvm!dT2Ci@!P>niL?S8C%Y4c6{u)hQLDy^d@b|B15cbQvjSI&D%L2F3)b)6 z4oW#b&tdhBQj4yyUY(2mZfLEpuwJ7+qO8??qRwzlsxq*lTOq?EJ-(D1^CWuY&c@bO z`@PisotHW~=9m2)7I$RT)w8P}ePU@HS+rfcsqNU2_o}U>|1`Y&`f%OwZdY3I3sQoG zz^q|JD=X&kMgm9JNE1Mnka@C-zv zqXR^J1bK+*_)mcZ$Y^XNoD;Jk3NA_jbxi6n{%Qi87gJ~etODtktzZWiDP11d2}=?oogAN zqzGshDwO|sF{g1tebt^GZY^>Q6KIpYp|gTG-+J^?Ugpn{(aPE!_j9iJ^3~V*hgF^| zn9Dmg(Kx|JWr1~1z)!=hMR!k5`MF0YUiS0kZ%>=&4))l1F-!e{d#hG!V8i|0x-SAQ zwhYRbDf%(3ZtW*id4Jb?)6(Xj-B8(8G-2(VjrsjYe(dP6NM15?b4js}#HbC~DSbU= z4A0Sxj8;y$U}Ct)CN1B2j#f%wQp?NHSF+CxGSuc=_O21Tx8zgLwOPw|1Rd;BeB)89 zzdm`#Wi9QQxv|cVB;L(ct*_S~W-n@_re`$V-|KOuYukRlSd8zWN^dB6t62!`$qt#b za-hDF-qqpfq^L1s<&tri$(40^IGfX#Tq$X+#rbRcxKYnrI`=B*v|M_n`%h`Y@F2I` zZd_DFO*hzC{d73*GVUvLOPxJ$$N3W_(eFCkYQ;yp^{joea7=Il>_I5f^){fj~~k%Zm&O0DgWj z03>4xXawR_pFk^RNHr^Yfuz(UIZil8kbvk_vVNj0nPgoFzun9QN|~K~6}&ThgIBxg zWMsW;MX#56d@Rx^a415Z2((Re(ir$b!U6=QE$G5B00l}idhxps6l&LsbdpS6{gJ4P z*aG6G2wWL?C&~f+&km>aVI3F<*eHk{0DOg|M0GToO7fzR*i|9Dg2W0G8DsetEP3F_ z|Li(5$i&B<7IzsCKi z#Z`8@M^VeHRgU>s0yhS5IYi}OLy#}wWDXGgz<6ecj)m>8OxrxY5 zNuw4|Q@Q!!(2~UWvJMGxdfP_Hi-e}H%h57IGL0KPvEu!;JO@Q37F22J9lOe&%yq1F zWpT^R0u2sM#NBZx?bEw*`y8~NA!@#w&03~)O*yMODAQ`9&YqXkR=IoJe$7wuq?C*& zw1rmi*NwJ(S@Uks%jmGppWaAYyV$j#8zXm4@6p^F!GUV$y~b*JZjK4H&Nxg*nvE;a z|MdB=EY5KAoHuL!sQGw3^VZ{^6YflZUik5P>L)e(`41pUWuJArYDnypuOa4%QX7F! zcu9I-c1izRt^+4d_HS1f5|iNH-y&M{3kIc7Rrs!iAFv0z+7HuHDAqxsV^cMBJw&V1 zw-M%QWl9SmWiq8@;%m~q*3c9f4r?PzD`GD;xp=RLv>E$CyTABVnp13LB9o$gq+6kvN0_ zhlGmz6!MkI=&-voIBWdNhglvG3p4I_eKcR*9545~p=~?B`jdsne&QC;`iXm^e9(ajIlgWAl}LL&x`F48GOJD!Sl-flbsX#iMp*N#msJ`fa}YWPjB zFwj^2^N{ha6K-u3S7B{`ai}DGrs9pxm-F-`voTpS>ffqx%VM7dmV9ih3u~Bl8o^n^ z1;JVK_iXFBvt&`5(X~6zW5dQSS`d06^r8*K1m~m}uNW_DsVHRb&~4x@23mXO^A87>(8yEH;>|}m_ zrDy8k^rN3Kc(QQ%U{6yLaB*N9%wbe=y}1ORFQ(I^1IMJ3g2+xU3jZ#+Lj!cs9xM{N z#OmZAb(F9o7F@EJj9ai>?d4Q&4y;-Ox+;*w1g;2t#yR~kAIV9bP9z}a%_wGwhNOcJ zGhVUm$Z``O!31|AMv)xW$?}S#sgpA#wv=L{QFM2Oo)^R++n!-fwlP>yP=T610b;Od z5=3)A@zdx9yO+uMfDBW#!83Ig@q$hl%%`H6RPc&q8QDkm>V?d3_f|j$Wdpdvp z*xwPDK%Zpg2*)uODSMbv8iM6d5+N|-m|MX(yA#WdI$<2?VL);NqUMnY@^>n+paYJ2 zR|nZWY|PP-FFphJidR>)3|VUDZfOo071qa0DlKZ~O1UG-av3+ruYbWCIA{2roawvQ z=zrZuP*di*(>p4^Hp(vI3?u+cTSnY=<;NR?+sP#oZX+eh^`S6-`$L8gVeeA+(rR7h zF#Fv=``n$l0HgD-4g)7(HXM#ZN0AAj54p%VaSsUP-%88McYZ7vIN9bQ<}qKO z=rBNmkY~6lAaiE)>9wZgn({#WDa3l}5>QJ23Hf-o8v;uq=jk&XzS z429(m_T&$Q`Uy+gP7rj-twn|A?S2Qgwep7a)`zD~#+0mrC}cjM2K2d{!^b#VFIkkV z(Zjw}z1qMjN`9-ICC|m#p3`TJC3Q@!OT7diQ#xR#e?!w$`nYOgA)93+S}UcHTroYu z+*(Y+O?FE8M7EpQL&Yl~Bi~B5sip~TGw?~t@#7wtWB0YeQW%bI(ZmubqjZkBROh&rb{E6BKJ;OoWRU30HJ+@?O>#2~oPZ1jPi z?6*yJW#_j1D1G;|XX(|`5ss!4ToPMRZMy!OM$5O%)-!(PcMEH@{4dUa zIGEN?-jAaRD}h)6Q9_L*qQK6TLnK)^A;AdbFgBaE51zh;XD~8?;J^xkP?*y@PzRkv zhvy#v5s6770oPer4uWCmS2WUPBew-`2Zcl)OeEbKvPJ|i=H?+AeNNwSJQATk17`z) z042YcKnu7Hh-oMFxdB$}dEoD4}6LNF4kIob!`XYNh%GNi!=Nu%*snZJ+q z0E3jN zr^|y8pofIjMg{secW$;LVef)`=y@dqVHdU#C9$X5#}w`J|Up30NWjNlD4$`}#f zXm$DQ*gR+JsjaI@G_2hRTP&VtNX@gUx4pK_Of_+y%;|y*TUTHAymrQ2!;z z?fd9G551N<8nvnI!8Mkp<|a2j^?TKk7<0YVV%OvQgGa1%cHen&0{r85T?t*OaI)`^ zl&_0x@&o6aPh=-3y0IJdG#aU{{QEPE*tSVGUEV#XWtWqSrPv7I(!idW{@oSN9AVgk z`%^MrwULLxM3EusJ%Kt<*rCEuCFEHlpFFJtn9~7W7)PRo;1mhbgzCy8o2zMkbTiSj z1u=5jKt_}U6F(*oEEFJAT}VP_xB?(z4*m~xxSAvmz9cG)Ntu-Kia;e(S_i@5QqYk9 zkQ?e@U24$|gq{nlVN@n28Ky87W_o}%g;JnF0s9cGUFgvp`de)v%^*UGK#mZcss*w} zeIfxZxQ^!nT>_>zBqY8_LXt1-gwdO9w1c_+1`?B79V8{}#{^>PFx9vQ!utroJ{MWL zyO@-mOoV(>IGixqUvt3H*iqnCKf>t0w zmn+&zJeY*fj&YIRzyLR#lNm=3L1%FP(BIW;&!Yh`8j@3bOaplJ+@RuqlZ1!v@bTVqG*%;lSt{1|-KOD1gvi?_F{@am9 z{;Am4?Krli@=RJlCW#d}vTDkm*qnlc$9isWHq5HsG~tyQEBunet!;?T?}8CByME+46}5 z;Wn76r5K-2Mh@8`6b%S(&s^<-=g~_XnWBd9e zY)lZm1?Wc5ijF)YvgsBQ;UV~McUghbfe(p-W&(&IVQHitZldvI-zQC`Pr>Bk3614x z6yu7EaM|8B0k{R-gVA@sq)Z`uKHWO<{l9w0C@F{m7e~4Wl#l&4Bu`)-5Y|Pc4;;u* z813u?{4&v*^iE)(1aG3VWaAEDbQ+syWB||@4Z7{<4&8QIi6R^s?s{TNYT|Mn@^@OS zq7Z>jPEEaH4atkPyq3jOEi4^?7dPRA3+Mq-TjJ^}WZR;RP3ovk%boT`y;H1wt?M;E z{$R@~iSc2zBDMpk_OX`gdn3Qj^{~oH<%RmO&tvlWe5udM-hnl(DO!`)%Y0flT~l0@ z8mGH-Bv^X*mCLV9Psnh4e zzlDj|uXNr^H@P%jKNg9NCP^`2A_ztzFI6c_`b1TF7k3pAzl`CB3y9#rNB9##&8{K% zncTwyaDb(x{18lENyo8jj1t2Sh*#4$Ul=WW0okIemJ_T?ESj^DT4)T`f{H(zEJ7`skW z^*Pf&%X?Ta@@wW*7xPDJ$ArIg4z+ZsL%Q8tg!m_Wk!atU0H6VT2>o;b|ljqxTFyY)Wu4VSw=*TzL^2E>YyBo=gNcc5a zdl5hgoM`EDu7DL51mvLmF1>{Kf64NK$b&A7qTtSoH2R?E8cNPvFsaC$NUoy*XR@2H zfh55VnIsN0LO}k=jfF_ZMYSO$9@}DiE6qazLNWe*j3?py-aI?PlP%K-lC>Kk1P5Ej z-;?MJbXpzSBa}RFCWj=OPI`kYe6j@OKjHpKI-lO$RhU<#5J5H{)B@*@UiKfNbZ5k~dT?tt3^wML5%{|-Z< zNBzHrbO{C?x4a0GgUWNk)fZ8?Y`}{fnk?q|Y zo!Vf-9*3_dRocg>yi44ozN_(URzLqTpOQ&y#th%Pq4aH8PiW`U_piUI{E(ZZv32w_ zJ1@nl^ZCFztg*lt!*`Hl$rq;yclsd-?};NDtTZyK zAwHFwS4Tem7YmIQL->0n=_DF7fXsi1n<1<=;$02w`jAbCc+Zl(?_X6J*vF@nsfps~ za29NDbYq3YwiTJ2|E=+Kd9g{nNKU_AgFp)fX@UZnw$rBo>fq`L&OOP1C zuaI|0X94GNQI(B9OM*-wp}7(A`(!lIoT7>Fg!kxM>1b6zFtl`O|DWxq)oVdlN%MsK zKG}Qa*0Wk=p5LopC_r^tj7y zQI2bq2kguWsgZ0%^k(Vi!LKQsvm1O{m(#B2j~aZJ8C`7fek4C-R9RD(Lfh#HgAG|8f9p+o(nw;Pu{{8?(6|Dcr||GL0%6+p z^%Z0q!!|PKsx97JREMc8h))3o=yM}aRf=Hh3g-F>LH9{KCdX1S9|AXX%i%N*&e-lo9w{j@+|hO^SazT^ z`V2+_Nr*w9Q5$k)6K_M^K9zh}8c+|wvBH=YlKBR?$N+r>%7xjVxpth--zgw2e)QFD z2<8?wB2S}F6X^5?tyQRTNZ=eDl02jc6u$AoP*-kbgz}giB%j6pUD<8@)XDED1(J||}_}yJA z69lkcWfwj0K!A$kL}%2oRwwRbpLg#L$jYAFpFS}w%4h_V6y++bflBCS;_(5+ywcyV zDh!rC8k_I0UhCNXU}^BRq1ytFkuQF-|KW0u(;)+OTHr~4DWxR*qs%P8vXi%5Mn(^|+9l*Zcf0REF7yTQ5wMFO};kP8sNyoM6t0oOIyLIV-7HvyC| zgV+@iMJEw=tY(X%GBENXLk0DagYKb95Kx6McPzNkNOlQ=PJO8qdJq&q05^9p0~H>O z9sWDfwRZ%ZW$)lIc=P?~9rk3vehQXZQuiX1_lSW-@xcD zuvrSuSfRTw;YjeWIVh|FGYB*>A&RoCk-<61L7=?vxp+D3JY#wUm4YH`>{%tDo1(|G z+5uPp${Kk3C@tBuZC|$;Fg3gMlXH|c0#))Jw6*b*^A7@86PP~FfTsw6fE~4(ySKM)7&*M9qp>Y#w z6c@iWX_mhMMI)ZG$RCAHSRfZMaJ@o%xCUZofW%-oFcN77CR+_h>!3513Y|V zfer4@7=q;(gc0xu4nzMV;81VC?1KdW&=>#|fRFyUv;ZtNAUzP|!lfKQ;yFl?gA^gq z_b^SSKv?JGN45g&(g%hf#0DVc=|A3Sm;yN2ve&k*NAQF1Kw1rOEnqt9gv84$m%}uS z)Z#zCEbza8xnUhYFP+}fqi9NTGQuu`{HwdS@ZnP+1Jb$da{BS-uB%VgG8D-fO}U#>JWM!qy7Uq#7d``3 zE6;1Awt&_X^;!PQB?)}04o6!4@ijr^->_i1Tx<^>W)LI=7MAf1|5<~9p71pfe#6&K%z$^c`RHE;jlVmRzYTGbg4?RVBmfshCt<+}>~1J#>A!eMp%OGe_zHm=n^0;>#?xC|xTzobj564?= zIc33yy9?Kknz%0?`!%vTuvY%a??*Kl!t z{#0J>4+U9g%Ai5yzkPwbSpic(lWzgp3?#w7UAVxY{5#&A19gxh$qnGx?ydY)lF(T& z*fwOqb_F@PfTI{5p;M-O!dA|7B?4eD`2F+pe# z|2g9T)QF}c04J~z3qx|xlOd@H5brgVhaP5JNJu^$tPf`hK%a!51%GIq(?7cWyFn7h z6;N0IBvRNz0d4sI82*p=YGEXR+n1jqEdoLg%8`FBz*hFN5s0n)1~fJe{QfUL@4r?6 z#2#Em(;WPngyb7SGz|`lK-G&|lH$;~CaMv%?Fos@tvOp)Z1|dJQ$l{KVVK~f#r{g4 zebd(A`_&r~mW8u;?#OQsm=f5>$q7g|U^j#+khUB)J^5j7k7j>@BD26&ft4ObWw2a< zI5=TACneaPP{n3mPv9g(wp2=$B`_9%@Pk#8d%z0E$%CvkMbI`d2KmDOC#6okxA$i0%UP1VAraq42k1q=WcjXgy@Ct)iUato#O)KJJMD zrA(kA}t`-!8S*(c|(){--!l!vZ0`vJ>6eUL&bgI zEZyK}`OnR1u(5v^A4URow)^gCI+qHdfVxC7riaW!#eYCL268lI`u!1KI$*$@-zk{T zJ_N~PaHI)NbRaU=jfSzH^Mp`(9tyEhvl)+uZhb>hNPp$)2Ju5+0e)ZD{sOxlH9@Um z&XE8zD^PFvBpHsI7({6)8E6@taoIiLBLI$(~;HMD2;H&C?9G$>% z04gv4K?X3~|4SNiP*aKdK;lj^AkVGJ`xYP7XykH4o~`)&jWJ>yn|grvigzSakJ9=h zwTmwmDqnd`o+kr0r4Mh^^(LFlJv))4(VEk8{&0!GnsCz_G7us$5PR$t;3RC~9 zCOg6ZeSeUoLqc64G4ap8t&myh7rOwnLu(wNFY*rjiv;GT zLEXbcd;%S8J@P;OcL1W+{||rUm0QCz{6K{`Dgj}E{;&5)v@pDJ(RqL@J|MUklG?}| zwgRbPl)$mQ$oDY2L}Wbhd2YoCLtHwJYwyi>-{OnOq?Mwi#Y@s;4=FX_&tW|;nT&g5 zGoI~AwYoRP^h6v+y|p-VgFt@!2uOA)Y^t~(l)EIBc9t%Sd=i*zsRxeUl39cKD?sC6 zs?rhxf~;#`QvZM;;nEIR3T@$D^APQ!k7VNE=UE=e>|neP9dtnw5dDL1YXbWY()EDD z>NIfa?F2V+z&`k^i0a=yKWI+>NcOA_^D@Xt_?OEIa1OAGO@0TAZ29{@Ze!r^gRKOz zPf%Y-dSFfHdcp6?rodYXryGW_4cvX?kPL>SSN5HTq8GqdaFi`=U;wmk|0oXI3YmCt z{SfGiDhNS>oUq`g6re?8!1f`e?FP{r&^JJ-N3uHuzv7*@VA-HE!ar^<#6YM;Apuc? z&_E!aH0WE*fL??Kx<2Aq1PQKzyHjQb^11>1{~gK- zm+AdSdh36VCC>pXAirI1V6Bj>&LGVXgkfsrW-U00`~r?Efs+IXx9uYVaB4WzgNwo< zvjUL~Sp~x!wEGQ<=GltsmoW8e_n41>vt$l^3b#$M)!rdNowfk_S5Ft92|3 zw>qwryY|TIkXywws-Jn(?vzWX6`>*>El}5=62fVppL^J%CNV(fn3z>d`H&%j9Asm@ z*1T}IU3Yi7Yl?cSZO?xF{Z9gWg9tKW+0}E2y(F^c!0Od+c>!0lYW8u*)*rH45nnqK zLL$4rGD!3^14*erSy?2q1?wm3h4qi{XBuC<^Tqo3()a0DoUEOcIHm9=d^5~_Q%&?k^`WJH+|_HWqZ;i(*#tUIena`f zFN_1rW8(D&7lxP~(viq4tyNqZKJ>eJd^})q*r9U%uFt+7GdZ?S7)A)0Yq>KO z17%lb67HK>_u27xz zty^!RCwzY*qw}LZ!!|SzY}P0Siq(ihKV--8^=-vU)3)ET2jzDef1Vf&OpMKvJ|SGW z`hL%J5rNe@tvE_dN3g!Wx1fA5)IikF)9@L{gtBMZcK78F#TR#OA1ktGA{=`~yEHQ> z#jnV&?<~`NhFiV-%CF#OzaGDJSrv6xc;#5fex#LPL4M;&?>%#}114fq*m>7-nYrK( zUL4v1``a?a*>%2#9M_5;qKS8wnhJPTUQ)dI^kmS8;}d+)#pDCGD_6ts%)U#%_A6!D zXP@Uu%Z$o)pgi6uf#uaBzyNEM=oI0p`{hmTaYq1p9 z!Vt~&fe%GWgX9Z&<5fQGvzS66+b~WxUZo41fwhpq~0P7VAcr#dpq&jdF154v3QXBEV zMGNS7l0 znHmqPzJN&sDFjlSSZo6hBWQR?@P}7I*RMnUX-hxRk_CVwd9dRaj?Mm^tpIg}Lub&y z9S^D?S%KSZa4MmLkSqQoWTS?`nltPx1%m=3mJD1ZT!X#saL((59}q7@Cut7nOaM{l z+x%%cKSL*Hz#9+oUB(F5DUUjjA*VX*ng)5y*kP04uUSG!_~Y%@+AEd;pI?KZEs&Kg z0-Yx)RSX>P@CfA45zx_4P_P(|8UwD$gbApmF>+V|R}(r8TP2WN=-I9;c1ZgNXI5~s zL>QBtIB;CBJpioa9^lLYmH{aGyac%|ft|aB%Aj^ATX}EX3yhDnkDul0A=_*Bvb9En z8v-ftxnxR^Acg)6f`hsHr)PM`PMSF6&XgY|Ug^>nb$&U}Q)eswGf3va;RHS0yN{XW z5{X8`>))0(?FL4)9xYr6e#UkzUt8zE^N72trqlx!wR&^?KO@=r6yka@XI}{3A%2~? zG%>)^?)ZuNo%D}~8-*cu_givOnqNp%)AlrbJXbncq;}S?-S2v(wcneT zfe$K{v-jRPwC;F76CC4$QEu^}pR{|bbH>zub|*WDOuX)mn%3ohFG*dR?YGBi&#h4s zi@DnT6kR84cb@)Hdv&4?muf}#gzXI0ujkpVZmG#Cki@GjvND_hO62<}26^j=uMKp5 z%hduLs*mPNFE*dbw7@Jd6_CjC-oF~t4Nf9NdNqa3zHO1WJk#6vg}pvCnM&GZLSxP@ z*2~DnVbwW*U(pRt8wcDqzr#OrBxxg}qWJK(S3{c$BoCdP%-^fYU|>o;$Xb!>#Cwmr zfAhJn(qduKGKGS7Ozp(=T-Lp8rgnjQgh!dEH)xW7sSG=|Osov2(S?@u+`MAxee=6r z&Fz_M5jp)&`LZ1IP2Rko557~O-tvQQpnJf-=3_BGL++h;GKF1axwdTYhzwsjESD-7 zJ3Ec}$5}lG???s=3zt(;{8BmJB5ApDsAR>tMRCWGb(5>#9VdU$FLMZUY;X+leC1i1 zsL+4jtv}(ikRz*qRmt^gnca@0g@dBIy2?(TTnQT0n+txpAtRvnVnU=u^V!=lIYPli z=ojsITJJ+G6{3f$O6|>e1%+|d(tKLjjXz4}G-W`n9L;sNr)wTg+B2ck742N$&y!x} zkQrM`9y*B;Z!Ya}(xCB_nAg6}+QM2?-WD3_EqghJe355X)oFL-$zztz6qh?|ora%Y z+r@p%u0q(}o*{B@_R4d$Y?g_n){4O^ujXg^qE~{4W~gU*R%^;~WVY$`vSs1VoomK6 z%#p|fH;jg>AI4pOzUz)9$HN&ag@uZTUqbA}ZfqMe9il(J@{mh1xdV9V`T^=(JpY1Ake0JjoI1B0R zJEU?WIe_y3;$8vv!m|SqQ-!@T;N%@B=|IUv^Nj!VBm=U`fEo%sSkD#_O9b_MASWX+ zkcUck>!bxOA$=1zv47`3hgi&MdU!NEtXsk-MM$Sm6Zk{@Fd%6;;33Gl4p1}^w;7zB z>Y@VT!+_65;6VXkTOoNc`#cY<^R2`Ks3rLKVG$gV2S$LkNiq2 z6od|5(2~_K0^n)v1J9#AHR$ud&Ws>K0UW-#!A-y|0>u*|v*6^1j(PqSgol_%NWOxt zBd=#L1^}>@d-v^?+R3f^#<-F7dPXi8`}qdW&@zh1n{ffuAf9Ow^^_r|A6G<=Lc*=y zv{!eYcHQ`LEje82Cmq*?v~T($#)Wq-{*W^fwhK6|#O*t@VRGBsNu>D6xX717F&nmL&*HCMG+j@24GxM(3Fp*ELiX3sSqMsN3G97k0jz%)(UdJnq za~qg_YsbUM=zY(~>(qY~cX5$)7}fH5m~=$AQuj(hdALePiq_$e)O7n4&S64FC$uIL zF>mH~f0(6KyPa}PW=EJ;*ymJL?4`HEk1#Uvx_MNTm*Wf$n9x=xw-jd*80!+L))tt$ zH-$n?yjF5H?=i}(4-sNXWG?jPot3-aVmByXaD)c9xP~Q@X@vt`c0*<-u;c!9X#!ZcJ;8_8SPPfk#*ZXJcD8%M=kHKv^az z3g8%$Eek}GWI~oP5_3tZj9j|a+y|ZGK?gwK%n9(3lYik6#PXoC1V?I806aL1XaMoE zKTHEbwLoQqjBjwS3E1?1PUrT44GC_bAPxn@Hwq3N!8LraNFddF8>AB*L=K{#{jN$* zZfg5Tzcsl;Rw=S9F(NGd?0f#NPT6E+AkiwyJt0Q-zx&%Q0}~N)$Nc^XbT$Hzft-4P zl-1-QVQDLl;PG$7Z)JaHjW4M|zP&DCUrhkSY z11>bsJA8j2Jv_jP1>8HJkOyk)KMD|U9aISw0p(VGCpV~S1J$e}1LO*wdjZTr*YW>8 zoY@5zGzQ0$Wa`jhXd|e2*8*b-zTIzWbNrISY3Abq<)A+R1r0dEf;shWA>dp>@-4~U zI=x${65NsVJp%M!6g|Ly_19@rIx-qK13|+KkL@d+I!K-w%aI7l}Ics02A^?QD<@b&=5Ntd>POr7ZRjmHWl8o2#* z*N)WP^dyl@bCW6AGj{a3gA84$U+jPX?>18R!F^_SrZ`6jGb3C0t-Z0;!F?jke9Z70 zNl9L9w_9es@~)1GT8>7JX1ua$yz2H2wnjF*CPvKs($aq(68-l>3ifu6yjo7ij!+NU z4o+rpSL#N#X1oggys}0(Gx!&>7v$vS<40;*U}5CIEGWRMYJ|S$7vKkvn>t$Hm_WX83o{ywFD&(*FRRf{l?m4jN0z(a6TqM8?kC#*CSdR|aQdX6MK(CUA}y z0ug%8Eg;Otd%@_|MKeot3rA*A@JYtm9EOTnSVWXp&Bzt`ARs2n2alO;%X%vJ|H0{=!<*4|a0nOlsX4<3M7fKP-E>iZfq+^k?}V9=>KR*|AOrQ zWik1L|FM|-e=R0h=iiGdBr5ig#S{Te5CQ!+i>Yd61Q9p0pdh-gLZbg%SMW4gSAcf` zK0dIn0_UzV|C4h01^&GtmyFEKcrO__KokcxYVvBD;q09pOw4d#|LSQNTbY?Sf_F-` z;D`J|%-}y5cYk&@XjIe^VTLINyc1)FNCjXQ1`9MQ2r~1-TZmUd2!I8Tp}^0Kt^w~Q z2YVAOGe>>iOL7Xl+Gehf$WXG#KNpaHl%Q$w%GlZ2JL2@21zqO z)BU2bTur~NkeAm(DY{zn(avSmMlQ1vJLulIEKKn9xbT`~`qvy@`m7J0ibs#OES1!1 zbIb2O4Ryh1nva*SrBa@wI!1ZHRh)<8)1Gu^_t2i1n_Wo>H%BMxUw;@{vu`EkcK_O* zMA+uweaOLu&LMhMv5K5;Q~I^!aovwrenOo7#dkJ^E*gE7yR{>=$%Ki|DQ&DRM`-V( za*_S6UgxXzJh-_I+-eyloARiC#u^xdXQEg+ze{}A(Kr60dxGApl;1WgrWX&}L3Nco zIOwKML&p4Pt5WSlXObxim(n@rZ_s4DWGnKqP2~|6 zjJ1o39=fjEX7I>|djsV?ILpBR6O03dIY#X7)xxym9v6&iAw|B7Y%86Gd=CZX!T}V>A6L(jMFZ;-R?P9;UDC|Lhgb+agFz~ z`nEe`r-tQt$RA!m(bRS9)x!JKn>$ux&%L+v;?uj^6>*`V;Qj-5hFG~Ha%a!!C^qbG z&wN2Y{E{uuIpb#>*EZHCYRU7Goq@OlMiWZGUe2-~!xc=BOf(zLJlu3G14hEXF10C{&opwyxA@#9 zucKGs`_<6J(s1!fEXDlhP9|H=J-gHTb{P-fdir7i>JW?bbaiFuJH%(z4S>A{D+s=vy2%I+O7|FJ@fYQKBCaDKtEgdw@GB|-7+!BIziMp_$Y)I;qp z)jNtY^%wSWarc}I45Uqew!Woa+>9hU$YpS3#$vb1y?lHo@~u$e|yfRdhFBG zwlNwz*2umWD`)dnC~OWk-MSWc@l**F?`%WaqlpsDD5|##LZ{waRI2W1beS9#n;Ejd zck6984tA^eCZMRFK%$lt-4Y_e^%mwWIq!<{vMXVV91A*?!M9Km4* zpYE96eI55al&eT#`@M9|B^6^oM?3Cy?aK`*%`suAd^;ZI);4Hn*mJ*|Slr(A(^z*^ zhUtib$)48bcmtXpO513RZv6G;W81$&&szG!aWd?b zYts*VojNiJ--o^Imjf@UwwNp?huq_8d;FqyXI^^kgxf{4z1BSK>{-4;?c~#}svEm) z%!9TiK1yjhAfaX?ZAx)re16S$;#%_i_vh5;j`T=;C1mnYRvx;d&UDYujMM44m$ZtY zJp0UPohy#)p?wSn(p9ti?fqOwwwFxaJ$v`yi?!&1Q;SlRufNNvQ&?JmpUm|RnVca? zM}LyMeBYyY+X`m6mLvN=DzUJb+v4l6yg)_aZ{-CRh=`I1z0v;*&lJjD{JY9yJY5Y!QS?ky&WWO&+#e&`Q&iR9+DT#H;rs?K)3zxMaVfpA)&uz z$aH^iRIftV&aWg==gPOXLoutW6c$nEX>DDiPX<0${y7tI2Rd=QQ{?$iWA`$bt2fRl+{92d09}b$5Vo z-iB(b2RE*AEi!-)H@I?(XU25{TjnUCCR5`8eUjq11pMAAH@LW&^9g@b-X8GT_d}n+ z;0LzFN>R~j@R2NifoD;w!E-lw8>2kyb%J=6DaUIU^hvee@&u7n9_dAUz^p36Vnz@& zyj86^y56{|d5{D?kg1v_5xh?jOOF$`K@Zh(FG@)Z4C>o&0jbO>FbK8WbZYP%JV^SC zj8yj~D88`K1$^&&wPWS=id*Sf{!h{e;2s-CITtHm|3T8LW={-?)}?sDfN2$k57m>= zXOWrf09dH*B7N0?x$#!ldi$AqNu!UnV?7!?DG?Y>MQCDq8gfavtIFKw(NH&UL#=XA z_)a3-*`-A&j(da=C_pP;r2e=^2=X>Je$iwGSFmynd=Ic)qT*RjIGjAp1U~v^1@ha) z&Ki}j`k=s#b1r%r)OH_+CVnf1Um@`J6scXO8Cd|f$hFU&!D5NmpdrW!4>VSKn94xh*5hsNy$^f<*w>H+maI9-iIPEQdE@G7q+bz!DS<)j?EiwSj&<;x z0hCabImh@n!clTaD?WlQhGklORD;9bsU(zyOd%3Fmxs;-kX>axN_JUhm<=4d39^E# zn245@3CONdtUqaQoun0tF2_JQN;6NUT%!rsQEaCbujsAQj~+#O9_Oz?m#hGrjsCp< zfsb)tr*z4wKiFC(Oglh0IoB$^xOs>d#c8-E_PxXG7L_)FNwTAe00`cqcyvA=S7K+U zP{?96>wA0f4JXZGXQ58DO3kWj!OAT^clv;Vzo-+#bV{T6Rha_&mg>Un=5zqm20>5> zm;%BCvP6(B+9pQ}R<0szs+AD!>@a{mx!= zW2Cyo&Z0BacAo`Iia!sNh^{**5QY#(Bsx{}qh79){(8KFIJ&!wnmr9QtWlB*!(D&x zU{Czc`e&7??jeuYRWx{_YnS{Yx2xTVbN4}izavrBfL8}W0(o;tXp6(`X$N) zRi|bSRp)w9AdlQ+L%=r9MW@>JCOra$@tuXsWd!L!nHbF9mdxQroTo7d)? z2y0ilNI`|(Ma$WBVqH4IcfnJ>!N{OHHF04gP8Z{?slMwD z^g~RUled*y8Hdv>;eJPnih}4^hO}XoH(_S5y1yB_F|oWsN{pY?UF0d>)xY+VxG?Q= z2|V_;Iqmh@#fBayZ%yU2h)yii=JaulX@h4q9p?I}C9lmOP4#vATV99F>2`u&Z_w5p z6~ki&Sg=0b*mZ-hM{7U$KiM7_-zhpg-D}9=*JbGgaaW(TRie_cn z--_Fmf3E+5{efmZzHDaM6tf!EFtsAp$$NY1UibEcpda3;fsO8!?|n7i(s;joHEY|! zhPC!5IZQ>~E8G+|Uguzf9@??0Q&&mA?cb+ic{f{gDg&qkX;Fm@Vr@jmcmgDATxBX( zH=B}TM$Gp*lPFg{V5T_S$A*)pW(^BAAx<;*s>W#=Z#r&4?8}$vH>tiZxVWjrITlJ< zUa*G*-gUJsvsdHI%ZUV{ZRq9tiBAuGbogs#^b<$VKtf;I!e{Z!{W&+>z^WY+m*@H= ze$N%|PK+JX)c67&Xs?KiXzOjlHwdVi-`Hdp7!)nZzEwV)B!=|_jc<1s4~&-+iVYp< zjblbHY(CO#c)i;)?g#|;oD9EIjcmHV;^6G7yyXr$hU)S`JQt)aRmAj6djG;tI|LON zIN&J7vEV(4>pT&dyFpdt^jRzXQndjSh2&vr)ep2;dS_3)yrjADk@@cI_7! zG$bOBM|AdjtKSSN2*Ee5P8|RcL@a!}mw;Q5g#ny?=rbM@UhrewALbdZW*T=c;SP{& zAfA1;th8$I-nIGz+z4PlaRU0&UGz8sAZDn}mboz!TMmNd@{NA=rLJ%L^96RCKgAk@SxL0+QvINi8l^!I0JlE~?nyE#RlEsw;G|i3NJWlM+ z_qv|c%!Bt7!$f)X-a~f5kv$zZ^}-4V9c*S6Uo5{qNXp^;2up{GoS2dBll0G4s|Fn; zYe8rHd2C}#Q3UUK1f6PBdz_j#uKaoY@YL^}VO- zI*(g}ry-axgqoq*i4+X?#$JBa5JMk8CTxpRHOo$jQu9{v$y8>s^pnkx?30@b5n=mp zL-Q~Pit6$8s~SyLa|i=#Q7Z}jyiiBKXo*FOG{!II@WIBOXFu9?B%Fh~H+PxcxKB0k z`q*rZcOPLb1v>?AA<#rd)SRt+y%sT3#VvH5)YZL{7zjARV2s~4(Dt_ZW?+l^nc}|P z-ibZZz-R%ixcKXMeop?+P(q>^tXVg&Ve&TfUSpN(Kq|Bgo>lnbYi3-(kq2#av!1rpM!zfUd}VCI`F;_~u+QYS}>ku?SpVu9e}&HO{nLl2-N@3~bUFQU!MM zMMo!g*3019!W!dLFG8$**%^(iJ&3iS3gp7K$b>NYZfNp?6DhT{B@D`2GE|w<>;$n+ zO#c~VG4atLLKxQ|X1|%FS>HVdJ#s4*NN4LL2&7Zt4(Czo0F1 zgVAd#X2jvDopsU$3pLbyRp#uS(`f1*hh&j&EUJL%HxU5WTiBXEemDv3fr~Q(kfGI< zHQ(;u8;9YSN2o{eSXY4=#3T{jE*3i_vJvip8jRum3XhDYNdLgUCXmrvE4}uEMe>1< zdo*gz7%X&dTtyj%FI(}z>o1t8dx%C}hY$fuU2WK2JMT}l>wL(Np|_uK+HEFbr@D7S zRC_BGI|cYl8h;Inju`$LU{Oou7H{D(EehZfNJ_-wUHbuq%H0TU}b^t`8?|S*)YtD^Go}=uVB)Y=|Nx{?^yq z0RaF3n0o^87AV(Gg#Iz(R{!na=sEajGv)#trPgW7nc`OOnV-95E4;|9Izc>!n7F|D zv;AdWdKNW!BUA<+_&79)kN}>@8clr`RSXnRQXXndMGkr>D*&v~i@e52$VuAb)P3uj;b?_(4b{&%d z6+K1?A5EKUi?AqYD|hi;F~O7+<;SnRoP+!aLo`z2lsgzEd#%!D=OZM2}u!F*`wl3#AN8Hsy2tK*Eb}E zJzw*DwH?nW=6Cc4-}*Ms1k>>5JFh%>Ms-1zKf15{BxInxWw$Fyy1t$ozwqLF&x_ZP z?!%WfztBX4G{662UqhsCF~_&6WAs9SuPZsvOC*1U zkoB*ZFUe)f+%2*BXEQ`4L)9n8zPm}6e%Dm7bqeI~>f0=Ue&079%9xnXF{W+JfSV@X zg1)kQx%qO;XHl#*)WNE9h6riSWW+qp#~jfcYe)2yNp4h28?#uu-P^(UziRbKA~l)C z=^InbKM2wNZSaQAD7|St~ zkjL-5P;sXQ$!oG2>g2uvUXqtocQU`&Sp)V%CSa{+KO~LbmK<~mhB-_^UIV5%8lPXz z0Zm~@J?%&X2D~A=41AE*NjT?4cp#zD?~5B5t5qJb$Mk2r2k9&+q5}O?)LF(u3gq7! zLHf(8V}z#jR`*|4@hLD5rBbzBcBP*kUtjb>XJOfRn};N6C!hV?vfbuJBzwb$Fcko`! z7D0Y?X*?c3tWmFoJR74K05hob+9n5(_RLPKm^G}J-S2Q;FWx9bApFRWZxmyia5Y@d z`HhJ-&-}PqXt3vjVh94Zw;?0iEHx}>C?SoZ6>+m;t)8>!Pm5Nv30rF*)K$SlvVaHM zffE@Fc0}JVT2EvrOP=xg2x4dSpW2=pP#=(6a|ZdR-iIy_6(A%dX# z94|PQihy}#YQ~j5e=Mo?vQ@Vf>;QFH!xCE%FvoiUSO3Wft&gvSm*`+W?5Co7jG*L3 zCkB&OTu15eqUcqAbO%*Dj<-(1lV_gz1QbYr+G&C zVC~Cm;a#ilwX`^g2av*|mFhEg3XsBvWz}kn3rgKq*-6$(*2PGBUHqc^Od$dfU$Hmn z2#5A+Vg=((E=onZ*~i@l{k9Tax@EhnBs|6>u%8Cmz@5ErzqEd1AP$!vFWrD?TYxvl z>8^1PTc<604$49h*MZHBa7ZK-4Q%a+s;9Gz@b|pt6gQW(h?!G*4m`;_0XV*a6~O;y=uK_Rpo-N zICedoKy(%Uz1gofUur9bd z!RBR}u&A6#gwH!9mInZBXf~`BAWK+lAZUg_^Ag=8PjTrH$lK&HkwN|6D;kI+aNuna zb`e&5{mUwj0P!nWMfmAxTZIqnYJ~~+kx5hRV$xVrL>NjLxy9h8?XOT~CWM!y1g1hB z?4I9~-szqQ4g&b2)cH>?&M0N4<7X*0&l+*d=BL@Sy`>&jZAmMO?YrIgD{{t zh_+efBG1V!cX%@4rcnfTI9pcfqN`uC0rq>7bt!xf!W>aZAZ~QWp=)HmxLLfRh482Q zuR4{*7$#7ThjO=Yrbp*zmD6AS2Ky$4^L;)IU6hW2B< znPafvMrhu;Kj7HZDOQI)ACh^z&^oRE2 zn=i{vc>HgSmk`7^IIk@32QAExmJ6+N4Ig5xbNg{HC%7kOp7m)M-uD+x0^=9+KO~LJ z!2;@TaaHx=vZqxx1-!|L6P?)H;)pi4XrIg7?mU^H?q-GEdX^K9H3oW8#=yn|L^PnV&MN`;Qt^D%<-=Ll;C=iGE4qT&3I(=gs{d7?v=!k*TeM4 z_RGKYU1D81MDrxzK9IeU@485|zBXoQ=?B>PwugULN_Y3j^hJx^mN> zjTbiK#XN2}JO4bp*0tKW@&9)-b13N!yHc)tc4y`lt2E85OQ%f*O0@^sEl96#PLl#r zDwunbsT`2rW_iUb(tsuW;wM)B^QTAl%Sl#+G|=60yStC4I^Op1hCq>zzTgT8awrBi8G`VsBSN9NdTemWrE zaTRt}Kh3S)y(V6)aAN4jR>KClMUhp3oJHnbquu)O{@BNr zj^eomx?6yg@dmRimCDxBIb=t!8F`0%{&>8dumzOshb&>MP`ziAp7q^Q7{?TkcB{kk z!*;xA-@c+pmBIx4B6x>%@)sK;*1(ZoNnoY;*2u0WvAGKD)Y7LH3_92k73e(Hgatg* zY%l4j{EqHQ`M|ZeHtUyP(4K=80jOmzJ>{Y%S2Ulz_ctrdnr?x1>ZgNS)Iw%2ovVK4 zMcHuwtx5^q=Mh?w-&VFXg}E9nYwhjS!5pqfiH|;Rf1+bM?X)$G^9+|>e76}lIsJ<* z)L%){{7=iivvAH>e|2 z%nqf{Z9Ko2puipdNVzmk?9)z5zf#?w{goH1qxw`bJbri=E2~cy2}`GSoR;74VD*0f z+<)h%CDr9p2Y=Pui_Y)r_FFz2;bC}E?Jg}`_%b59wcWsq{Nv$(LfkC=JKf%s0w(#8 zQU$#x50o!Hti&grIgMXvFxwYGl!XDej(QPM~M7G=jOmZVK!rY(W3+{HfPo6 zhHNhCDIPzFChI;GROMoL_Z;7+86Bs)n{^^g8T$DB7|x5X-D_dFe#l4(=)zg8)6%qE zwa(s!#2~dbv5H=g5f86vQhxOZpWWp_>px3=+^0=bzJ@vDCe|RjTXw&7Uhcbo@E!6!0wnt zS~-%HYxGaavRRLUXKxs*WItx5o-z#N5WjlpTF!b8?=NeO?^SH(EA#>S6-M?a3OVIC z&Lltmvey4_(&!{FHy5#fLzuXq)aN8E-1Y|&UHPz7JuY|ljmyWmH%gPD=})ZC)Ykfs zPHprRXnZ+xWQcKOR4=7)V1dbB+epHmVV-a?IeVEe*o+`Q)-ibP7v3&8ZEuUWBYCqA zLKb90N%xXd1(cSv2M#NUugHh>G`6RNmZ$GtKlfm#Bq=c|BkjCGozJU5%STt&rXDxei0`!ui9(Q&m=3U1nw~;>?w-lAny? zv2v7;D?{8fUbfF2k-sv)JDO%T*0Pv7P|uw;)RrK&^WZU=QolcSDH4D6GU91sq>2xhltgtPhjy0mlJ4ivoNwIl*T?&1@91G?sI{+OcGK+1 zo%^<5=JGssMp#&Dp|acivR{Sh^1Yp6jc#DPzRYuDpY#c{W8%5uQkFgzzU9QXU2Uuk zLHQ~#OFrDmrJ=MbFzM;^R}Ez{H23ORENagjSV($2aaB&&I=S%5$MfMWc~y6V!Jb@L7L{8jhfO3d4W+q~t%-Yng2^4Dq`2^vZMq^{=Y z6X!WdUt@Nk(cLVay5y4GEhl>7W`b%Vb6KzF)SDlA8 zwJyPjU2@YgFY;+;uqM44n|KUIcx&vf^ujCl z`r^C1M*V9!{&t-wRvC@xF6q_J7zswlzAXPzUdiFj_sx&MygA>=hJC75_qoZ()(1XH z0lUFf$?8cQ@Ap?6)o(T&{I%sYQ!nd;h2LgXO`4PBEE)b)N`El^skafPL`ac^CL}d) zt#-mN(t)L#mG{idx4OBp;cbj-Gv|d@w|D3haZA&OPaU4H5pMU2HMkl%@clcT-=|X# z63#VO)SO~`6i^)>`k|`WsF~%|%!G}Zh@06GAtK_b%POOEzg@dySz!y^=rH{i-x2jAC-FUUK-A z#dl3O@8t}95~+6u^qM!wb7O_V>Db~59nDSRv{ z+F=YX&Aq=BY^KWCVbV9a9`tIe!mxhRxNr3%#{~=%zc8oN)Odo&-a1h=DP5}moC!bM zg8}aSK6)r4ab*!tP(M9>!kPGpeS2B$=`&fUtDM;9B!cp_a)&8vn@=_l&S=IbJu>`! zpSd|%r*3v2P~uos{OG8*iRk6ZF$_z~UK^r`h?}2m)=ddg-?4dh-d>j~`oYYSeh;rx zRlV=tdrb^Ru3gZ-Amz>4^VCQ3Aw|L&p%%D<$Q$GV9?hGeF1#jXYP!IwCUj%EDrc&rXltE^HY`d-L*8 z5NG#93oXI8JHp_-irP0C#-VpQyN!E^+|GdgKK>=2KT&>^UNZLMIObGh!$CsxZ14Nn zMI8q2M?8&VvvMk05B;Vlyzg9Go4@3eTuF!?^*QG-zEJx8sd>JE#>J{q%%nj$G3XYy@YO-=7~h7$r0g|b1^d&#a0IwgIxvqpVawaV<}b*cwCD- zzq*k2-=J_SW*nyR?E9(|Y~;LL#Msi~SU(n+F^1VCw)2xYkNL-V4SzM&-j}PlMyqHh zLNUaG!aPz4GJmqU1={+D!bxuL_eCl!Pd8UE61w+ly!iH^69;(6cNLB6AvhK>BNr=U z=H4)x6;lHWEl#T=rg^xQy>&K3!Ea^-!yCHJ*Qq(iB{|kM`bf4OB_#|k_3fXm$@`OB zs&l%TIg%eQOH@t|Fb%cagy7olG@jWMq@nSWc6d{(!Bu>UjU!3yW=FSGdr?QnVp4l! zxjnyP<=KZCSe`C(HIAkX0fNSUnqD_+r|)bM>3z|}FFFU4bu}w}Lc-}9i4jXs3C+^*?hTmuMZTxv_XlxY=)+5jfKV$j&qk(vI^YyCo z&Bfs9z5*KC@>xqJkwD@=$c0{@?vQH)7i9ajW zWpKhw#qqV3_-8_A|NG;!jOU#5lrX1Aw>$9|$>+aP?E4?Bj2o)OL?=e-)*q&ga_Fw1 zQK|8wpo(JGG^SNmq-!MGG@BBfEQM zh95L-j4T8l5%d>fOG+etwbmPBXf!xE*wN!uSEF*Q+f0($kX)K-kgm!grLsJOpbcfaWuPcg=(>JGSv;?z* z8=H7}M)zh{4Q;-%>l|#si7-uTR;n%mxYx>uxal?u!rPNp#9e>^J6J}ObkId_&iskr zOi&-+6};6HlwluRcH%0n}a{yZkfy~N&m zO{70dG1o9GbCzUr(;5oRzjlO1s)m|db!M4xK>l)eCFRT2>eYld%tEL5&&+yTjrTwC zpmZsYA>{UkMKqR2u35iN&t15=J=RWST+mw@C&qRr-va+mD_1px5C6U_&_AGBma^e< zlVKTWNESo8b33y+uez%7?VW=!U-qq=ajTsIq%kqSRCsf9#9Y(|5)lG|j>RJ1F`A_U zKQ(J&x~*fbEYsuX+r}Svy)tz;S?Eh~#D4WCo`ycR;~~~f-i*duZ(T?9M43&MO$I-8gby zgE(maDENU8)Av?WU$&O+`Vf*S{&0)+je51VaK3yKRY~2s`(gJo!eYu47|zB~I8K^Z z-v}wx?G0^yfvunRqOR`^;D|sznbeMR4sbpLuAvokhd^W4NKaRpj)=A(!HD z3^0TI`JXz9e_3qq{JOw|y)EWbW5sl;V1hrYyJT_x(kX`t({3BzQ6Qr9N~9{*#-{OF zf)C4hH#K|Vi~nM~3O?iTh< z)wBDY5viKilF|0w+2LlRRV$c>@{%%a*PF@5&O^UShr^>>O5!>`SiSC!hy*H! zpnllWYIPw&LuX(!>Qv&Bs-w-?$v>@0>Ml=Z)UO}jUZ9Y@IlOASL=#(f{!8^KX$FOA zYyQP(pdeWHnH#4tj!H9*G#w5|A{jz4qtI)TN@?=Gah1_xuq>zOO287Kc|fcfkI|nA zH!iu=sjJZJA*&&%3inuKe)jX^R>JAG>3h3_YR6ZUvQ3gBK( zp$RK4d%>p5u5_&|s!~FL=Z8f_RYJeVFIAb_Gr~nGrFS*+LN-fh{~z|wI~=a4YxE<8 zgdhmfONbJ^M{hwy^f0=JZj9dBgapxpAbJVWjowQ{kKRQ$dhZOzxRdtwd%yC0_x^F8 zS8^WX%$al6+IyXS)?RzfZ?(~&JdzYP^Ur20!_6Vthg}-?(IbqfkAvG@oH}w} z5F8W5+sueu-fvz>dh?1%1laU$0TYT3Siqd(Whe`x()A6c?p{*;Xm zmSTiy9gBeb(WKcUd*~J?X~@TL-oA)jlQ2fwqGrRYkm}BIs;WSzNg@H9fSWZF>iY@Q zM&SIl0SGyHv19|wzP)*+UbnOfVG^$W1C+;cq}@RTJ0|(rxPUJd3I!wk0ivhN_h(;N z$Cd)y2Cc>{A`x03Wb1)bFrFa;Y^*`(ip6?aA_KX5AU`ozOBU}C?BqURBZK|qjAr)C z=d^OY@YsYqxjn;|gP&UItW6e??6U*kp!5{7soQ0#GcuO{`Do}7ekj%KI) z6~Xq-{^U4)C#ywu)C=}_?UgkKx$TeNgy?TM8g%%`Pu`?Rta#G_KY=AzbV3|sgnT(FNx-Xc;Z9j(rn;yd_u@=1ypf_1 z&!$SOq}}#<^|llw(gGUU>^&vXHeEV(O6`M`*>u*`^d7C7I!fb3W6)7_urd6;(`7Jn z1}-zEDTS2pRED+;=zrADi)Kk3%EFG-&l`_&dEb-AubZc@Fu)SU%Acs)BrB(kOg2Kl zcn;6_PP-=8Xd{7`a(O))sVI1pB)<6z81!4{LHif8=N!3H2>KYsw5tTqtoH{dGVz<$ zfHC!;prx(kxO>ORn(6KS4^{`YI)bMsRF+MXYn+xoDCe+nJQb<&DMK|p-8G#HDu{Ug z0g*Fa&{;t)>w9{>4I0{}U+-Y8zdF{OZ3J42*rlu-k7<>Ui)Ig@uN$)n?ltw&l#=J^ z*G`E{Iv!$sD&w4)LH0xr+X9H=+6?Mkw`a!StP@9}Jw^w$zh!;-vXt}kU$cST5W}x4AfYE`rB6WR z`Iqw>==9V<1I^1K#A2RKk8Jc$Y~t#>MY`#H#?G*&VpJBW}U-0~f2lKv`Bx?rT} z6pwK#40UxC!zS76;oQ;0jRK#K?2=-gR4Px4V}hu~yt2R3TEIpYyZ(fvkl!nWizM4j zj%cn@_MVwQ*R9HiGruBcrLRD>ICJ*&-tQu1ocA+(EN(dRy!sZ(YZi^2qNN0h8@1BJ z4u0ES86loL5s>zx)pnQ!RYJJ904)K!+i_QF^W2kUSamib~ z{`+Iyg1^@dUSs-aGUqi+rR)(BXnv>N^@b3Jj2bi(lC17^9JqL>W3*|#6)zbRXZvzx zxiCZ857WQ`cE}>1H+KZGi})^dq9U$u8h3;uQ_gu_AwSV~WBb*7WPSgw;IMkWI-vY~ z02P(|PMsjF^Nr|GmatNef*9h0IBSL&9~m$mB^X6q^}EhZO=caFJH;Kzg1m){>e+S$ z%v~)Cz8giPfMB(V>enTgW}>c=ZF!;3kt1K*z}-K5H!Kk^m-6JX5$k?(ARyUX`+DG#DKBoROlh=+ z8uh0-yhypPJ!Y29BU=K$&|gnX_z6*+9;jvp+&;QE??O$dtEnH$MQd7|?ar~1?UshE z^8^aoN5Ps zhi(-7_D3WeGnk*T5r{P$88C96h8Rk!86Kj7Feqmv!&gNV=Tx8liwwlHH|k0!?FKjd z=)lU8$zjZo*KLMRFYO>$nX~JwZwwfrlXcsBKK+Ie{tXM23PC&Z!Qk2IPpbK1aaT&- z;?e7-C*QeL?n80QC*a|URUzv_5$i9-t-j9-8&o24lK6*)%3{BNU}3GQWB-1a)Cpn|^e6O~q?o5(CIYGPcWin$v5&G0%)FZIi}A)COcjH>UqItk~fEIS1DZq#Cmss_zvE53!*}wL!4;}tALO(%C{Nl|^lns;sBHvMIWcsffgdEknt!3(e`^3EI zYkSyNKv1n7S;Ee{V!vDDbd1m~;t}7B)ICZoKs^AVJH-{Km)K2{ro)b?*q};~(xXRf zsO7-`^`dc0ySdu4ZdLruH|<=JY3s&xLu(sp!4V`?N8@DTtWn?IWWuT)UiIggs$V=% z3A~UP3%cDlOh?`GF77kx3C@`{>!~#V7Z1iypT$D(dLLuu0r$MB;3{sm`m>P3Xbr;C zRG|t+;kK>yrrIFazIT({{I5Dcbft{o?IrlwTqB4w6k!jvnA&Z-pNqe6+)Grad!Vp0 z!kA6^DB!WUHF)O|qI?Oed=&B^Z{q!pvBc};S(m8l$6_S zMUX==@z{x0SkDEuMnX+;*V8`_XLPn>3o54K@kA4Ow6V{^T1_rY{H*e1+h`*aB4DE~ zeb^^_ZTS27pej)@CBN$p%)i%RsAdoy+|v_kM?BYn9Tt73*c!lU#2f#r|SXZk<9owd5}|HMDD?urEEzPs(lRtToG zP@ZgZ$HAQ+Yn&&5)9#pTib6yy&R^coFLT^NGG}J944KTJ0%$58Z|SZR8eWBFXna=H z>C=6K_`P1|72%_?FKZ@QvY?p?Dy+T(WR7;1qv8`XQ#JZ@s&ew(oq^0<Ph)tgNul}^eW9Uta4i=$dl^~f_w7raRNi!w@P6i7O?^ahZBD#iHDsb@N%L?HQJy>Kcx@!R}WiLoLacW>p=L8hOyg z?J{?CA{v)6Yk@A0ulOJfEP`gB|or|XadDzz3vDRo`aDmwB~^r zD|7%(lZfm5naOUnr})jry|jg;4^6wOfVH;88pUUob$G~{-?zj5l(KO;4Pw9*EPl zk9zF#1X|iDSMW`{9TysZNo~!M*xu_puBPbQzG)5aKn%7ZK%KIIA!5~zI9S3QuT=a{ ziy2(4>$f+oro&G!K=?prb6EO7An(zLN=6Q9fx08bD<^t5;j0uC`^Wx%lXv*dSGyB{ z=uFfQWi#nyc~#uyn7Xgo^d~8y!PYT*1{HvkwL_%rK{Y)NicnJm1MwZVmFHhZD8v|r zd~@DGj6P}ITgln)aY}P2LX^)m_}FcJD=H2Ztl^w}B3S*9Vq=1Jf`+BtiB1eOw>SOc znNG!)>5EqgsYA6?L6sW75k1S`HtuHQy9Xushs z?Dx*D3-aQ+P-K3KQdW&2&kNb1^}-iRKXPe!NMsDAhfoi(2}SL3KF!4R^<_`qZS)yV})0)A*3@y}Zg!v$&C+9n*HZ z^YekJMi2)g-|MYu^h>(ML-!vx0FM_-+>5VXt^bwNzo9*`qU(#wZ?)Zv`IVF@{VGfe zxEBxkm10WhWY-jr%JppM9pCRX;Qnz2gxjkyO$~9*Ywu-=iwv<}`Lq#y5v@n7Dse_3 zUPlJ)w^4`DQW@i{pb|m(o5Mc+IHRQxBIGD;k>X9Mm8*Oh*xBsqs9OIKFt|XV&i1Z(L$Yd-3u|SLFV`E+G7s zBt&>#@cPbgRn#vQQCXy$JaWI1N1Y3e`+98V5u$xd-+$$CXH|j9U|WYOvvFy^bCNf- zKjL1M?Syu^PhHBfz1q1 ziM}$B-=DA|y|~)XDGUYwK0y9fMs6{xF@9yyzyDAL0W}F~hW*M#-OwHv;!Nv1i)`qM zll_%%O?ALK4z9IBT8aD;J*z=*{)k7f)$@-;wt6Sy-g}+9e+1&f+v__k2`K;dl?^Vs zLRlA|rX(05tl zS6@e06mQLWH~V~C-PjIZXg($yso)I$*L-iXB_S%9 zq5wix&K~Sfe-j2xjcuKOoB@TW`vu~AVW(+p^#ehNf;s*qUH%=l?k|i^JzDOcAU*@y zzp^-g?)f9zUr3uj!G|ar{xCUZ6rTLJ;15Z8ei8M4YJl4P!cJb{iITBB=N~CKp8#pO zQ9MFU)SDU}PAD9uf~~n7E%$E%C+aMJgXQG@i4Wui(h3UxWCi}6+}Av*xTEffq&qZeggPVywabV{k+N_9e?tjen|gU zF@C}ee=0#$dgSB&Th^lh|IZ8kW75s^#{9D8RNwoZ<@1HyDxs@#l zWzi>MpP?M=-&d48Oai<_IDhvf%k^KW67 zv^;+&AA(GI zet}f~XF#SuX>xxC#GhyW(`NsB3LOuh;E$I6E5{W4-axUHi!@*l{TzR-jJVfL{f0?N zRrzz$Tvm5F!?58ogBRT6*LFNuNw&A&E?+%f>+ZR4JhfLf`_|FGPmm&LF*I7`83vJq zf*Nz=e0}`5^}T0bZiNnN9D2WTd#28?bC0-FmnooXUG5p&dIqnNFIQs!>Fu~7ECgCP znGvvn{FS)84iIkV(VlDbX(r|EqrqL~D6ENNQ^QA=paeM)Mk)(>?DBxnoI_0GcPV`x zG~#XvzShhh-6R=3E~iy#7YHqj*<-2;1o4j8!yZfTaD&vzN@GJQ?AFYDBD`nvY;JOC z{4sd{0A8*fMWRmXOV%wyXJ|^ zi{FIVzhwxbIJJL8&hql|aQ|IrT~A&w0Pa4MQ;-9op`ig@qW%G{7XiAm?pEdifRYm6 z5z3#v1-OZhhJv^Q06%80&(P6-{{A_WRlED^^^ZT)2mn9QSx_(WTGa^u`Wm$lwKp&w z04R;To(9MOZee0#Vcxujg@twd_ATr?_i*pv;M^f2B*MQ(MNUIaMNUac%fP`z`+$v} zl9E}Fg^i1wkB^UrNl5H5k0=K(AJ31IpxwTG`wq?>Qe0e89y&@op8xXC^%nrats6m@ z_ULF205=HG&AEqdwF7Gm|GeFolFj{di?N$!)9kw0W) zVrF^7heCBf77|8b%H`yrDm>G8p{WJb*3mUFH8Z!cw6b<`c5!uc_wao4HXtzQU2sTr z%!k;x_>T#RnV+(CjdwQ&MtlycKK22`3h{HmIozJyJ9&COtaW+Uy zgJAE@xduei+;Go#n5;}4I`_9kA6|#@T>}EbVH+M*aByzaH9%=Mj&rplZ9m0Z5>mTA z7IZn44>{mN+xP%P6}?+;%BQo zJ~lUdS$I0kAwgAh1rOoM$WEzqCV{El2lPel<%0@GQ}b^0f z_eXve5g}@BouixJbE6`m$Q(jG@qVkBItd8gpSFQuI+)6xn2)2P?S4y5#_t4h1 z4s@>p@^qqli?}LE=z+D>G?s6+YMie?#e?3U#Q`E(VPz=T9^M`5`W>&A6TLE$7MSwJ3m-%7P_&b7sRAcp6Nr z$>9_H)qrfZZOrBf3FLASRf+!1b8*ZA-_n71qCTFvvoD92?gGRF!-(J^fa9bh>2DpJ zJiEI%?$>}uHb40-{r0nV2@I=kEjxnmwNy{;m|p`1(Fzrf-lXCN8VPTHTT)FzdK&82 z$DFhPkeb7jaK+X-Yd?#Ojlm^&+;>4=_dbAA$$24WJLx|-iF#*}>c<4wHn(&9K^NU4`G{;ltCKCBW*MQsA zZNSSkJYvY)m@I2quACo| zq{K(C%@fF6185+4F6}3W+?tX z3i_^O!=-Qw&jSy42h4J`Rq81}aGD&qK;>yYOY zW*P3yt;mO=zEK5w29%~9&>*AyRCyRPI;vFV&%$ayimUzqvpo`83ml(Q*kyQ{5w0jw z`$bha+7fN~^=&4A3uD8QK0MaJC$~GpoxII@Dlw&OmYTh&u?IqMN&|iNt#0%L5_-Q} zdxN*#EsVyN=)j{4jb_gAQvc-EQt>T4lfro|7u z^BmA6oOAvwU@p-$ptFH#h<+myN4Bg$5VS`{e$a zf_QPc*x17R1n=Ay229aF8^6?ai+k)4{7zL*qcu3y#n$)$EJ0M9K50j73g;`FLV#pC zY)xpOQVEool%jj_WpYlM9m7<=hvY$;{lMW2&X<=ItO-^6M)mTxNw?>|2@<^LdVEqawk9qxVrzD=_EyIwbp7p_6UGZ|2TVHA z&n9ACyR#EvTJa&a{J1pFhmUhzK;5?d267@YUd&;NgaV4-$&mELr&yHc0nmB79z@46 zgcS){cKrY(Au+;rUwb;TW4pULa-wanLt9tl(d#IOj-}AiQu(L+eQ@*6^}zNviwMfApmx}E{WM`8x~M{=fW-ITDPPbG2rYZkKh&1ykiiXk{zXYC+wc7*kQ&6bR=h&?1yN6&?4&_y#)23*7IOCMQ(b3wm1ywt|>D1k7p!hs9Z7FPe2ogNwu1t2X zPB6Yzt2Sa|Tyw^lxOGUhafD!V9@S#=dD9Sg$ zBu*-_BnQ4LOdQcF4csIe6h3TPIKkS`eW8k#P~`_}4k|iL!!hV7T<_^kRGMCWI)O|O zJifwpH6%Qki-f^-z*GxOp~2h5nBQNCFV&n8SL(Zkieh0_+b1@~3XO)T!f z%sLOSG2BLhHy5B(`t$QWi_JvRafT17D03G%fR`Ic;<>@UcLIoey`>H?Qc3saKIQ2( zO=nBStpU=wBe1ZFg^~A?%4&w|OGkzbA^S1yx@p1Q{0`K$EIx)EE9tdtAvvS=>3Bgj z0d9ivRf#_3GjlVo;2Vy^y^HsJ6!NXxavVKbdtB1)>smwZA*jF^aDUb$pdgKPNdLaD z;BL3UqB6cRuVG})rYm`6ZJKgpb^Tjz83sZu)z;juJq55sBUPxgrqu}rE2zgyXm=rG zbxr&UCoMh)rt;9}g69k2)Y`1|+{pY*S6AjW>ittoW}U<(!^IF3$aSLivlg~mtHYm(xX8c}iA*8MT zAUoO^nB(t4R9H@OVhwl*6m5!^+%A|FG8T5I&gP+~{Tf6Q1kEwbe!fHA-8IDFB zA8}&08e_g8+^8G9XwNfe^$;7ZF<*;nuy>H8aDE{usCBBf=inl0Fa3s{A&mHiSB#F9 zFZX``C)c<*L%QKzThqr+GwS8d#lKJ{0;V$?VqnE@oU*Kdz7Id@YjV)s`p`Xrr`R3c)QjYHdLD`w)AUo)WhR zMvCgd_GaO{tvgocGq^xaihGeSlykNQhKttI?o?cY#>N_CoH&{bQn+OoYntA~pY=9U2}g$S-ieVe zA7G*38|J#166vT?grj#3F-o6H<4yluU+7Q~VV{4SX%dK&Z%zH69*&xT-$EwkJ}mMZ zQHNRGvF^LSck3Y!o^}|XJ7qF;;AxT>OlyA@1|qLqXE(kh$atKnxC*I>_DsIXNnmSk|ICFtVk16GyK>g%>T-H9i; z^j?o`u{^s|yf|v=$g3@mF$%4O0ycC5cD}@&!sea6bphC8x^evAcYy4R(?)mG-uZHC zSAzMOG_2O1PC1n|@77E;*-!gzD*NOoRwOHgHrTpdG?klVXj9C}nc&vAMB2;QCA>oq zz&PRet%1_aTGt80U>2AZ>bE?Y(fhK`;6R$p=cm2+zJ!6gPcM~qA}Fwd-=l!EVLU+c z=}~xp+arIkJ5h?+2-IW-(K(LdsGEnZZS(n9DOHZm2XoAUTh^+z>F!b$^&xMI{w z=&mypx?!^h9dP8q(3WN?WQTT_{Be4$QeC6@U-~^mEV!_tJtpf=;j0pE$}ua12R*56 zjz0cA#XeivTbkLG;dfKd65C!*{+sY{Q~U`6yQ=CKp*$CIgo|fK4KgGds>~ie;v1H2 znqqj%DpSAa#@6f}(G%vCI30MTbs$h)*lALr_<3q0^3?q;fn0}Ryw&U2nd+8o;cyKw&80rE=%ksd*6n<2%f1JG z5C}T9B-kNK6kt}?4#r&E23(Bk4p*nVO&LQJdn%y$Vcfu11-&0flEU@$;&*U!u0r-v zU(5{k;J}Ac5}gnaYq#fi+Vtca>gg-1eB0L}eSv?bSbdZ)PEk2g#8ynyc7NYcpTD(2 z1sjY*Ch;g0iyjg4)PjL;{#`1b$Z?92s8S9mqRuEK9$VtOFDiz$qNj`1u5@3sk=#6o zxFe{*0&_&wASv>a&0Qknw79B_{~B<|a*nB7psw*PkR>wqqw&bBwj(oo76!q4M`kD^ zvi~5cHD=ASybnf&CXP(A|6UUSnY3N-^o^Zy*XT$T3}Z|5;c;5+Y#SfOEqmfa3em-I z{!v=`-v1{X@$wvfeHsiHvbEY1>W!T!M>3SYn#!aEMZH!Q^Nme`EZ~ysHS!!iD=!-^ zF0_qvV6V(%iISvyztf39^R=2k+`Ln2B=s7g7MoEir|E%V)8c4o{wazfVMw z#C&(jsv*|6T2p$5p8EAo45ZjioStSFe(%?$mUzrH&4_7jFR-BI$3B-EQkS#sk}soe z&oxVU4`U`UEFR$4q45Vsrc0US->SsDZ|}dcbH-X=|E;@*l3=|x+x3HL1+pGmK2wrPotmFNLwVG=+oN4@`@d1l(N9VMtC)oNfhh)ElUyVP*{`>||B2 zeUVGDFJ>Se5PLD9D2pSxxB3eHru7;y&2Ee;*L$iYqmnjImE5_?%m6ks>-rYUU@x`q zq`BuUnA`>;m ztu8vQX*PjX(hS_Qh~ZvEO0?wT9Syis>r(5`<};4x*8p&H+>waD_MCjr=o;yk-V3!W z-*n(uZ%M3^- zb#k{?I)xr*iVt~EO@o1w7ls zuda4tE82J264V!62}+`(x=BSnH8+K^RDXLi=pPO`-+VfdOD>z{sv2jl{wWhUTDaDB;7XX6I9^9y7~>mE!(|rdZn__rF2x)p2BU$ zt_a{+dGB?gs#F&}?eHM&A7=^50*B^n_rUD1-F+_(arETsF2U0Sv`=oOxiK7cV*m?) z_$Wt#aMS3n3+G+XzSS8D1NdG?Pmv~R#qTT>Qy)F;`3av-_Sx0^zRY&{hyC&DtVx8! zXi-JVv;N&y{VJUgD3|q7Z=*a`-g)E-Fij<>bDo4>QRyYwaU^~xd8>Knax{>PqqT`k zenq$GA>0n*A}%NoZaAPgyyv`C$`(L(H`oOEP~?70M8XN5H4^uLDlLpdRB@3?Ud11F z@i5|aT2-D~NbU6(s8EKU;&C$q>jHhtw(1)225HXujt@*D5AR%XKW-HM)}5@MKr%%f zX@A&%8yl-pZ~vSc4_=+Wj(cb|wRsJ&)bYG6f6-18B_YWIZX&ndSSliFzhBqpb{4n8 zYNWup+-3SGm=GYT*}W;R4zhqryy5iL`}|!z%8fV{v^mt2$3%n(?PM^ zUW+gNAVLOG;LfBzvKXlb5!h^15APMXa8pnA_mQ}mWQ$SE)Iv4L(Zn83RnqP?06O?) zF*O*5OQAn8cPVLr|FnU-4{RDAEG)~&b?KUlws4GIZT)4R>8*{Z%#s9|q4m;^t83yi zjDif)_~^D!RQxB(mjHLliBE9r*0$5b8GU#Ru%a$nQ;n)9`R0Q+WZids%?GG_9_9EW z*gY0|t^tHI27MTz`PPnx(hnG7<<==^osRp&n?g?{PtTEIk&^qg`{QXa5wQ4)#-%Py zXOZ9wy`DiUc0QUAPG^pC?CO+QRmy@AgO%@NxOcf+*z`#*IBtXCW@PV9c=tq(k+I=y z{*=Cvm7r@?HQ2&|?|IbBqvf_X`!86yNVu9E>*~;Fnf`) z!pGaqXd4r?_rnoV;2iIV)iGb4@^$A(3wIcUBX@@)@OZmuZ-`0dHmEG%I^gXhDlY!pZmzTd%#^>EuSqb+JSc3G+3b=%W)i8?kR7mnW{ z{%CMz1ffwpDeCa0#|}3{m|=M5s{${zGX7(9vP_V|!z<3sMXW+S7Wa6jQ`>3)Y6f62 z{SwIvT!5=&ZKh%8l4N?*q|K7!UhlPT8{VBjflT}FR%(P>Z`|uj@+SD3JHC*g1 zTCyqZlXCQZ>O+WPsEcEbzNsx1*_RFdwHD6vhZm45=lE-YH2<8T^aP2$wUmZsEo+3}xL*5|U@+9hlGBBmiPL?c_O5&c;X}Z_ z&{o)R(Dy^nt3~mqv<#;uc|=T7%(90RKk)g4nrt##66D+J%_x?dhKw<$58 z3jjfEy!C6XsCAB;F+VNR8^!4%sIyL0j&{Z9l}2nTLT?p1Us~?$WE$jAf?i8poQQID z+F{Gw0a2n@hxcAGQw50o1>94UBrwpE^|0bE`id23YPqa2`?Q57)=5_&38sRt)1IwY zoRVvGy39Z{qu;>GW)S;9uI1fEa@fI_;@tO`3SY7q(4r-&D`zD&uLE}{bbQR**4p>WF|nowjXp~9jKPIgzAU3B;bd$a8X6IFqClqxIl(ZndbV2GEm40g`XU!+ zO+hzD^|I1l_g1OV2H8dJ?U!DfO*-ibVPQRF%$vPvfcJQKj|&nbqBw)Sxt%_P)MV@) zevOqd|M>0ho7k7V`Hr`+a;&E_pqDSuK#! z6?-9v3RDwsTtzrs)_E(IMEO05Z0N&^ zn|_RhUEkPY)S4eh)B=^>^RXhR`9Vju2PFqt(WWzGzS(OmBRkk-!%BW}uD3+lwyAN7{ENwBnYPW(g+wHh6R z5Ey@06a57K28IEA)q;`C;pI}C(@OquKIr(Ys&0JG#lm9dVLfeGq|}ZcYJx%oQ@OdR zyPIzZZZIm?h>FEI^)ml@$1Qt*;*ASCmgc3|KxidcT`a(N!1??09}_$SpL=M*uyE|H zHUTv$P|>^fAc!uTYhI;%)#A= ztn9WSB`~q4t5=-P{k1K_f`rO=-5##xnJ{MTsYuGJBhB|+Mg#S< zC0I1fr%NaNP+5ROD&4+ZcF`8k{Iq+I&WOo-W|Hw;43J-huuF$;r9=RNE*I{l7QMOE z?pa(w(WWZp`XyZm%gxvQ3RIZ+noCr3ach8Jdb%A1o!`L4Az?TF;*mf_v2n7ef0EXk z@@o7PC+Og`k*A&3iJ}<~tsh?u*YoB*G`$y9F>1rRHcR!1L#tt#188VVDAO&*`kOmr z{u*G|NF4&m%hKulY$Y(RVL0H$z*1Rk(Q%IFnYhG{AC%a*`^m|LCX#>JIZ?|cQ1ENV z?f#(wsp0xfX7sfEoFF@IA>wZa@F3MO1T0%=5v!-e)5qyT)9xM|wJzNzSgNlJ&(R## zBr*;edabpVcUJs41OTg`LAOp6fa0EXhV!RLKR!wV1>U5IxB{ggP)DIg10@T)0)vfc zk~PM-6+-pdW$kNvm(gQlLP##GnAN6`OMd>R<6Sv7iNvg)sC~>*f*_KFAr%n z_Vi`fT2l-+Ppw8erx2|4aRdcn9A0+_+JE$Mz#{m@S!-3fj2qO*dR2agdf#7T(k-8w zX+JOnhAYKUgaR9EJj<(SwVssOJ1H&;0W5ioEu^SC8H+w$>JaYuMDCB<*m@%zm2Kkt zaA>!3hj%+}s(m$eHu+m57! zq%Qp;!xJe8CR9jpkL(&SX{&N|)9MD+6FE zc3&>I@JfviEOnmgvn0F0)yfI=>-ec61w&P>dmKI+esTb<2#L^n*<*BK8HEFq z>;io_o>yqR4hQ+6NOpKgRv$TWw_3}x#Wer$z#?eU&V{VP;HA}pwY*QS9e6eNec1i5 zU4ue7;XpF7b^*vuDcp!)k|>u`mSc0qaRvG#%{MGSyju0|{qFRMB*EUz3vb4n(-3Iy z4Q6OUCaMBq8a8!L)Ni?^_=OeXfH#s&61Q06heW9_fFYdx=O+qw98ho^S!-v7Ep9SY z;?WX-)5cMuyErpoKl{qIbw}{ZCW4tS_0d5SG-trY4KL{v12bJ!jr*OEr`e&rbhxj% z0R6ntUO;x2+)Y()vT=**QQP)W^5pleBKjgv^Ev$e8d4@ZsXT#pZi|XB#q*oO=EdVU zd2+#Csw09_(*2BW}AbYP*m;Wvt`vWC?W$_a36vCpoV(5!y>s zLpGgUan=Zl_ z*!~eU!>ZrM=sCUH_ilD~VNm)!{)}S+QA!0BaSX#?B!M2r^3jZ>%xyQMs5?p< z9E$WU4M`JM2X1Tv72UPN0^D9^G~ZdRyQTKYpU;CFsEL;K63rwchtf%>iGDESfI3tl zg|7$?2BpkJdW8C(5*Vw!i8v5fQ6r()Jl0m%Ys0|2&2%{f{3+EQ z0F^A3LEf#ePrJL3xSL&6*>@6}lEIFs2_dG+$s6QK3Y6HRnB!&`5KT$ znO9v2KIhyr0$ zPCJ5b?viQy1(ckzkV z?%ddrsdeS(bD;(Cg_>Eo1^<+$)s-iM$_YHxY|()HP=(CB=zg1S7MQqAFGXvf2a(qP z@g3qd^tr00B%8KhSnB86T5o? z9`h>B98I#DsZyxv1eIhLijZ}H6}|Ey{OT4eUjdF+@36P#q-Iv9aTi_@e zFA&oy%E416*YW}Rpy3;8?xW|b^y*4lSica)vGTV9inK{v)a6`8Ulu6Dk#ye*$C-xM?2 zbT~!0K)K7T^+f9he@C|KWCU@S;qL4QuS7ta1}bd`#8^LS3#;<;YzPm##Mju-7ejI8 z@6S0GQD`)W35+E_p%0E6Jvt9rC=TBX;iuUFyM#tN*;%S|W1o`lg0wIlzY%Lz-C?!? zOC4|Mm$zl@5KXnN5GB9ZtoLwXheKg<^-k#=NhE%ZX>J8Im6Zv_#K?n|$CSrnph0i$ z^l7+7Yn7*F$@xo3vif>zoyb}t=%bOvAWe8n=9eR}f$!|5b>_w$h@GWr3}BVkV9W>G z0TH5SeEBu<>1wjX=0AG;rWo*f)wpv(k-#C>=^6LO8G^~Pi-^jVI(3jZ?I`U&UMWsx zaWHd?YOTrPoOHvN=6#Oa181O#g7{%)uPvi@)DOlO-?FDH3*=!Wwaln#3zBtp$m^0s zBkOGN7m-aSrsMnu8f|VD;sFn1D?CjtIXE~ntg4?bJqpS1d3`@xVHcBCoRiW}Uw8ej zZY%ESMa%FW%%&#%gZR!{f>|kyQ+}ICYhUUEt)je1t7vQ2#QaYB&O4=9?|Vb5)3`qn z8%IcW(H`h9eI;-I9GqkD4puw%V7wpdVt3C^#*U5bZWX4aaoBr2T!IYC!`ndze3Vdrq#YEbG&4lcgmzNBcBhg>= z+%t{{QXd#Ro%eU_dvoRpKu?Y_XvA4GlITPFja>r_2>PrO=Q0F?GxtwJz|k8oFEz*d zzLAlTc2A|#KGONPR`Z3d(DcBy6zi=w5aMvk0(I64&ItY#5G^F|pyZ)q%vj`s=5(J3 zaJa$2rPyl9YLu?IOwmm{(1rknpXqLdJOS7MquUeoEXJ52Y)gthJRgMldelrsftt?H98y2!aLOK zET@~3oCY#gJ?dU(&p%!ekV#0~9T$XO0Z+YE01`Mhb7kAlrqeV;}1PQS)CBE2q^5<>Y390o~ z;uP_v*;k1Cnsg`v#@7teAKb2ddauw;wJ<|PvuoKGDIp-79E@y|UX1d!@?OFLL*Fd==d)Nl@3Z5~HjiXd=&B@Or)ccheWOHyT z{dWC2)fCg{KH0Qk?z~t|;nbkInF2d2JDJ3K^7X>U^X?G_l}C)?R8+*kCDE9jszq20 zq(hwP@({jYjX~cPcy@;<%vhVO|#dKQ%daDYs1r0nG(Xa!@Q)` z%gtHJrgF#numE+FuVNJ8k}Bh@UVk#R7NTnh9t((Op?(vO5Htpz;?eUN58q>Jb2%h^skTMowkDmK!KR@WN zbNheZJpM1Lax1HVFL&oKm;1gziy`(iTt^<8BV=wbnWSn*0^E)=ix%M-LU+ELfA%WG z0gTT&Ti?3eUjH^PK6O_}LGXY|w7W-~GZwRFF(XW;IG0o*!b9=lM=>BUw zkwk8|IujD)ov$T0(Ss%5@42y4KhgZl60c3()+7oM&j4gZ|K^l0(XFKg8L`97wyl6CzKja@h3Go4-)0fzXlwv zynY_~*zXj|)gp4Ar&DI8C~3#*?A8-}bXj-66U4p4%xW+^&7UFlTE=(Ff-j$jfWQ54 z1-w4GGpUpi*}b_=OWgh!H@1D)$mfh&c_XD$ z{E^OC1Te=iyEtU`!a9_TAA?ig*1Ix2O1>ZLGyv@N>EG+!KQG7k zkMskxaN&h$dJ#KV zxaUO{MY6r(XSJDB##$7Ix~5V8tIsG`t4mnvkc?w7)h_ir!@#1G7sT%Y(EIDCq_O2q z-V{#=Imwd1@fL?PP2uYlzly={=xEbX4*>1*30AAaqb&y7gXYfwYToUAC^}`BYftbY z*usM=bI&ccRJdZnP*-N!f(-P;J^mH?KufsFA}HgOd^$JVrBdupwA9fWhPg}!(v%7P z>J;rK#P>37iFLRkNT-PMONysayhb-tkL>D z(mZ3Z02a;%YzInQ>L$pOJ^%473}x$u{t7W;*4iD6uT^*F7kLQo+me)3A))#E55w;K zRTq(8gNHJ|KYq;FErpJ}!RH&RnLuJ3!s;IYtq%aMl8nZky=E#ybhc0kjA+C2_ii`M z*%N`gy7?9-f#IX30&9@=%n`yO)548sO;=}GtLm&Ouy_;ta&FlR*$bqf|GcWy z>u+&6M!sSMKIK{RJtgg`m*1+(wc+C)~VnYd#mB(T5YB(NSLj_ zGIGgKWHYSm*VoMNsD{9RSA&3#5|^zTQoF64BnrTAI@>3||-hM4;ztxk!{p z<-V4!Pcvh7J&))tX>wEpY#ZC)srkigGWb=^7GoRxg=P#?6h?jgTNn`80AMM+7 zmWvRXWUZ1brI0AFoS6$N3FH4myO1M|k$2#B&sg&lbs0l2T`Vb|_pJ=6Y-?67V!g?D zWbtkz#x#x}Ep0sEWI(RIr5+xT3*y7HL&26vFt@}D?Z^(lE7I~CbzoKcykgUH$L-@= zt|ZuLS3uAgPgQ-mcmB?G6cJQhNP@7t4*ZWb?5CEdUxuh?)GM6;P8{vMjV^%{ucjof?><$nZUd?S2xM=55i8q zCEBJ5TAxmN6Ofe@(K}<|L05bDupriqM6TkRBC!YG7+46~)v>UTip_zlO8aANe=5%6 zhFS2e&-981Q}AdTRUHX`Xh+rY;--;};I;?~l-^+$0{w2~V>TPBXE5=CPe1u-%R24h zi0l}Mv`aTLnOT6+P__zuUoGwcfB}C!0Cx%EG?CpaZfn<78G1dX4bsQOI#pr z9P&Ae?*>hvObxTEOQSsqm8TB?{vii1tZ7(y!0qQ$;z^IUB};NoJN+?3Fd@7Q%24se z$l#+!i8X8^+3_N_Vh=utydb-)1}!4uuTLFXk?(MbvgsWY&loJ|&jldQEu3m*H0J#M zPMK6DKXEnPai~g2^RlcA~<2KOy8Hahu(%xx0pbAhIO4@ z5+R98!NhZ%_I5*}K6@;9$}(S3l?*!Hddim_1Kdg5$QV;xybxz+8$c=BXw|7jwyrpl zbHa?rPpEcMw0>z90@6-+PR2I3vfx=0+#hvBqimhs*?v==JYx*u(J+_FfDCzs@lDy2!SrFJU#ARZb^=~yIwq0@1-wWgs3 zZN&3FGPN63h_3^x|NqV2DXR!l4T)^k@%AfEX9#?#H=>b z`Yn4CyZ7t2o}h?R$7)5RkXD1$mPx<6Kd4^Oc}8?h!X>ysf!lTE(B|GFtQ4a+cA4nV zeot~ZeowR^0PU>QrZmd>__&c{O`b`!Ui)WtR3>?kK;TKo8C`Q3tSHN~YkXd>vKGnH|&;sUH7#t&E?v_WY7m|MBg*tV~vOFf|PWV^oPWe=Buf z@4l8>KxpMk61kC_%tqs6sM4Po9Y@|8jqB<1MIA-5tFw}w%^+VU93^RG zRZaSn!$AlZHy^o1m(0j`-2e`$OTqE#HG=j`*P=|^Ce^5QtPYf|*?}+A;@mAZd=Q!X zR4pcJ=G(V<*=rHe;7vA!tUGv3&J#_FcXZfV^p6AB(QllnuRTvp)8S3p8WCEPa&))z zC|s_yh7G@bs*3ZpdGxbNM0!l?uo%_F2-&&HVzljTbz1y%b@{@W9uKr(9WyEA*`BrN zoCr`Eviu=JsLz&SFu)bfS}%2Woys^-yHU0n#pO+BXAXR|&DqV7i7a86Gpmc@IFAfa zDojP!TbXb(xPJr!frSX0V9+Ze`nn*SY?a;Tc1^#)RA4H#%S}R^=0eYP%4ddiI+CpE zo>?-TuQlF>{ABLQpA%TmU(wXg+81oeca<;v$X zgTq{5bt9kJPxLQ`rgPVr+R=_4_$la%DV|1So(4Mqa$wbXnxA5#1xw=*z(TnOMusM{wFXaQJtk z@Y$@Q1u>M@m0)Xju;M-XW-GX7|Ds?Cw=wFjjl_CGqdG#Cr55aif0m&-0>CeT+S}{()^Gnw*U<`(gOnnLOry;O|-H=vD=y2u+J0R5{AyYGu|UV@x;Hirv2WMbPfqiwC!6}IQE zg9I+ub1j$u!}VCZ99;8wd9?&K;TRD(BhvS-f$=;%P=)f9OI!yMr+T1j=JC-9+sVgd zl*bt0hVFle99T`^#5vOG2A+=T{0c4z%*%X{33%Ba>-{g7_201T|Ho%C=Wt;j&ou^w z;FT16y;mXrd2?PebUY)2H45OuJS?$bAU>d96zGbqv+4Zb`5^z=g+8; z=?Mx(1MpPF#GXr1b7sVvzQ~M{-PP;PKgH~D(^$FgUXAuA=r!q?grcvR6HhAZ2_n=+ zCA#UWCyS?*>qz9J+9(>0*Xph5I|Zd02orJ)+w3`_aGSqgl1n}^`V_45{?)I)|2GTm z|03?jAApZ^N5BP{9^ZmD5!Vw$Uwx(|xX8?MKzXGC@R$bxwX`?zfaU%vfbyjBQt_7F zixE|`a!DhY?^TgO%fT%tSTi}wGKCaoD1!(PB_hmlUMoeQaYNcirhq#s@Iut=sv$QM zyr&-{#)GX~BoA5SM<=_))$E`QMz5nASP) zA8*J+5_si506rdf8N#1|Cf@&Mc1`=o`J*7+KhB(IS9ii`aiC#Bcp?w~e|yrL5fPcp zViY;vv*(KcI9e7E56q*|v$`Gp1C1t$%OIYJ{jV>DhkOR%hVoeJ&EF_75sBiSO16Yt z;7?f>Z`Y_&e;iW)n3(X3FgZ25oool9yz`JJdV7ghIzl^-6E#IA{Ro=hrBKK}P~jx7)TRZtqX9_VaA5ie7D(qNB`4agV)K&LLnpU}YZ z6V^zjOVSEr(ZM;GpRS^*_80^>yMuSd#>O=WgAok5E-jLtg7=>yoZAFF;f9qA#d8c; zXUi{LDjonG^%*XT-C>&sII#oDHt!l07Org1r<(``i19T$y-3Cz)w4xY3g?POYZ%?Q z&F=c$NzOCv)=K?0q)|;4)U`14vmwmE&b;L?d<|{p@=%N-pwJ@rb~qZGvzQNZk5A<5 z(Zii|5AK>^X;jado7)}cZm6YVB5rcskTqbJreptUGml*28i85tq`n>ZkT$MKl)una zN^QVl^u*Z1nXcN=!QQi{7N6k;4e8!JIv|->`L*zEcadbyl*m-6K*IOOcc=4IOAKLb zTECH>k|~|mwi(=qLUIvj39o#_0HLuoXCN3#*DV4m*%qPjwNHDMbNVQXt)efdIR10W zU8i5=1W`|uO2Ee%M-e0K+A&Rq+L|dkLg_;XVQZ|04>d1B$z9M3QZtw8_ulJ344iTH zF9gPZ>qFW*MBkzWZ>rfLY;5!>QwW!rU8oVo#W8_7AIV~IXsk*XIWo;DE_Tc6#%drf zro8vbo8gyCzcZjA1BfGXRI9MRha9xpWMfFC;}WgX0Aq|DpNC~JcYV|7Ui_K2Ap0bi z$_ZeXh$0(!TChbntAp!3mr{fe?eI`qI2M~h`~DZ1{(5JEMl=rk)_86ZeX(s}$=^%+ z^(=ws*6UNuxxq)A&P1Q{hjBb}BT-HM9MO_3)2T1zKkPPXi;me!WSK(_yG1}Bf&m!4 zZ6%nD8YS{3PUVj~+&T+$P;Sw}c`m;yOR(Yqh5;~iX8QSbE&&+s0(n{Dxok4Zx~uJ{e% zA1^0Z4;eoEHp3xtru~O}HOV&9KH<2|CJ*po62CVhHKR)IGnC&K-=ANo*_-ak9x&vR# z^)(Oob(0)Gp~$KI0@TJDjIZ_u!2j3}75Y$sFV+h9@<{H#CQmbJf9lN*JaP_|@#E|M zJ`fq|J3CpWG}U1=lGH}Q6(-+Q+UX9f+R4xtWuR5RSWb>U)~ELqX8O8{O*N~{T~QT9 zoLiexBg-8&6+eB5r}y~3=8X zMrAO?E!Jy(oqhQm*P#6#)Y)jUDx%s>a?nhBav`Nl90ZETcXl`5dWWk z0htUV^3bGJso*(VKbDvU9 z9wuJ^XlP}0R$Tf5p$nTl%9ywuFg%#=V}Jbt0)Bf%pL?^_poqIekV-$AJHd)FY4vkL z1v6iUGA7Dv1!+S{ z^s-N^{7h{d9;4Lj;o0`cca`Bvu}qkToYp2}JY`ikSz$dMP~Yj4=lz^D62d(=pNiQm z9JA`LMg1}w&)Y=>8vSpCIoA0l{p){VY*=9&1$@iR@hlwOZ@h{4o2nBU^&l;ng)d1s zzJj~8%a%B{HNM%B59=ToGfc(`Uqglc_+{3Ls6%;*z(dqsbDPMtoZKX~}Nso7``jyjJqbxjG?s!%8RWaWDqW^hv~lM&=TR5M9^locm2%;IS6EH{au_u{rFLCuzcWeac^~XP%(Kj5u2+FSO(B+l1>v(e&SXRMjpvbl$%ts985@9BE#+L>7fVmdKlR z`PL&hSygwiRpn>ILK7+23;8p90AXj!&43~yGkfGvUQBY`j-~h0rPfsmFeYo|D0OqX zAgs@s78)-HdOSj>41=5|`d0T@K21%}YgMOUm(dHQG^-?ohvl7PP__z;tN6K!J$nh7 znosi)L&8zaW;yD_!THw!mFggLCknE0sQ}cQg#^rvD2yPkBg_y^kV-IPQbTQ2MVYcB zoQ_G(<*DS`_ebWBgr(Oo*|5x=NwUw^_~SN}r{*id9keL1 zt1#DTk3(Rc^96ge3@C+LEGpvX#XX2kY!u8EsM9G*cPdh;Yr%WiAV0ngZ=#8Cn<@AK zXeC1X{rkh%zlK!-P#@s` zKtUgsg2>q7w=+U7>BqBj=up7z?*f{jaM@6Ix0=g9zn9tvpZUQ3kp@%0DAPWhXu8QN zTpR0)XU3*hGCLB#b>nz5E}WR zJYVYpFxgsomlvLAxMu614x@c%wE#SJ!|;E$-1@!c(+GXPm5{6Jeze|^d}R)YEcv^= zAD<02!=?t)n0jhcmWDf`fPV}a*Jf+x34LO!At@vy3~kXuZXz&Qn13 zt16RjtRwcG`(?$BG`GgSeC;l>Ya#56j^v-kaCz$ zNdCJcsL2x+ln2|ztjYQE{AqU!P1w_=gvayuP;qV>88iC(8sX&I?@V*nUNl;IyUL4Q zPb$1g60&=t+*bB=-#9(}LFWBC+rO-a=Yr2a!dq;Nd#*$}a=v5P=hL6?mz0W~qKsgi zMiuq*_APF6%GHtxAte6Cl&7@+9m4(xX8FtVa-J4sc*gDW2HCzms+p;oj6lg_BQsmm zt_YAm-l+*ni>)?AxiznarL_JC_YM==b40k~sw%5YP5Gy!jIfrUYGj(6*xVe^x`G!) zvc~&ZCps!5B=y3cPQKF&NGrdn@d$=t|SII1h;x@9o=7-fps+3-E(! zi?U{6f|%e=XIm@=t{=#Qgk}2iQWIFJ*5~S3G!IFDoxf%b+OM{{t*Pd0s%k6}OthVU zsEbp*a!cjkS4%lqHXH-q*Q0L(Weqr%RQ4`S^8W3}?}-u&bh|^UH!pW;Hf9Sa*9QwE}R7wpz z%x7BJD872As&NVo$*8GGFlriI_j#Tm6Sjf%0AM{z*uE@C9O|wtGB+Tts5rSwCv)P{ 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

    VHfNBD=1OFQgYogl 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

    My-a5$UD6t^H{_f}LkL{`yLPK6!Jk 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

    pyP)_X1I@uDEj*xPM3S6n2jHOC7m4FGl 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

    Smart contracts are revolutionizing many industries, but vulnerabilities in their code can lead to significant financial losses. The paper explores how Large Language Models (LLMs) can be used to detect these vulnerabilities in smart contracts. In this static webpage, we discuss the same briefly, and link to a GUI that can help visualise the flow in a much lucid way along with a report that entends the ideas presented in the paper. To continue, LLMs are a type of artificial intelligence that can process and understand massive amounts of text data. The authors propose a new approach, GPTLENS, that leverages LLMs to identify potential weaknesses in smart contract code.

    ") + gr.HTML(value="

    The main thing to keep in mind in order to successfully discover as many vulnerabilities as possible is to maximize the true positives and minimize the false positives. To tackle this imbalance, GPTLens proposes an adverserial model that consists of two stages - Generative and Discriminative. In the mentioned stages, the GPT, most commonly GPT 4, plays both the roles of an AUDITOR and a CRITIC. The goal of AUDITOR is to yield a broad spectrum of vulnerabilities with the hope of encompassing the correct answer, whereas the goal of CRITIC that evaluates the validity of identified vulnerabilities is to minimize the number of false positives. Compared to exisitng models in the market, GPTLens has some key advantages, some of the key benefits of using LLMs for smart contract vulnerability detection are as below :

    ") + gr.HTML(value="
    • Generality: Unlike traditional tools that target specific vulnerabilities, LLMs can potentially detect a wider range of issues, including those previously unknown.
    • Interpretability: LLMs can not only identify vulnerabilities but also explain their reasoning, providing valuable insights to developers.
    • Efficiency: LLM services provide efficient online inference, making LLM-powered methods output results much faster than many traditional methods
    ") + gr.HTML(value="One can imagine how powerful this model looks in theory but there are some challenges to consider:") + gr.HTML(value="
    • False Positives: LLMs may generate a large number of incorrect findings, requiring human effort to sort through them.
    • False Negatives: Not all vulnerabilities may be detected, especially complex ones or those missed due to randomness in the LLM's output.
    ") + gr.HTML(value="

    This two-step adversial detection framework has but one main goal in place - \"to present a simple, effective, and entirely LLM-driven methodology to shed light on the design of LLM-powered approaches\". The two-step model helps to mitigate the trade-off between finding more vulnerabilities and reducing false positives. The primary goal of the generation stage is to enhance the likelihood of true vulnerabilities being identified. To achieve that, we ask an LLM to play the role of multiple auditor agents, and each auditor generates answers (vulnerability and the reasoning) with high randomness, even though it could lead to a plethora of incorrect answers. To realize this, we prompt the LLM to play the role of a critic agent, which evaluates each identified vulnerability on a set of criteria, such as correctness, severity, and profitability, and assigns corresponding scores. The paper demonstrates that GPTLENS can outperform traditional methods in identifying vulnerabilities within smart contracts. Overall, this research suggests that LLMs have the potential to become a powerful tool for safeguarding smart contracts.

    ") + gr.HTML(value="

    Below is an example flow of how the model works :-

    ") + gr.Image("src/images/model.png", width=700, show_download_button=False, show_label=False) + gr.HTML(value="

    Below is an example prompt both from Auditor as well as Critic side :-

    ") + with gr.Row(): + with gr.Column(scale=1, min_width=500): + gr.Image("src/images/auditor_prompt.png", width=500, show_download_button=False, show_label=False) + with gr.Column(scale=1, min_width=500): + gr.Image("src/images/critic_prompt.png", width=500, show_download_button=False, show_label=False) + gr.HTML(value="

    Below is an example response both from Auditor as well as Critic side :-

    ") + with gr.Row(): + with gr.Column(scale=1, min_width=500): + gr.Image("src/images/auditor_reasoning.png", width=500, show_download_button=False, show_label=False) + with gr.Column(scale=1, min_width=500): + gr.Image("src/images/criticism.png", width=500, show_download_button=False, show_label=False) + gr.HTML(value="

    There is an additional stage called Ranking/Discrimination. As we know, the role of a critic is to filter out the correct results from a myriad of false positives. To ascertain what is the best, we consider three distinct factors: correctness, severity and profitability, because although some false positives may be correct, they might possess a diminished level of severity or may not be profitable for attackers. The role of the Ranker is to rank all vulnerabilities descendingly based on these scores and choose the top-k vulnerabilities from the list as the output.

    ") + + with gr.Row(): + with gr.Column(scale=1, min_width=500): + gr.Button(value="You can browse the GUI by clicking here", link="https://e5f2d87bf4047aa563.gradio.live", variant="primary") + with gr.Column(scale=1, min_width=500): + gr.Button("You can view the explainability report by clicking here", link="https://docs.google.com/document/d/e/2PACX-1vQMRO7rtLrdXchyP1TXOH8jJ0jGS1lw-OcAvmYGDNFve1plgXjm7bBGKaWrlxBC6XdIGpvku3ArNavO/pub", variant="primary") + + gr.Markdown("# Meet the Team") + + with gr.Row(): + with gr.Column(scale=1, min_width=333): + gr.Image("src/images/developer.png", min_width=300, height=300, show_download_button=False, show_label=False, scale=1) + gr.Markdown("### GUI Developer - Aishwarya Solanki") + gr.Button(value="GitHub Profile", link="https://github.com/AishwaryaSolanki") + gr.Button(value="Related Work", link="https://codepen.io/pennywise97") + with gr.Column(scale=1, min_width=333): + gr.Image("src/images/author.png", min_width=300, height=300, show_download_button=False, show_label=False, scale=1) + gr.Markdown("### Paper Author and Creator - Sihao Hu") + gr.Button(value="GitHub Page", link="https://bayi-hu.github.io") + gr.Button(value="Published Paper", link="https://arxiv.org/pdf/2310.01152.pdf") + with gr.Column(scale=1, min_width=333): + gr.Image("src/images/professor.png", min_width=300, height=300, show_download_button=False, show_label=False, scale=1) + gr.Markdown("### Advisor Professor - Ling Liu") + gr.Button(value="Team GitHub Profile", link="https://github.com/git-disl/GPTLens") + gr.Button(value="Profile", link="https://www.cc.gatech.edu/people/ling-liu") + + gr.Markdown("### School of Computer Science, Georgia Institute of Technology, Atlanta, GA 30332, United States") + +ui.launch() \ No newline at end of file diff --git a/src/Gradio_UI_Files/images/auditor_prompt.png b/src/Gradio_UI_Files/images/auditor_prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..87beda3d944cf0425ffd3c3eb45893c9925a7c90 GIT binary patch literal 131536 zcmeFY1zR1)t=`&1X)!>8`4-8Z~^p9jv4vg^EOo1OWkoDkCla83F<(0RjRl5&;glGBww+0|9{| zY%V6IBqJt9retevYHno$0U;e6s}8TBJn$w>>u03!S4fx~zuz#Jw2(P|Dxz3q zG5F9Tzrva58XPOVQFU-XRZKF_7@B=L^r+0pC<%paKBt1UUr}%4TIF(jei%!9N#Sui zPUV9rNL>pOZ!F-2aOr~jCKpL6K+EH=un&pP0`*}HDTZg+9h04o4yA)_`nk2G84|GQfxPa;HtZUBF4WHKU$$^*G0&N+-I#PlwP+s>B!wnz$G zB}WaW2*Zq7&Pzu09oNXEfjkCJ2laEgVOspTSq{4}sP(4o?X-x|jJe2*9&zmyHP?EYq$VBBXus_zWle;#5( z*Z?e^@Lh2X1Ez{RfF355iblUrqy+hl!qZc@q{}qa+4e^l-j{T8Q&!wZo^XwA_5A~% zchqTx<6f!1%;+y!XR=Bf#Di!tlJStRD9F_O=gEbrIaLhU%V9LrR&{5gtZYFygEbq zB%+eSuh2r1jE(g^0$vZT3j+BTnm4i|3609vifnh+a@W`CJWaR*(l8S7wnMiQB}_Wz z3Sph&4UUfx`G)V~`Zv!iT|pYZ$2kKv&sunbs^6juLByvx8~hkZw(G6poU+`9jF9|3 zKh{Wp^HkUxv@}-8KD-DB^>~^kL?SA){3MUCuOo_>DvzWO= zfg9S1G^x+YtxH*ydL46}H#5}6?PrF@qjJo82J${Uoo&>!5tGfwg1zq#>$*xLbep^l zf)#zKnWR+5&;rfEak)WSNx1ili(bi{=!#+nQjYJk|6m&HRb7oys)AH?0#tJvpIL>@ zHKqbDMhK7Z7K9E04=?nI?yKL|A@BvI{!%d9sm#`Z&M;!spqvdSiQZVBxe~8y3TXM& zzcJv$``zo7$hB%xZkunG`IU~TU#5M+n?v)14nzMiT?YGlct?J>4gbz4Z_|Zu9m!pN3F0y6?C6QyBR$sV+(ivmk@0}=>0bQn_lESYA(2ok0Po-tcIeg(}^`P zK|V!9TXb2vgfflH5sMTXUi#h7w*%pSBtqVOlZMT~nsl9f`x$u;sWACcL`HK!V?c&h ziB>|UK&3>btVV0EVG=jjOg4RB-x#?Hp6BNt*KsqfU4t)sT`|zLg ziBg(Ug}Ett%h@fT)YLdt9o56t-q4Jx>gKm7-ld$2ZAH)}(bds0#H!#14}OkKrK45> z7q?`7E{s#rvp}l#Zi@LLFCgI|{FEW9?4V>)e6F%npjI$jtozBMP*Sa0$*4$Ph5j?W zI$wdKOsQgO3Ak|d^G?B-TDg+-=k`Lu43R1PY|O%_{7P}7`d*i?xAH&pa!tLd6zzPr zIY*R}BFynee)ML2GrurjGS4?(`6A9p&se8crBIsPa#B6BgNPcB=-z4KFz$8n{)g{>{ zxO3LBg>f-*ma?~6OR^dzm?V^PT5=q4adDz^rJL&-dG>v`>a6Im(y;tCyV05(Ym&7k zIs`ZLmR^UxPBlt3Y(~Jcs5asX=Ya0Ol2e>0Kt6m#GI^-3pfnT|2l799&o@0fqo7|u zQD%o@5c5E@UQqOj>qzx5@!J2I;~JgBp16xRgoKb-H=L6+mCg0nZgqA$PZRexFW9Mt zPts1VKVgG)#7LKKf%jV~T}oM4Za6A2pPAL>y!xo)sQZrmXubAVrgbJ{oi93VO-+p< zI+i+aE5j?3%XBMXwi^6TKi>baJBD!*y5TvNS`l(>aK&*ZKD`~9`pw>FS8q1PUHt9w z+ftvvHQUvOGw5pnJkKrP#ro{{ob_z|R^^WWoa18a?)cQBx5mJf{f0&Fp65RJ3GJcP z%%#G#QsLI!qQnFKNk@(hv)>McwXoGIKa%r$%?%m@N6rW^tqsxGE`G^l^Os(9gv z986vi#xv`=XF0f!s!)DIjyFM4`lH-Z z>a{=iK;Z^TPW2T1)I%e~@t0%dG-hj#^7xZqdIMf@>#>z=+0;|?cB-b|_ zxj}L#{p|PH3&nU#xyn=-_ekNQv8$u;>DIuaYub0}Lmpy&tzvy@oAZ5jR!7#V=^A?j z`xmpM;S{cmb%yPd((0&%y=twUgb_`ad^hm;vd#s~h3)o}?x99Y)$P$^&)o1}+5o`tN+$Da3Gc&<##EeLw=G^Q(^4>ztt+hfmVnPYh3V&gqDyL4>V=UCgz9vp1U zdndz9%7!=@shRMY+AF)vewD=%(ub-E>f*K)d2)C-?CsZEQkC-P9c#C_Fq)JagXWql z9KsGp=9u+fOvGjb4sbnj9b(~PL+Mwo|A1Pm2Aq_SOuI)+l7&E+R*khBUoAaiO;qnV zH|n}TiuKf1LJvfn_4_3Ee1neeE40fCwe+UyTD4jZS76_jA&YTB8Tpg6X@U5g`x8(} zZTZTVd}Z}I^uy>ww>BZrOBi$}{1)rhAA>khfMZohB(GDW$@aj5e2OLT$CFGaY?1#105qXGfP+%W(L3tdKFb=Lax081`37>Z0 zs6~}sZVkpdkN(Hgxyu&&Q|pk&;XAQqp?cw>eH2gd3vAh-yGusK$7~>^2rxyQ;>4U;Onbrq-miZ@_kZ5}cSnBa*QNgtQv8d~e_aI#Er`U={GUw|MDo@{2Lt;^Y%Z>- z0vrJ@d;LI41Al1#bp*~K-w#gzt~i8%5QdNu7g2GBJWPe3f6sAuEv7CULeWn#8A~M* z;+;`(S?65?n=>#7^;wNK=<;`{tXUzQ#9q+H=-8RSQAC@M9W zf4J*YhM?3jjVtI%^$+7`cn3Rp!$|+_H-jDuhsD7^B2DIRZ+pYg=o^y!)5Lc}AYkQm z*0at2VP=p>2^#Q!|6FgFCJJFlW%b+L#DAC>u;kf)SP&Vos zr|npE-Ab?Ww)-NNn-!;KS$=_N2*k+${q5*c(61VxVrL)YuO?tM^m|G+OLG}sv@8d0 zr+Yo8Wy(bes}Vxt7PNoc(dt zSOQ5L6Ydu0+GZstcVquyUo*6z#=|`J3-cG-Z+^Rt9aar7ZTDa+eu!2Sbg37qf0V*x z(Xr`-HGMd$=OXpI&0Ha@2in;^Xd$yQ|2@_9cM(lYDPU-hB~$8K)MNwMd0aj$~4g=j`gJNp)A(5v}RIPhdK!IpGM1}gz#UpEUk@m z+06_@am*yK8)ns!n$_s=6L1SJ{R4a9vq8NItET(euMrhx zd6P7+XBYO(AMBj6A3=~)QluWn0FB=?yY3a{r?E{b@PV>}_JaR`r2qyXw&{S}o>o@m z*hzCMyE}GjU!oDIg_WycaZD!QvCUa9j+P(h*-4qA`Rq#Z4>Q_DhZ_F{x$EL$0-~K%}d&As^LR^B3LYJ*QFNmraEsAFpv_X*A zezNQ%AENJ8PCV85*j)cnB@02BrF;uma64%oSujfn_5L7G=JTnAk+W{Sic9po-y2~Y zVlbkTOHlg%9z-}E-Q5yfQ?sqh*f3jyjozylj zPdCY`>N+z&Ncd*;Ih1vjKX%xU3EU)DyKfR*_csBe-U!yVSNsP?9}k2{^SIWm{`2!= zQW)3od2Po9lUijBU<^RBCvU~;{k8)3bvq|op@@V);Gg8~k`$77x2^~4V?r3`V!yWM z-BvBOG^8@f`0{V1OBkv<6tHI9#r%mxf3I|Rc>sIn8lHmr^KWIM;}kGxQ>S!_+W~*i zrmhO!P-K$2(Ysw>w%ClWtI?xt_l?sYiGaE?{1H9t$u(fw()K}>m>qlhcZ+JEtn>QhT({;Fzm+y|4%`P zG)Z&;h8p3R(>8jeZ6i{Bx1Ag>>T+1wH|&q6`!z2a%v%lgPb_!eqR$22i3vcp>TBhf z9OR~zDPv}M)8c9(;z1?+dZRVma@vK=85j80wcq`2NKXOZ$ol(RAOwAlyVMJHU038jlt;USgF=;LEMZv;~h8w8T5(Ff|?PsR^d z_Pwyb+ac*#gbFL>L4JMt4d&Z_UC62_l119DLK~kGa zzssuIsqG>)gB0PjC$YRdphLSwokc;N2e)DGZAUzzViJo)2x0c|F^WqrM#lc4&LqZj9q2Q=@Sq z(er;aD$6BI-J%73vl~=1jr){BM-5=P6GNHXxOcW*eLSPy9|HoL@*Yry^PG$a_dFR9 zDu7awl~C(iF$`rKuAS3e3NctT&*vE9zxZ)CY$iD6%DIcD;eR<|?a7`H#s)bRCH2-k zT=0H3BOUO^rdzHTE#a09coX%W_SGG=NKDDo+|LITM(_9#<)&fo?>t2KzN1kr_C
    {dN)aPN_hVC0PY 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 literal 0 HcmV?d00001 diff --git a/src/Gradio_UI_Files/images/auditor_reasoning.png b/src/Gradio_UI_Files/images/auditor_reasoning.png new file mode 100644 index 0000000000000000000000000000000000000000..369add67e4c26d1fec133dfa94ef62809b464d13 GIT binary patch literal 73285 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�JonlU&~m|65GkJ7}H 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

    mM1#bPL!R#2r(`khfUyA2H>FBh4iNm*z2~6Z( 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 literal 0 HcmV?d00001 diff --git a/src/Gradio_UI_Files/images/criticism.png b/src/Gradio_UI_Files/images/criticism.png new file mode 100644 index 0000000000000000000000000000000000000000..499ccfc9e2b2f71d3cb3102e7bc633c95d8a02ae GIT binary patch literal 120923 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

    KSkHF{u0^kcZ* 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 z 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 literal 0 HcmV?d00001 diff --git a/src/Gradio_UI_Files/images/header.png b/src/Gradio_UI_Files/images/header.png new file mode 100644 index 0000000000000000000000000000000000000000..13be51b770e033f40564ee931b6c7c0c9f6048d7 GIT binary patch literal 126147 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 r25YDprU|5NOx?yHk&Sy4yjFdw{-JO z&OOKD?|Q%I-tVvPpTqOOUhcKmnrn_Z#yj5ej=6oKC@+bNO@fVrf`TjcOk5cS<(ef5 z3I^NNE8rc@sfS}IDA$F}#KaV(#Kb5S?QKlVER9i6p1lcI$I?(~y&bRpF--U+Dn{z7 z35*+bsHv}dL^tJBMQ>7mzJo5(6v9l8a4z)0)g@9Y=w+mRZmP5fElfnl>(*5Nkmd9lyjt?a>ZtAsoc_uH4TLYS%Y#4Q|GkHvYp1(Db*g&ZX}L>LE5Q!f%f9dUK;8p`3(INWJpyw4zg?&qn*Y*RM2g&ETWOcaT5-{E_-vNaSeB zl`+rT9d~&G{7?1#Qb)oQOp% zi&^^@KN`yoB9BB(PQ&nogy<|^GV|AX`*?0>;OpO^$nH6!q~8ku5ZXkSJVqNJVBOY@ z`*Ay+fNzob8~wMLYnZkoZF@hiD~YJa^2=Az#@xC|9g3xo*MNd^h|U{U7mfGG-;#1^ z$zsXhWjkKD4)uB1wZl5S`s?qXecrn|&2gL1SBPrH|8&~Ut4L3f_SGrUP|d3p>u%A6 z=kmh!juBiNZ-VNxS#spL(OoE_n_WB_R77c}Z%p$h1>1UjOw>44`8=J7 zvw}r$|KZ$-*;XcV+3#dpPmzp%mKPyd&>WXU@n{2Gpi(#@?X`9^(XqmacT7FLf|#MC z^TU+68!z;W_PQTHtRT99kksZT}E+$PLPr#jUCWCGEw~LO@A_oA>l`0( zFIt@!*Woc2bTQ|y?W*FHDVs48Ab)ZuxUT4IzsJl{d*Al(5PR|yF-6v)0AvZd+U;7j<0!Lke z%N6ywo^R`}2*FKJiI=a*pTE8sof_H z%YDXCL}4Z>e}D0V{2b>t!Lo$jg9OFv5Rp3}JM%6kuMev1-M)HRR*!eSg$2(TG283D4q4_9GBm>qv~unWE@o>G z4+cTMzTw8rnBBL<#G3uVO`PD@{Vj5ebW7J&U?NbziDKsLkP9u`K)B$6E5XpKhoX-R z>62b5$`6Tf%W~sRrdc=e-T#m&R&u|h-sSO^D7jb>9nrC8IS=9~oo`ay!g}`bBYA7c zoW$FQcF!l4d|%GLxr5<-Tz#MB`l<-SO2N@k_SrjMmmDXFP(LY&n@)Na#u zL-aDL6pmuI#pXllqv_%FjNz(8Z`zc@U^2bQn?CoIo4TS%8QxZYWa#b%C%X7 zi6VV>Qf_2@$S4#yD*NX4o?Px@dYXyPBLxTF1

    D=uopeo$tOS+nMc{jhbbcjcbWB zF)+c^;A&q6^>XoYy{zP{OxH2i%|?hunoBAjS;=I`;PQE0Y;owkT#kb8S?|@~tEVV* z6<>eN@L*y!q1qG2orFwu(WgL`4TKIRz-px~O1vhY<$j2N zQ2szhlKhTaGYUrm$Lq&Yh6SC8;|6s-EvzkyFAx)3pA8c}gnY@iO|7HYo=&ccL(2p2@&TTskV9g*eJ?4DworO zW0i}G6Q3)=OwY)x+0U}RpruH|!ftS;IxXBdd0w>rN;^4&E(09$0rGx8zyekpx<|N5 zziPoLP8ui|()l!|9iEvRY!zV@uujd_-!&j_Q1(5~fza^t3GH+yOo?k9vi4;^V4q_j zpUm-I!@aj;B=__}I4R=T+?$q)Q)+oCxEFY>U8?w=I>@#}%{=Zj(&HQEwTq*V&3m5~ zf_sn8)N*!6z00}Fb5X9VOy?!@G&7E_mTpZ&MfqD@3tf-#j`7|x`f+Qvk~>Q8sNXqk zV7Le!@N7tq3%MiQ30?1P9k%yPJZW|)GwtTiwmY>OZ5G&P+naH<+FRL9_sDRw`LVJ6 z_{a32>Jk4o$IkrG#uoHjiJ{4p16KWGp5r%Xcqi4SZUrWV@`py}BIjx6WT?@oKTt{0 z$T6a?m|Pje*vBfz=)B5%L-r~juHFsLPgX4pMcKn=RMu3*q9dXZQ6n*~SAy8ZxVM5h zf>Nfbrn4J1B{amZJ|MX-@{rFSGIvIsok^!8nf&Iv(s!co3P#_)cD&;ul?jd`tmNC* zjnyA3LR9`3{PFQ{5To=}|ErZ(2XD^bFx;yA_>`tox*{qkf$^EOELGaW)U{`K?@+LM zbslc0M)rT~C%u*PNH)gSEBXBE*qi1@S#mS7yire|$;ghz?FZay&6>HMTHMFbcT&!{ zp|yb%&tk)oAGz72-|8JP9bU+mLet0K05P$NP*8JIOYor{qI3->i>>B4fy%$=>WZx& z`#M&^pH@{;^(ZNwRdR@P_~mv8)v06&-%Lyi7I*R`3w;M(wQX_n7C5#f>n4qz#xX)xH!RCbIbK>o!;K+FoHOtSD}^!|OQ93e*|HU~ zW4<&)vx-Y!RHwm}w>XVhgf?<2=qxLiV3`MsJJ+gh{F)w^|!^ebHj zX51IwACi_?r%$X^G*u2b@Ez=D^98sFPR4nJ+UD=p9G`7tUBQQ)7aXPJwU@3AiCqM( zhd!qmhju_uXQa+Qv5e!yDO572#(e5i?!(1raMpR~Ci9Vw_09DRWV)_FH< zKLLaiO%dl}GUa4yvQrLa-zun?B{M$)TbPi@hug&`gp5xosLQ;_A+3a9n#Vw93%Oh6 zxMlP9wBtx@OsGs4wsPIe`T{er&C@M0Q6>eH6mN|+q)g=GQ0T$&RTK1&pW z=zkq!uz_*V<0v$7kJ~E?K4dW6qMW4m%pe|$`7}|{fEp{ zH5@hMWO-GIlhibhWaycHngtxc|o|c){`I+bs7f z|M-Zbg}{9cIYmk_8+&6)PG(kS*876kl$4bG_Ag9$mBpX_c{%u(!2Oqwj<&okEG{lC z%q~xuZR|~19`o?u?4pMO24v8&nNBUwBAIV~_jmdi6NkC|Cne%>2g%76JTucDc&v8ATC znH8`Z7(?(eD;GQe9~b;~>hB?cxm4rtOWD{Tv;BJMFQ@+fQiy}Gy_k&^7}Qbl?*;qw z;$Khxc_BZ`<=lU<#lH;w$GgDNg4p~lKUYlMAjSdAx7)454MAa2_Z5%7=*1$ybk6L!R`;>`5NOYLUxDVM5BeC}#Xc5Yyxi|M0_4 zt)CT&DqA}?PrI*pSDLV65D257{*QlrZxRpr)TzB8Ek^qvueiK3B>`nY6DjKdItcjO zYbh{_Y){UW{}0!IF+Bd~iTpFhKeqZGo#h|D`rkwSA6xxntN&(!f3W?(S?KS4{Ew~v zvDN=V&;G&P|J_givDH7e`fnEa2Y3IQh5pG=m*vAhSn|L7$v?LG$5#K%0{_3`u5Urz zr1yoD#bC}gX7BT(j5NLT!`aYOGw-v#NC-@|m0mqBc3(M7I((`SmusxYyg$>B)UrUt zHGJ&pe~=SsG0`yK()Gc0k0^am(60X5pU=3yr54DMBIEY8#RP9S5rf*pyvDLKBL?-n zl7VdXQJdPc+d8YxE6@PAG>k3>QtiG+iGUQFbWUkeG3%b5z2}-3TItU+a#|gf^T=%` zVSj0W?fd;d(ZwQS%7XA}Dw)4Q`|l&#Mzq?C^GYU-g1Uw71e;)D7C5y`#6#T(X5DB+ zzJZ!lV2<>Y6hB>DQqB@Nu5tEtJG~L6i^oR*_r*WzifKVCL}J$tpL8(dWTT zIpzZ}>QeWJ;NS1}*&G#3JMDPhaP~h<9Q#&Jn18WpH(ayWgqnF0dZ26T(G|;+Zg_px z68nA@Nq8XXt{DDc3u$zL`$X8Q`kq%_(Up11X>TDgoniV6J$i_=Y~SqV;?uo~a6e*T zU&nVjIpDB3_rCM3YSdyo@P$sCi@r4pT!|QRH@Mi$n`i_)D#X@oxX8G7eWcW)xtu2l z=XVkFH3aCJIb%83e?KLhh(LqA;(#7Io~&f&f6OCh*3r06R76;1-jnFd;TU?x1XKS!qXtcWmFyD36@ zB!Wpx14nmk-J~-bvyaQ7zXgWqxy?k5iaU#V(fX0HgQL58!eMNcZxk1jh14Xj#=3-p z9L}ftxqjMld@gu-P98D`(YFxoZ^LOG{Cj*0U%N&yL{Fu0`#<%6*nln$JwWml(x0 z>1p)Dv`bdU1ThN2D{fgptv_8_2is=7sGYff507unfWy3>cI9~##eZ-xX%Gc!p8R)z zKP4=TR(rY~4Be{7;}WCJ zZkB4c8dGL;>1+s}7O~5Bj_I6tOHp)KXgiDDWePgBGSj&VLPuZIW#i0A%pZSBM@fQJ z?X3;>xgTs;d2Ezt01RXJl);Aodu)ZNfi=@2A^&NHzaNVpUia?q6U#A#U3ypq>?QDC z`Uhd1oTD8T&gX*b1`NHri{h)AS z)MK;SgYk!PG&c1bwQH9Dg?h-zZLq>D;pg}9kvyV4=%(RKD#28u6J@tr_D zWEL^5LjGb80c}2@8f~i#?Os&ByU^XMjCxf=dT#SXqyp}ato??M#F{wFdcV5wE*Vz3 ztlq{biRQA2uaAzx^euX@)tD?H;<|cvFj4$tv&sl$PiDv2Y_(kT@k*Dn8tBOtVlNhK zYNIQ^JbPP!53i6Jt+TfhroOi}66ZE!0fqPJ_w(b`eEY&$yA5%$F1dEI-_k>#SFl?Q zGTMzQSo9={#KwHBAZYmla4A-)i1L^F{pnMQmRDb9ieZ*G9<|_JQy&sB!Zl57(-hEs zCL@yTygm~Cp3IoxM$3mf7v=(v^Yyaz^&hiVGhg4p?dRLjB6AFH@;R*#VwB-=Px(x7 ziqYJD_Ras75dW-&3TalxT-mHSVb1)P{kE!NsRm>!qwv7=r0b9mF!#Nc`qDs3+3RK+ zS;{lcX+2v(?mCl@)2-LjtF@f%3QBTm~@hy05T)fXpMCO+fr+fVDgs% z2J6sg&sEFSN_);Xd=*0(AW7O=+y8)qv_WXtX7BGjzK@Vi5UlPISQ{!#*;^TYa`okU z#cEzUdNt_Kvi7w`D+r$LdZRKE&m3EB&xwkKYFn45k-0A=aT?U2jC!4{8;bt|`o7AK z5|gkX*JLImYmZkLVt5=(?#HGTMATq?R#mB!h9o}XTi2xhSP_fo$hq+7q2cQuZCB|xlanDQ&DorzAz+vUNlS-@EyQ# zvA9n*aQ#8x8i@}^)U>UP?P83JS@_FNFEgNbKAp#_-)S2L+RFN>m{wo99D`ySNOOao zxONDz6eBgzV~ob@goha9;wZkt2CW~dIi1%uJoZYFYh+xW&kY;j!p-^~UA3mG8b}hu zBK#GYDW9SSyj$q_a_d!*=ViK@W8+SxR7`pLJ_nGL!4j!Yl! zr#CLw!fzL$j00Zl$R;cKi_QPcVr_{&crWlM1o^L;L$_OL()AjawE%U`aoL;@5zbc6 z*Mk?X=E{hn_|D+a=A`uuS}<4bRp8hy&xwl2g|88gk#O4@usTYL>}=op6@CfjgozSr zPPb)Z*o@!G#qn|=GN1J2*Pd&YU`ll4nrkrWP>(Nc6qSo=ZuCB6iA@`gv98F1*f$dN z+A|b9Z+e?}GdcvCc|TfIry`!uC9l(2YwoCo(`uuwygzPZ$RE0;z;8JF?LC8S<`pv4jnT6FJ-#K%)sfQd zW#Naos2KJviSZ{16-l=wt9L(E&oT2Rh2@z=g=~yhjutkPTVPRm7F?#A@tpr-Oy8@% z0Mt7LPu7aTrZfi66U6e*$ILJ=J*Y@5uqw%*?U#HtM@DjR2gy1fIb> z-ILm_i0tHa6y!aZ?|YUm`j8f!?AJOyYBq&Uw?$sdpfck+)$VlhVTJc$yW@pYDTaZS z^mBCm4^*7C3GEY&0z649XavBvMSCQRLS-5(we;frWVHV5c$nN{P2?FvE+IapA{!dE z4RrUrB&U5pE$P{&_h@oca9`dt8n5GnO^R1#gfP{p;J{zQ;DRMlx>w)(tQ2}U9aO() z2^~BKfrhhIwR_PmUsF0ANU8-OBqx{jih|hmQE*^epHa#7gTzf^hsDm~FU&1m4hym| z%M)VtRxY`1x=m)<6$F#am1{S_SX0Vj!3T174;dC5u3ADmka5+&)uz5|^ojnj6$JJ^ zhr@G8 zqpQS%@I<&}h>BI^g4GH!Z!>8TzCxrcBv>bS{|JCiqxtmd7RV5F2KNH0c3X8?`L#va zxHArKCx`VIf;QM-0{fw`K{i_T&>H=((eX!V{aF_kcX_K09Uo($1OP8l`GZT26$l|^ ze;KytWS9%Gzj#-(I0gYN85&8vF#uZ54oGXCZTfPc#dnblF+85H@_g$h2DE*>g?pC2 z78cYGw%S>0hf<|JSvI`7Rxcs;-XgP7HirHlDBzi|nm7TvXEiITwK60wMyY}d6;h$j zW6|-Ep<;&E^{podVnRyg2D&O;Hpz83Cp~v$xqOe>%7NS2pQ9Cf{F0OYB@ie&V>${S zHxcV!_tS#4e9E&b9Z=(3+G<=cXvBMhcbca1oEI%k+W?f9oHIv@>%)ePexFd6;c!rn ziP)~%9`NY{&v7h%O!jkKP<+`QBw}k}n^ptIzvR;(s=C?8CltercjFN4A$%htx)nnq z8}6j)0>Sis#tZW-4y3%MUH4R8Z{2eFUJ6SfPP-WyIJG;St5@x=`RS2dTP!MREGa0x z%k5s!{Wb$1;Vul-w;)V5%OokF{kK{4?v;;$qF(Fb{A|7DK}f-6onlY^=)RBeFri}p zx@o-Iw|M9VPakWhQm*xQg>%Q_=Akd9@n$670)B}aVa*$dfbaTCOW0KXc&ccoCPrpL z;yV1|lU$CB9;*yhE}8RC{qAs7VBPUeMN>X#5Ka)t&47F@(Ao}thj_1!SC*|;A4~ug z;mQURdD?B9Uc>_2X{|PJ4fS_-x`i4(Qo9ZxU0cpbkoPFiO4|(;I(OysoD$9kw&odj za7IVPNXAe#n`-*-U>$&2F`Y`fc;|B<6kQ9HshaY`u{>EX3ylqW^NWRYY<$yXB1d9u zYVKl`u-`kx7dj35{s^$cmWmCyHY>ZUITR1 zF#GAuc9*`_&o|-=y*sUmso()@y4YH`@|-1cK96IJ3fH%Yx!|;!Lay11aH3a&sQePu zL|w9t+am_cZ1nl2e9-+?v{wqm7=$jLz1yNS{@+wFP<7qCso352*y!6(C)eb?dpW@) zyMef*BX5{foz@DQquq)6zytXLXladiZlo66o$}|jIX`_C23D$zxoS(4l-0oJlJ)=L zU_UW8%mUR(SedmwsDyBcK4&0Lmv1SmzgQA~b()vb62P6I!n7SmTa`}@vKrK5`}>DK zI45)$I%CwA1TX8leTTRs!l~Y^H>6f2N=e;@fxS$?aU5#}Ey;d&95G*)3AbkE^0|*w z!p{90rPkvkUEH(p42Bw42C^kP8vvuroI>+H{SoxueVMv)G2X*+q{Qq42^p_r0Vrw& zm)?`{px^q1+q5VPC&&P1v{4~&CWy8Fp z!S-CMh~g^H7hjK6jysPJbn)-VuJ&bwE>m)Xgig>RZU9gaU`=P)1RG>i#;UTSmWgZ3 z)_=WxF+L05?iZ5ldmktBV}vMmV-SAXhX;})y=gKyI^VvL+E@ZgR0Mnwxo?lWEWmwt zb|}$^Gz~zdz_~1RQHa#{=+twH1XWgza0t-UFp0{5n7}#;N;)~n>PurWP^JyL#tljT z^v=J~4hWhnbZ$*V>KFncDGh|YFQLF{+L2@~jEx?x=?{GBj&C2DA3Ij=gz&8$5$mzW ziOX04JX9bUQ^sGM*oBs9gI(8( z*MLFZGH=aC>W^43BlbpC^G8h+ptpymnpsMpz9*?Kc!PfB`qezA1T}Y10fbK=1DSpk zXMEY13k>SfDi@+HEL*~;(hct`YaeWkuS*lpt;_`aBwj{$`OT;eKW(I*i!SR!IrC?Z z{*u;txe8Sy=51}u#y2xB12Pm^EhU40@ zG4WXM=E~PMx7NFbE@Ug8I}P$2FQu$!ri8FTYE#1TE(PIPCj*ARVCyf(5Kg>zHAkzo zZKHgVymCH5+p_5`(b4|1>h~E~Smoe};tnM;;)GOa=ku*Fi9mvt_yMj+{ zNv!Mm0YneWp5eydVxKCduhgeU!#zo2R$pJ=xGX$NJZc8iv^8t}@vud;j^i(R{vJbt z<1m|t+wM!!d2wX=mu1$?ST7Ito7x_V0Zjhnm02@tnc~3 z#tGX(*Yih{a~IE|2KdmnKo`c(nDO1F+X8?y@}!&J2%mpTcy3X=7756Inb`Q2IZy%- zPAmPb3JWBt7}8&S0_8l<1Bfk$3JmuL)b-QGdC%lQmH)%JjV?n2cvEjzGdeYpjI-w~ zHQ9a%qkrW-RTN*Fnxk*>yvwNuQLp>Q2Uv|@S`KqJB%=Z;QZ5~QRa;mf_p(IL1#YKy1?y!;ZSL^4tU(uiAo z0?Lr9U+X2(oI>U@_V`a$M+~YO3d^OQB+h;aQX64wIEM#vEMS@&h{Pu|5!%*wdGK!) z|G%}Re6jB*8Z>esb&SdY0Mtyp23eulW3#;3dBSZGJNbh*7f1sx+64x_rIy2N7yhy$ zD89-}Tj8WPO}D1%_raRcSS?;5wIsNH;$EEn6_Ozz_vdW?WY`s$5saG855`^e6_qTG zw&y>PW^dXwSB6MRBHn7L_P=@f{65;evM>a$2VLg?T5p4rtrX>CAdY_^GdhH++z&%Rz_>zMl&_FfvUI6qp_B%jS1Fc+Aba!Qdf%|*_6e}&wUo;#6m`ZTX-u;EZ z{%JyA3;v;~~8f;)?GF7egJ zE7?b!o^?K`^^?_?qUWTM?BCk6MlIT9caI^zsy80GuXzGyuwx|)IH^_G>Su><%NZ(n zc@ppdC{7{uy-R7v72g1q^XZJ^V!0_UmOf$Ihzm#Rc}NI$eeD3*+1R=%_VL}SJ?Mr}3lw^t9g8#triAd)|DPBf46U1K3SM_VfUbZbgM$)uVf6JSLvE#sdqIQ1 z6Wik&emFThZ`=UblQj@yH8u@PdW*>B=bem&W{7)i->{sWOp2JsWvOI5wHEG<7x14N z1cfi*5%(<|5RwqY4Ts;eJ?5<*UpmM@#o7Mo&iauE7TJrk3Hx9x_^`N<7-0@Hzg-#6V5bOmWE{-8Fxs<6QM6WxSm(T;P{H*+uH zDvM3t++r3cf=|vrgy%5%7(jIVv2E8zzIIvHBf01o#X4B2Jd@rOIoW2P9>J@#`^UhN z#O7usVlG!M)ts!GGN|PgpyTuR#Cxq|`I)d3HcPiVe;&dsn!=`GwVU}$iQw4i-4d5a6VZB25ph}(7&+ur^V)_FH7_K`n9r2FFvzcQ1ClcHj-W4 z?8{K--L>3^-Jq8e2)8FV@z>$|C33N6hbNGDdqs$C-SLZQpuZZId%ilV4b}xe|#gg0#J4|m@>W0Qgis6 zbP7hP4$7d(+4AVbb=Td(W`yr~;HWy^Os<-e}yGF1i?`{`EA@pHg8EE$laZp*!CQterg?1;`U0+r$( zLNvJrK71H(?7HbBHac+g%1Ak}$|a0`G3(4YThK1>1sZt+=vdr{@38utz}&;hB-sUY z*Gyd>TG|=I#WLAT%3=P3SkE$ogX3~pT9VerGDY^2HN|28QgehK_uTie7QT_Oym8gPMACmwU%YMagR|6 zXnzee7Cq}e0|4oNrg_+i50?wV8!Rwvye}Zc?_hU8t*w&l0ydKjCQAf+4nz@tR1Nin zShP82MqJj}mt2d(e6S=0G+mFOOgZz%P|ne68X&e>Xxmgf8D=x9hYDSs?r;u4Mvnn? zyLm!=0p#b_F22pGuk6;8ioIw6+2pk(CTpNfqqPT8ICFStRH(Qd>C&7mh;B2I?ZsG! zu0nx>u_x@!$F*5uK7#E;gC%EHBPDc}oaB-qyFW}!%7P52P9NQUVlp>cbV+^gsOe3b z&ECm#2h3tH#Z=*Pzr@Yae*&-%h% z1(j230wB6I8qxY*2dduU%*QsYwm?^j_MU``^Xz=-!0`=^b@+UGHyILPWO5uQV?}CH zWw$lHHRjM=`kr%y78C)Cpt~`X`!^;1>xf9p0CbiApa=p<{5th)PUWx22hH4hJ+70HZRi6W~s8=wcV0!|CS6 zXr6er{6pB@=Hw)^3)X&L>BZ@yP<_u0t&4^L9RI1PhG!L-SY=w~1{Q#rIU~niB$@4- z$(&gQ^gc%f`_HZzdYxkuN9{`*l21A&Dvmm~GnEnE$tgeGZnxTPXTehN7{P^!>)~|0z4Ij0rShWY#Lr1^A@EN5 zsAf0rUgBnNS}?BL>5mdI&pC7bw-)YsIO|n=gWB*ntKahyC!-!4tvz(vUIN7TS_5I( zq;pK1>&%<_H}}?eE_u?~U~632glFGwbXMGBSKFCF(;(bpD;-uD8n3+C=_@A(wHI-& za^@91gVd2a&rQn-lth?_H=opco=vR03X^YHn)?L1qMDk1u$l-2#>@Ra>-%-S=IO{?YoCGF7P8_dkm0i{X(MQ3Jn6i_A86sCZyB3IHHB!i#Ir{96bd&nm2uYP!FxpfM zWDv))g1rG!d&8n}3(7HqF*@$cX@AsJfbA<&(lGO&eP(LXLo@8oQ*=neD?RmOk{~^`}m{P|m$>MB)wA1CJU4d^PX7N;98DUQABLm-R z&fWXP-k8BA_JGL#aHIC%{A7Rf;+zXn+s<66u~^ln_vY@l^~)CAfPCfA?ED(@3+9tc^(zr?IZSbnWe;TPr_Wh@p{d z-y;LU_ibahfNPGb@%)KyO=;_Y88C?-9YlQZ7pxHrbgWrbAaV8IM@9x=<fy}^%5Xb50 zWOxvTJFWhdbbcC|NR63m#e-1(-jPx(i^+-=A?&Ymt=W3%Zch;g^`HV+HC50F5|alq znX}@6v@c3r*!rxW1onq4`!D!+!e1C6fs1!+`~s(Z3xRLoi>v^T~odLdsbkE1R8CViRULk%Wfv3J)R zD2X#YTB^Iur|SkG>UwvtmrXImEmx0>3E1S|I0pE;&+1~LK`2$)=T8_l3?}dcT1u>@ z_gfx>4hbLdLB2su%Y2oQJpA;>e)7wm=&K3DlbhOkKavZ-_br|vf>K#>eRF}A*P9?V zr8&k6(a+*+dQ;zIwHb}&a*Oq5jDDM`soBvXc-E`}x18Y5tHuW$C&s&?Pr|SuIn^Te$Dy5({)0`7r@%wnn%`eG?5 z)tQp?g~BDS+u8wgK*)<*))vk%de=1ehU#qc{hf;!S1ki3sea%5>WfXa_4Sql2F*ug zj^?K!eKN)hByMo#G`dWM+0s>9sw6n5PBDG&k8dE>;puOM%}KhpqO&mwvo%d9=6c?vss{A^eU)bPkPcZB`6lC^m}v zp5pec;^9c0sKCjLkw?`us%A1+)-1L(k)C~T0wX0u@d6Vpr(uslw`|0Hvo!L(qZlqM z0A2f>hnL_yF}rKQUzjAsoJIYEB_QnejMD_#c@w5y?5{P-B^Qa+Xvas4NOoNNPd~fP>yA;oBFPHkN$2Kj^Rl%PC25ZY{4(@$RI@Gr3{4$0ZgcNZl)g%$2JZ|+8-)CNzES2vD z#9pn&?ek%~!!uVh>I@7nlD=BH+nGX zqTeGW5uUu^-0ZXv$cwTPT{lxN4G@^LEc*TN zjXNuH({NOUkV!1&-!!>{Ts{SolkkDDP?$&%8Bnf+k2XtzOD2i{rM*B*!9R*~h}V{Z&N9 z(efI!b*xRen|G~=E5hO%&`P#xSclFo5Z!SIX)ElnD|5;6e&MPh?I{;AmQkWYilVsf zo^SEULAcwbRXAcn1wmI>jsd?(I3}Ffe>GD%EAX8<;;Xm94k1V%EsLjiDYG4{3lN7K=V#wePd6M@ zHROSj@frvd5N?MWSCV=0oNJ*b@8~YV`mxi`?YwibEuQFPe9(b!9pukkm!g=6u+-OQ zT7?``ZxO0v3g{^DRN;-QndbA2drWUt8HA_Py-YLY8?bhXOK?1$4*;$EjS~uNU8FP7 zjH(;|J!dtdC*>}Eh!~k{%MUsl)9YO zz_z?&WAsxF=q6K6UweJt^Hc6J=E>dofeIOImBpGT<2`vb?jEiupl-NRIS!d=a|)>0 z;*~xD*(L3a==sUta_yf-l%{A06|DW58^TK5IcZ5h$ejk#9SxX5(y5rVtV$t03@QVr z?1ag%olLXLO1&iV51(`gGC`M|#!8L*s>)d1;AMfm!jqlu#4tyg_iSEW<2IW1Vnuub zFA6N3-tb@^bK+F+RerubQM)6n;yNIQB^e3s^ryDHtbW*cmkmr;3O?IifvYmfiXBVf z?j(jq=Zg|S-ZOdHR%M=i#Od2Q*-iAvE6N!2kY5Kw6_Q)uk>tR|I)2aRx{6Ll@<>%o zIu*yVRm6}f&Qr>28r#NQw)$NPOn3e=OmN385`5ehRt0ud+cuFB#JZmeZ`WmeUVYhe z2ZHv-yt{n*CFFf(Dv59I$B)M4^GcWdJ3S%88QTvNrE_WGU7yzo`wL#cdPC`1PP#i* zJ!b0&^6u^(jjWUcIy#Fw++xsmia1S%&Qt9 zHq&prqv3sE%hN#A+3Xh`E|=B)>3YW-pBl7+%Hs=3$e-3{A+!!r zELTKc?7^&O@kE*Rs~ZE>&+L2gj)wuJC1S9U=5l*8`B!UO6e0(rKu zWQhiqUoz;bZ0eA)tF87V`9qfi39goHq0SeNc}R$rr@;rTU7I+phXhOC>)4F-8xpB3 zvb3GqZtBMEMy=opa*cZKv`D9)VHywSB0wRc2hmd-sne_ra{vqc8#I?64GV6Vv8thr?IFf*t zdJjR@A^c2za(259r6WxTXTx_2JzXYdLj4Q z@%1D7x0WTw@oMFSPPhD>?8L~9+qC!)-I^m$F=v%yU?vPXsdb9X+K7e-eQTw_)PwHt zPMrDqf{S~$sB}|YXw3z5MpW-OgdERuS;XnN`*Z-Y z-~3XPjBAusKviJ5@#LHrF%)8e>z^}yyK(ZnfB4+lohf?8$pw0sBl>n?1QjU-HneQO zHkjnTQZA6DXdpvcHJ)xWh|i+>N^;GpgdGf-S^gc%NmP&Xorp5JoyiDg9Qq2GHLK@% z)6+PeV3lA$kX(2dgE9d84|-PnM1MKaU%N}N!Jafh61WuBndfCIOkgT~wN5vd$+Kr0 z?CdY7PeQjG2`SbQzSKDCAFZ#sKd%W_HlM^YWEZmob%}76f4zC*c{$ zaJX}|#lS5!E3jn+lf2-3Y>#t&Bv+f&2DGfKek4ms<$E8Neh<5sHBjnD6EPLKRd0Y> zy2S8OB3D_g<0y%c{h@!L#Pu@EeQM(Lb0`ek+QFn--cpOZU~jCrJKCM^L`}n>or3*f zCn%po{OJ=U&M+75o6Pu%KmBF`U%hn4qL)>Ob6&!R1Yqy*>brpz%oj;98CIodo(tC6T4|VD)G058Ibx5c1?2xs&zF@z0i!A#wXPnxRKC5z`0@mjr2zQ?=wKLo44Q4(n7zza*<)C*Yj4N= z93I#Sw=G&k`tRxnB>~eGs5?i%_N#cpLEbj9tJTOowGh6Xv=vzrL31a)fJeCV$Of|4 zxLlCn3eNnZPjCgXZ_86jHiB1EPMWS+o-IosB3-JvopSdJ8OA5O$TZ%W8&egeO;dB6 z#*IX&>pjNB3Cn}-4XDF+m@6^x8H5Y^1z2=+nLLHvsa_sJ7w=~WS*|}bJW7*jYiOVH*{F&DAcrWi3crbtj3j= z7JPr5{&{1zT6uRfs8+uGb{Y7>j%rdGSgkMo0#T9)__xc2i{YB>Cx9FJ8>W&_iOWGsAaZ=VI4(Dp!qYQ!=d)}LWKNP+ zM%KY@(Dh4lP^NQ7ex1LJ9QQ19-|ysnT}*8mO&hkGmc*XYAdVe%B(DxMWO>%lW(8B9 zDL@&U##kXc4jI}oKPXeoFFt1u9Mxl1J;+&|3eQ8+be$;j0!dBN8*}*guR}d!NSww~ z02@J53kC}}C_$h!+ zX>on%Q5tBcGn(HJ!K8uMEBD!=z-&L~5iKS*c`2azxRRqbU?R+3ic!Y{dF3<6)3J3m?5gGgpePgthZWwfT)~$ldzTmTx)r zlOM7eY`W*FzUxIpb_LNY{^F8nS0FU?R2dt@IMoz6}`Wqwmb};PCh6m z!mbg3ZB^qC@7~Kr8Qe_FvA70u6I$H13mF&x$yczL=>?e!#jkT_)kV$CQ^2%2IZ21C zTEf~@Oa1gXW75%H{gz}}WpK*Y2d!(V_hmR>45jGRy5KR7n-69cRZJLc`2+sZWNdfFHC8KwcM;P&cYhEg}F z-qcRQUmUd0_ttCHEkn9yZlbnQ9&pSwS{k&tLAD@0V53MSI$?5p^WXp^X=!s)D$!wA zR>!mDZ8zp`?y?VEw#UfeO+e8PT$aeed}pU5`~J2Y+LR7nGgqGT>px&sJNn2`zP#0arPvHt3KZW=jVH^kwkvHDL>&;H1Rvh%`i6+zqB~q@v7p0>v{N7FBqwQhLKO z45q|{Qg<8e$DB1Y7oauErPD%0q+Q(X=JI~un`s)jum=`E2e%dVwU^s&7hGGYYmbGw>JfD-MmHS-Ps7s?@*AfW{<-Z0 zdr++!R9AiV62ixzbWExz*=cLqd&(|BVke?HX)o>eh^Gcgn+$W&Y2I=MaNwZ&Dx?uR z>8*WdTYB7|iV>M=Su=B2+!51Nqo>6wWsWn5MRI2rv$C10`C=QU`O2@91}mQowcNK0 zzIZ?9NPaC}siIg=68RE4y}V{|X63|>iTnGz>QC}ot8}c`nD9)d&DGZ<=(UTM?Qv92 zhoNsPuuzD09OCJ$%A>JSERA_zdvTT@&6EwK3TPEa67$ci&C%(oZa0MQKSRR!-G3|JmNm$2r*lw#Y1 zJ!pA7&l7P&duh13uI^Va?Wvz(e(%qHQjiJT$PH^XJ6ok3Dg-{c0#{U>CiM6d)GNj1 zyNLr8y)863;l7^VS!y+0mg#mElA$?u>2&h|*HwMzu49E;ApsLbEigSbzKLY3$V23z zZeFqBxc9b58g=aciFxUju)B9e&yZy>%IQERrMU*}(%>6L_a`vrP|s;veNB3i={Yna zaA3}8g)#D<{J@ZZjAL(!>k?ecKaLRLN@l-*RL-1vuQ2rM?V6j4s5IhIV7GurgKa_i z463(o(}HGtG1Ju}(KkhEH6UqP@l+f~eOHXKLvOd4LS`reoTUL|9*#On5r|Z@cTlBGPa)_tGl{)-}9nF-}aG$GCWnQ8c$dS^>IqRjD#Gz z7sZ(QS!HUS$_5ViufANTSi_SAonw{_zOKlND?}WiUB$P?eq{=9ZRXS$3i zvbE_;A;^_l?r;V6Wa{^`&lY$l?l}4rQNJCfo&)w!PX3DbX zfNso2R0pf<7*(#=Iv-=ah%x2)K+z!G$UO)m1{}x^)5QRl&~P~i%nCo5JiBhKFTE!$ z2&Su+5-sIr$t#>dD)^#(#l4+Q<0`#GtRTY1y_LE_ceS`Cq0IPH0EwAxF=9c{$6=9s zfwJ7BKBL#ErsMw5<;~)T=aW|R$=Sa_CpRu@Y_1J`qnBe_VS{)^bDT4)ET2V{R(K{4 zRc6~GA;^EOxkd$h()(7=jk4uTP`*Ez)P^J&je-p8w6y`#QFEUt>jhy2+) znMG{k-&XkKygk;bh^U}(^QM|Af8O+4u!t^{Z`SH!-$SaP^r5>~G}zUZ;zjq6Bwh&E<@NP+FO_>5DX>GkI#l3_EIfReFP~zKxdUW!V0^Fx9l&#gdriDVOHB znPQo2pq*`9_015Bap^*!hJVv$#k=Av!2rsG{y&H9EwbaMZ?Otz>) z2#5S#0}%Hw9y2pH7nWnr(A5_sLPi!A%j>zk@ z4`C^s+9a7pDDqbj!^VWDsF!XnnfTipOEbR5qPp8cS&Bxqr2U13lDYF5(&Bc??x8Rb zq&F6bBOxhWKZ~Q1cDJ|s)%EEKaM~G*W*ZSL<7;Gho%aO(&WV-mp^Gsg<$CRzal)>Q zyRUQ1D-a#OZsre+0AZua`eR+2kxsgbFh|_|V2?|}v3oeiS42TUzSrqILbM&~sqYpK zw)c39S~qx1i#Qw}dx?F)!Wr+)#R~OLYfe@b~H_9$vQ?$DvZ>6_8mv% z)5=D>-P?;!Rm>%Wr`!hDy;^5SoZ}BY3q%eA1O^3HqaJhjTHeiE#DR8%M-N2z|J|>s zp_srr#wHif?70A@)%u06k&$ZJQe>JeAn+XLRd>tk6Jtt3ut4KZ5_|An+D{qlkP;f-#Krt?CbRR9^I+OQaP z4eu{xt9W^R*|oy!Ll|4C@*p}KqP=1Xc^6TM;Ck7GeBEvLG)22xjA;QU1O7DE83)xA zg{zf45nGGgnSV>CJfPY2J z*n|t`yP7OAQ!!kPyU3;e^a^`Tk>*vP@EfvCN%~6<0SFkVvkbq#luoAnW6gQQ#;63h zxzIQ(q`otC=5Zg%tCU`bi!cI zp>0Lb?;6arf_G(0ISV?Jg}V`p2I7kOuk#;cL2~&9_Ijcg9MJgYkz^RaSpKGYM2V)Kp1Ye5N%|pfS@1Kx9^P9iPE8^rpPZsT)S9as!rr6;?`Hjc4kzOt`kJxcfPN z9`o6IQr*WRhqmC(y268ey@9g}@7`%GbHXS*<1lp)5ugZ6dJM!8IVAWZt#~^); zy9cZ);&YPPCP_d~D6h!;ULH!r2|i^bDkmr<3Temn-PG3Vv1i^r(8x?YAXa+)kEHx5 zM^`HJrIRf*46xxT}7RZFn@&-`8h#ZnbXCb$wFGtOQKXWec3&}3y2X$_wKg0 z(IuCa>Rwhn6{Reipc>Cf`)*OXo1F(9AcI;n zaAIZEQEvjf@X2)Vv@_9DPSr3Yt)MP5ZV@9r#OiU$?`a5`CO~f_GICU zds;-tJ3^+Sg;F3X%T`MY7CMAgGhpT0ub#<#3`69?*=p82tbgMoJ9UYv-jKdktO$<& zVjjdDhg2S`Z69!NB5g;$!LS-y!KJPTrIiq;UwSU=<`M#2-qaj*?M-R$9DSi-d|hMY z?PK{G!gS5cpq6@v6>1;nl~$}56KyoE*y`tRZP@(7C3zbv;`Jny>qOIZF|STDgwK-2 zGg{9Y#a0kD%N|#38rC3K+sSC-ANp-1?aI1W+N+4Z2rSILe{{JeaW^&OI&=H;5y$mC z2d$Si{%)~tB$&;fTm>BR|K>&eDyA=+@!n~%D82;0WLC0|Ud_!7=x)NS8g9#)5lioK zS05V75R+_fT9wtAU{60aj;730t0$af1U1T}p!v6-I;2{-qWx1!*wfsu)XTq-v3l{o- z4i8u7sN|i?tD!fp1)`tYtE2EkRpJZ1tjPdvN~j=-X~!xXfU~)#V~-ERWpUYRioZ>9I&DEAHWp-}zvXF$ zW`3dnjrb9yrRdRnFh=Ia7{}tB|HLXEEc5D5-btR}m4U0qj1D{j#*|mhhsqCT&>q=)4NT7=L zkXL3o7kB6eKC#MWTx?FMD%PTvZ5Rk2T%%DSzO+2pEjGKKMK0P-fi`YLIleYd47LdR zb>?zG<#OUDVfFsQD=W}WKt5us``E@#ct9Nz1gWC z(}s`8X@xSz#b>e7s?!`FZk%fg4!6ST%Z^*1LRJv5`;kl>le`+HGL(3y9;&dI zIGQ*bCYHDoZ8&>8xr{Oztx6t+d~U$mvIhd$LHib^O{$J_+|vH1>XgNjkMk+XTq{F| zBSXALi<^Uy)2mZ~Qy%c#b=^Tzcb}~>*&_o31C_J{UX@oHy#v-^dD$-{Jzfll5v!0F zeU1)7Kcmk^GF}oDs}OxlOz!LRK8@_TMDgAu(;VDp0Vs`l#0iG=08=Du6I!Ql#}b_6 zkUzcEznP)&|IUzA$_{}Cwv+i@q|a{=gzF0wRTB480%X!58JP|~n0?}5t@MmYLy z%mgZm>Th4)3gCL|WniC~v(FTPYWSFCH%e4#y~IN)QeVqx(V0L&OJQZzx6GGY>lr(F z;;U@$_d@KAm^)4Grz#xO=FY4^!v444k_Q{fA@*E24y|tvi}eRpwZHF0nxR?F0U2qa zuLt}~5`om4^F5PF7Dw`%FRHhn@^5iNYadok>~gUL+<(Cb+3x=7N^PruvBJy#i@l@m z>hqz@jbj8-R}jK6pX)Jc+UiuCerSzbPXvzQg$pETDfaprY3E`w?aOj})0(H{LY=&h zQO}1$^)yv=fOVLSm(On~yT&7ma&wWlvLGK zphh$>D${OM`A#sS)8tqrg8>Pg6c_Q$7>CWqM}%?FX>!ivbvfMrP+SdvIOru`L+Q`B zfjJQRZx8d|p6seDObk_~gUXTQ6mM!8A*e2`s@EWiQL?+=+z^uVUPS2ApYXil!VT4@ zH}c^eJ07o4rtp6z1vfFA9K`0{_Hr_$W3@8?fk~Pt#t>D(^a9%YiEzn+-L10$tROBN z*_mr60DUR(wn6&rU|}|?j%)q9K9U(1KwQa7HlTfw?295|oVXA+eOL8S8mXRk(S|fK ztGJCD|Ub_0M5eSEu|Z*Tfx;>|uT|OL;*A<%x z$F@nri3!_AbX=xKC9|1KfDv{Uctgnk_(KK>O)C%(5m`s8aO5{L{iz&5fEv(+??&WPgsd6BGfqsji$a8U9mT(CtLu0sk8m& zVB1Z6Ugv$C)AyyC;*oPZorJb8##4t+OZ&!uUTo(?<5$O)!HckJt(h^E@mRWrM=-u4 zhg6A+|3-kCh1c+bGqB*l_Ba8KGOWr33sd6*$JeC(jIvkYYksX+sRFETenGnTysNj^ z{V@~lWt`Oe9V9Y;Mm=s>70LfM`24+JJN%z%6CIOlOCBZaW`obTD~*Q;l|lI|E8IEK zPlK`=j?k`V5J`+^T`lIMJajxqa?;mjnFZy{%o{3N%^ZD4_SuL@Y^r_%cSYJOd9%Y9yiGfYmyzrrW>Tn<=JhpMMsW&9a2 z-NVF}pD<#T)&Qxjj`#xrB$WbQAb-A=%Co<_vKxq_j%FEkhe7cLA&u+PhC9FWev+ty zO0Nvc=iEg7L2Zr(p*G+tuL1m#Q%iR+Ni~})RK`B-0OoT;?9)|WUv`du@pkWfQ|w#wtj+o(6M{rP)L!nuINap~5 z{5hVXZLo7$RohZlR+hkuZMp+$;dA%#1o*nos#FyJ@%#()Wk%hetETn>;}Hq%U z^)wCMjM@z`-VfI%MkxS(S#Yw^M=)6@u^O&Xp)X7!&NjeJ&Rtzw`s=q_fWGW(IRIDH z7<9kjm#!PZA)H)I%_l-vc3ti8gOOzQfU0Nb-c4SbQNoVWLbaMlRCKW8pv*34fEa?~ zLQCyqI;w5@vvg69^IhW;0%(>!{kVnfQ>}Q8K;KK$n6GCEThRXJ^ZS|Mw-UMYw{yE~ zGgUQmdDKwcEdnRM;v}{drZzj_NYr-Fo(>G9+STMRk+th4<_lcVv zBGL#>5*k13UbMINzm&|-hYhm;MHx6#azvqBL)LnmJY4F~s=$ja);(XNCv}l9NO5K&rp_Gz z1fu!3k%XpQWg}bqPO(1H!Z{3%)_J{v4Q<|SO)YXVH4G~+RBlU;P0aOW#bb)iMDtNw z%G~(R6BAPCFJB%Gs64xw55EZ|p@(U|OhpKZ}P;Y%G2fMdFK)OTO+ zKV)toc-kg)s4DV{3qD-sC=>IiX8d+T|NBA2RKf#ttv|8#!VGsI2vz9r^0Kb!&%9ku zZcCoihLR;AzI-`V{e?)xwbtv_IY$oo$m5S?Mupr(a%tJ&CRQ0WYeKuayCdhooc_HT z9RA%==BIZ0S82&fd5?Io)wLeEL;M#@g4`OIrs-=ll z7)OK;VL(S=_?8#}BE!!1cuubjzn4BFp;Q;G{(DjITF*$02w1kcCTA&rA# zwv7A#pBo>NKdX-fTMRF<+O}1r-nrEM+Wx&kGTGl5w18qJNN#JUz6QU7#^t7vc1;ih zIgc4&IP@yS)>#A2R9L+W@;~BL$YjKUq-uX8m zqOkoIdY;61vhZ+!8}E@=i;A?vuuyMPE~X*ngGkIn`pf?((rhZq6xs;3x3{-@0*f3H zQ*W=;XAPt}+a-Vn9dwCjP%p*=e$m~s>!dXVraEU!Mu9q@j^iI{cH5 zEQS_gl`Dra;^)?IiV30Mk20jIwjX!=<_ur|^+?`BgQ;G@rF;>9G~97Dp8^6sx6Yoi z#n!*_jsJM&=}NAG5cHZIvU}xrVOf4aRtrRUBw6HGE-T37(Wbf^;7 zxm21ihGDVi^`8%+VZf?aG%@?OiG@8%$kqylo30h8A$q@qURD^7)9y#P0(R(e$X8m` zmjzTh%gP~)UrBhK89+RcEjNEjh8Yn0GePJl%|{OZUe8c%Tf#c%b;chclvpudAa*7= z_1NCQB4R3K2*MAaZH;M{0e9m-*iiZc{tr2$-p?%MhAxD+fEw_Xhg#~DnL>1^T9WOj z>Zmhp%MY`XilSF9SiZGNSuoXISTI7W)Fno%`?Q!7vrvCp!o>8>GNASzk*A^|VKF4l zDg8Y8DwA6AHoxAO5W#ApN(puK_cd8g6clyu$#BuWZWS zHCTAO?;0v)(s-O0QooHAP5_J_K9_Z>a_w`8c}MG~QW!^uVS0Y?FB--#a`!bn3Z7~nhJnaR}R z4$pALi0lJvbsl(}3!0WggYoo<_A~z6Bv6-Z)u%JR`r~%yOfonI_F`*Rv+J!aOb;rI zOJ4rYdkv8R3%UERLr*ICS>OlM0&_Il)Mq{^Y<=rSh;#Zbv6 z19KD!saX0oJm@EiH!@&{K=1;^QA@cAW}-x-$UqEq@{jxSHeVr429Pw!!TfBHPb-q* zU>O+7i+};y93Q$UCI%I$GnUPt(J~j%j{?8a^2EG21V(mDeEedQxBS{ojwJi9R0*7gMXo37{aBQ_ik^Nw5j-88Jj1!VzlTt_^vAQs*ufmcpz@+-AkS zAwkuS%XF;6{X%C_YV#VH)0a6`_$U|~lP+`m#4GZoe=5OqE3AU@a5ovF9f{|K!?zWX ziRmZ~DE)nowIp=_5^$kg1h(Vtg_XK&i=vqO0ywl?`pzAzkhkpfR2v}Im^v1HaS%QmPM9p8S=b>D-gb}WsO0K z=>K?Sn_)f;B?;SVj-B*uWvJF$FP-I%zSOFs@9zwNQ}2KYCBB7f73?V80 z;~IOm^=DJS;k%0RU+c$-4!wC~#3YK@ zD^M$C{%I81plwf=;K-+O4i`ECZk#DNwqRyg&QQ=S^DgmX?veg;Rnm{XJyjI9+y7bQ z;o+esnuwm9ocs&$7vqe83|AzakVtA{a{RT>*eQ!xc((a;3C4sisQ>||TwbUO#ve&| zct1zVXCdvc8qr>zuwG7y^RR{0Q2JtGQ_3Xd5^z};5|L5P0rt_Pb3v8Uf9(xYRdh&= z8AcWh$w&Zv?h44T!(;|iY5jf*|Mej~Q-v@E6#+gewa#Y6ny?>$_avnr)0fHoOV0$J zSNZ(c&-oucvJNJ{?QPR|6ttaKRFDqlQAXe_Fdhvfp`)X#?Pd&X)fJkPx1w4?s_mcq zI=%dzC_y3dS*bdf)eNKH)t}&WpPBQoW@IsV2%qu!zkx9wk<&JS@q9HS)l)2s1w z6$X&MwA7g!5bkT4s3!kfhiFt> z5Zu^5{zNs>lZwB>@`=tf0X-}Jox!#sU({nn=!)7_#~t*n`sQjs;zRHwoSixRd3~)t z?VOE&NxecraW=1oKs1~_E0lg!!@ZS}*S!FGbM!@26%5dW!o7~b0QAqRi)tm?A-C`DFvaCkdUux$#SDZ2x!l(Pw_O_g6lzO!C~P(u|_69 z(BPelOlXwO=cZO}VlvaSCDLrdT}?djX)qzO%4GC#-`w$JUA%jFJ~`g*v)k!!ryB!) zI=TU+W8P}PuRSMg+-V4&^=r5r8yjgK8n#h) z_l(})#abyX3Y)rn*Z7AY<oC-o9VAUBz4B4@7z zZ|CikM)tKgub#HSOQ@P1wG!PlaOF~tb10{+XGT23hY2>Uib@>N`1K{PetKp2U{Hwp z3RS*<^O<29?*6#@)g&Mt5n|`JfWE|84~|}L@i>3gKB@+yzIVzE5j$f?fydR7FI>$3$vbpe;l-XIX5~1rzL4iVNenohhK1e zI==_c_w3$)1)w*S2J|?E;lnAOAS9f8fMr$zb3vl{UeMLt1~_Ng+9ZUo6p)Zl_U%ip zNeShigLVTrs3Qnzt*c*J+dlkSmW<*od;loGKnrB%HB}7MWlsQs-{mIyKq7+a$qDx3 zh7`CBfljSZ=m|7ts$cuzjTx1IB&a*M@NvJ;TUg+UWrKN)+H6Vb=FBPSH`8AJq!@GB zTE9^;h7KYu4sUSR$QfNhpmZb=vPAa3SO7_APJuMA{F|Wfyss2L&RYT?q`k7xA@8c_ zrhKhzaU9GUC4&qzJpUj(v5bq*ZwzKpE$+a|qVVPs^1FWp0(O~-eR-?Q0)jxOsBi(6go%&M9v}c}LM>mC$K33bGq3rfLq16|N_pc&3TNV#d5Qk;MSw2ype1hm80E6DU_3Zti$* zI+{SU_xu)K*vK5ZT^%&5vM(W4KVyBLq0AzCTc{AYR)(IROpL`Q^+SIvOMO9BYbfFQ zLU1Ep`zqb>bq9J8E~hsB^ ziJI$Ql5;6WYsJMeXeYnQZOgo7Nu55mKk81TZB+0UmS|#Z&GRdh&isy}W1%3vnM}p@ zi*~l(9sHyHan#ceq=yJZ2rfDlrmkHNC)T9AE~GSC`EpevU^?>F-gzQlu1_Hiegp;H zv90Ug$ef2dPyXOz$-j;x&?&>{xP1Ud<}PlS7T$-sAkJq-qIi}tN6HJJ*0fWz9e(n9 zel`Q~yr_7(7%wfcea!{dm4y1Qf>}xt`sv=LAl1xjtJTA@X85{Ad9}Kyb4n3SC?Iq0 z=1pzG5ssUIm4w6UrW}eN5L>n_#DC4_@)lbLD3{qED4nzAEpZqlbGn zkdI-$??bvU6pzT)V9JBG#llVel^dfn$22Oi_ce29`C{ZGLRT`?+4*Qb58qP;Gsn86xi2Pt+0fO7JzjAYoYVqG~_Z3Fd_# z&iQ*nN9PY6%-3WMjvNxFTS&+YQDPj{>?{4qMP*{j51vG8y{{z=c_RGN-G1XqhEr*M zqC*-^H>5_D%;x4zPhDkKD1*TleVnTs&XVtNz6IlM=R!;SAa4^E)f7&vFZ6~CgFS}1 zQ-~^O5~NK!mG*h*a?V#QNN8{oqswk&qkl0V|DNuI=b(Xvhyy?Xsa)O8N8I0CAVRGQvbzgoQ zx7UPCk0bqodppb}^SLyrW%c=Z*29CS`%f|wPuuq##~#-NF4n?wX{QFz!o3~N;{5pMx=iC}fzhA+@e)=gLqARk>$*u1T|`P#pt`pO&OPzI9*Rk-rSkQqx_ml;}nQT?uz#MTs} z+(8uJSR1LBEIY`PC#&zNUZHrL?@cMFYs$8=G<1GnsfeXJ6|JQ>xiUI{f45flV=^rxD-5OSEX%IB z=YE(0Uq5Y$i;%F+dO<;|d|j$Wf3}dr;vKKbly!2V`(^%Gh8Cy!JpJbv5a;Nc+ImRV zH7eWTV)d*6SHpa*IeHn%d&6g3+pj!rVnkDL`;ha?FYM%9-{(pxKkzT_#n52Q^kEIg z=Yb@GM@`Tps8>EoYSekh5Zp9#XRtrSxy?Tt=mKi9g3^V0-q)W*WER5jw4CD8wi|I1r{@GU%g;feSZ?=C@?| z^>S@K-2IZNF&+Q%o9b;qZcUn(r~GVN!Moz6vI;MFosOFP=V?ev4?7A(@u9FAMUj0U zrr6FycFdjLjG!mc&`1wotfHD@H;BH06V{M`Z|GiskOM{~6D|(!IR5yl4P5fuVFv6j zui{c)RkiX&U6sS;x`aJ9V1`l7)(C|iK4EYE(A9`j8M!Zd$Pm1O^^Ae@vY)Rbvrn+@-oosm3A~7AsQj>>NgZH1%ZBw1oepm_ zl-XIeZRq#GoHmVoeq=X#asJ!m1>=N_wT>g5U&YE2OHhzagN-z;eKpNql6nEOS7a8{ zmP=dIq0RDQS60PKq*l(#0R25U;>>pL$ndwvjYrqno2Qv2vp=05kXxhE)X^?a?+H~( z*H2&cebQ2nNc-eOF$Jz6fLEyEAq|`*Vu`84JoKr9o;~A7@qV1w)cd_8|7=!R8avlq za^>t0*~m52&3b!@o2Oi;ZDFldU^F^Vys{Q2N+s{aXL1sR9zz zCectG`nJuaFFu|5ff~{08!x8NDziaK2Pd{EhxsDJmHKv35t|bJHk|?Zi z-h`5-cSL-Wd>+|d{b{7aRrz4Mi3SG`uiv>^k$W1$fVe<(zS^Xot(j#YJ8OH~IeIC+ ztcyn92nM;Z{f=)TD;Sobgl)8{Wz@M2doDEuj^!*$&~ZC+c$0QGP-DaHljc~bqZDKr z%zaG{Z5%!){-8bRwr|YXEj{%Ouolq3Y3;CEA{6vqv{yw@5VoAn5|tbn+@T^uX18Vh z^Yu$?+9rZ%D;qgan9vFEaY|~+Hl1lABc4*@{rwoNzF+h_$CodvV zN!wGKHP4c{3n>iSRBR1aa^8?FgdoXR2Zt7&K1H=Q=0aek3s6*6D9eTgO-@ zqP13j;a}4mnKH(&&~Vn_hS(Px{B=r9*ExLqY-*B@BRglWeDg&$*p!sF&?C!r(09)Z z-*QdyOnN}~T}(z#M!sFzDM7yyG@*Dy8Z&P@53xtd z*YCMlGi7z?RV>2p!erEx%j=yiBZ-=FLy0K7JbIjs&31|RlN~TRASnQC)y3MO<<9_j zih6;NWoMo(5){5m+%fJ%_AF_5oqC^(!|!XFBHvtR(Uj`#91+Ilv&u>qg(LKp4O>|= z1Imw5)}pQmTpI-$-0Cy^zryEq68PD9omNMKbBb;&$Z~zOYPMf>tN%RgwPNVFbUm1N znnIEwh_D**H-*md$u*Lf|22>->lMAFFNrT{MBn_JQLk;t6=8SVoo4H3OA(bVXErGZ zN_ZoBf6R5~52fV$N*WyEbV;Hd?3;jUdVj{;R$V|kX+T5G$Lh%5bQ~P zo>o{b)Y95tXRVsg0(jQ&N>BgY_h{8>@}O3f1~>lR?7(66XY>61pa(W+kq=k4I=6$)a-l& z9gOG-0aruh6CxEsrz-wLJvI6-w{o!_nL4cAe1_F@ty}8Oke+%z>MQwuf@{y>r9UG) zBUx|2Gc;NSC-V;tzgtJG&A0_}Rc51J%piX}Y>*fN3-P13_4@bgS+NGOZYz$|z2eEA zDX>}qxR7N6nVXyQrCCxg&@`z}OCA)xE0~1cU<+kW`DeIR*TX<1ZHCVg~dXA`oZ z$yaZg)@} zs}o*%n6k)UWnr#P{IAEX6nb=v3}JIHnsyiaN7qMMOjLM>KKiV>BVMY)EDx_OQ6BD~ zDOOD0ku0*n`;AD?FMSx6`u$4VZtaGse`k_{f`aXb32W;_gT;_*pYPd`zE;vg$FX)| zx`N5o;`+Tijft!6Yl6=LC_vHRg3;k&bMFnm5ZuhYjOEHBRPuJS4nqOZYz1if-Y~HHZx1;*<Z z@J07SA>r{VPT^!uLHoP$0*BzLQjr(P{k;W23Vl7ZQ!s(or`NWR%uyvYys7jDBq?O1 zfXgVGHhpkwRYgBxKTJ&2LNTo|iyk{_`oP*}KZP+>7>E#7 zuR9rr!Z%Jy1`qff3KZ{fMrXwcBhJ^u2zvUDZa5HEN1BCG)nEJa4t2!i(^jpp8y~v{ zEoBS*VxUIv$KdWKvM@hB{qAku>BXEbKmGw;0uDZvK`Y2T&MiQ$y!^-&ud)gqaf9?XmwToZrqfLYN$ zsCWFi9T&KlGNzcF<*rb%>ZW`rO|-mCXl!^$RHcI^3l=&~Yij{4LsG_l%Zu zU%b@gFw5sr-jUKX)`P>RHyc&!1Q2N^LP)%FvBky2Xx{TI1xz#KODlF_i?O2;@AOty zraG57s31z5vgAor1mU!DbDj;&7?42>>lxq!936om?9)(c5mhYft1_7xC<7Hd=ZFcz zw2ix}w+swJO-ZtoQj-OxS8H;x)XdyUA0&Yc?-N_b(_H$Xj*r(VJF5pTMCp_xIQUy+ zsyiw&3!r;zY zvc&+RHIHCb23)_md#5(ZX7BqK5znkk>|J75e0?ZHM5|Od+oA`06_{-KP>@FD$qe3p zjj#wpH-^I=R(L`JNAB@KMhh?69ak6f-O}`uvW*habPOF;LDV9O9U5hDrE;Q*Y;NYy!#Zv^U&#%ICTX=hRIfl+Xb0X*o6 zcc;p{Mg1S63}*7xaDAk@`)$~A0y$knmlVZdl=JKy2Ss&T&nE_X>W>&`Tcm<771RPk z0hroAOxn3WUmFo_+a#rBcfPAm$uz;APL@=pl;uyi%g9`};=adt6E3b9x|>>M8?U}A zQS1B2O%H)4V89VQYJrVZuL&-9(VfP%nJPrHl9%ZWo*Ej-eaFdZ zXz~kOE1~vHRV`B(-A}DrYTAT;LbD>MH~7mPx?aId;2@C-u87>G6bO&itM(WL`!hw8 zWMT`W>!J+E&n32bIa4MInvV*zY6iuB{`8SSyXr0ukIGvlFy*!OMUVG8 zY-zN(q-R@;7ww5O{$5|C*1>=jHbGBOcFn@^TCXKTjY8SFPMi?099eye*3z?_wGDt(?I3g1F!YZCiB6`I((_ofla*pi`>*&>HzZf1L8M!*SQh%W`>V$U(tDyg6a@&=0D{5gH8c8-%y{{KhWTSryh zb#0@7bms=?lm->)E-69jZt3n$X{5V5r8}iXIwd5eJEWxHES}r@eZS{BW1KP0zl_ab zvww51HRm<2s8)QF9(Hm0vLf{6Vo%=5S)|A0oIGnAxJ^GFTLl-~#>X9cn5K^6kz*c5 z;I|^)T(@ub9*hE;NP{&PPq%QUFIY-G;7Y*(i2X0R0DkNl?F;(1rUS9JZwV#tv3SKV z+^&rbd8i_iJ!pEgky#Y~Jn2BE8Kfj(5lXx~E`KtXZvC3g_M2#ZZgvr^1HB5$Xy|0f zb!mTAOHf&Aip&H~^9j}ie#1FtD4}^fUOs6=MwpV~IV5?}=+zV`)sBvPb1^kldgCfg zn{RV)q|BJC*a_z}`X}7t=EW;qCY>VdC?rKqS)YpNUgMIZk8dgZl)4DJdiKiS{)VvU z5^Aw|94c&X7|lYK`+|CnUT%TgdXbAgQjmTAhdGELgZ!tQjJqI{Uo6+)DK&RF90?PJ z!$+mzP4xBx$Re^^ODB zgZ*ntB(!rWm?UX+Ux3UKv!l?H%?4bD zI>T)_cHZ}ye6SN#%LuLvpdF;2tRZ_U#MGxkyg8TL{9l;ssSx9#bV5v4-^NeF21sqe zUjckElGNsx0DIc$jZ->6%Ha5I`MQT@H*%>^45E!;pk4AgW8K3&dcv)^eDUZtri%sK zbr)p%SIYD(o`;u~E!BS}nJ0jzs@VFU$@GkUA(w92 zSVpU3*<-g7;eEdY%#S{xX>1L`!on6SK|cdTiBekz(f#pR0v%UUZqGS2ONiw?mlqHJ z`MBt}*FeC)TZvVxH>5KtlSfJa8JyT~LS}6Q^u`(u=0*ob@I~rwv4X7scK7NqN4S>4 zukpUaq|GH0Y?iUvJRH~A_et~E-NA-8=F(Ge=x|fYe}D?y7?z9a3s=<3JaA;5j`FuR z%ImbGz{SKyHHyUE{D|>gBnMZls8TCCEvZ8O;76L{?V56n+aK&cEszG&n49o>h-@?A zdpJo_tfM9-)aF+FEFOc366F~fcR%>ST)VYu2|}(yOo!NJpTqL&k$&IafiG%Z{LWI2 z0vRp>JC`(;bipiFn?WOklPEZEF0UM>DijQiB1DK8-sfgfw@?08y5yT1`Wymdewe45 z$W$Fc5%eu;)Y_}(pJJlzlRDVk0lW9$|8hn;!;e?v^JTO#r-lP)1R5oV&(cBuT%~WgvU@_LVB!z%LLM1 z!DhC&ss?w-K;o+FdkH`DDu9<04R8!bj{4~70d-z+pOWQ$TA(2~4VAN)xh&P6slOiGuQ4sRA?DkmH_7p)!B4}M?8n=mD%0M zWh;um0xTM(7#Da{^86%G*Pigh_5<`FB{aly9lo*lg~JPjce{NY4f>EGZgAUDRf&+} z(JF{?VUzGWR;BSw#9WjQ@eTdCZ9%wx8cLpBWwrm_0A;@H#ciLDZ7tkugr3g!hO({C zfK9V~DGtZ-9%QvncgMr`@zCUgnsitXMr;^18Nd8y$FIT>3fpnDhT;y~3cZen^1uCO z{vxAYk?VpGN6S^`_1Sccymb-@n+Ux}FnjnZ zxVyF*hwE|8(^pGA%sT$lEu0Q4Ec_R?Kc(lkhz}*k)4u0ADU6Scs~zJM@NVJP@$wO< zobVjA#o+Xqd8g6wz}n(@jXnF!j3w0I3S*Km$POWA(lfGjrZtLTV?(35)aWT8+0BN4A(0vip_%DXVtS8n^c1shwfTVHMW5YBXZ5=;e)3Wb9F#mx7i0 zhcUX|QjfR49uKS$BeiU|M9AUh3FO?YSm6P+D}o@#HIvlqTt1b@C`^8uDAPjzxsBAi zH6(MoSSRDj#j@&k)LqvxR;J|M?`Vh_7T8fr77WF|nw)vD{qAsJTZ8S{b9|W8PLNh! zBDd7y9(z+|cq{4sxLWcwTu2UigQE`&7gZ{xe6BAK4P`cGf9(`avbq|H7yRD?azEnY zul!eCG$^kUNj~WSAF85AC{~GKwBOIU*#p`9%RwVE3Ebt&)F6f~rC{koGgJ?pI?pd> z%1ehY4-{qu1`5h#W-DN;Q4J`HQp`F_aI6Ba#d&m^*85spyANXH0GpI&D8lhi?igbw zrq&E*MwYjRw&IMDHkKt==BK3EOQXZWN)~a+29z&%%-lL&p7*5J*n>Tfd9CDb$aG}G z8duTBfM-Ietslsp&zwF?Z>Shskhl!De%m!zF+OL`3eS+De|GM?x(tucNz!uC3q(G= zl`(H{EbX36T1Zh!dmX%frwQYl6qhvBVv6v|d$FpN1ZL8C>|Z|6OB`FEzYvmi!XGgk zo2m9#+c@qpk;wF!lMg?(Q7hi;7fH7iKa+R8n2fKr#6lj(3a>fkr|MN}G_X-*La~iE z4eR4&5Hy$^j|xUQsLJ>6UstQb``(OcvB@fhhN7B3)Mzt4h{L>6hhrHbwaKGj7@3CMz0w=QHw?7A~(n z+>vzdxUKsK-i*yrAxsmBANr__TQyb5Up^-4m5#u)v@jJi&bFW#ndGRf+_2;NY#`FC zkUpP<8l?#T!{zbuApKRm&_raE@}CG3Q!>iV7lVVx>?Pd5dZSs|g0e!WyXvL`f-^5Jgh*!{G9ewQrRm@&reWBc$G9 z=EKu|o(tAd(3Xb>mN+AI!8L~WzMqVFQnpDG%*1-i>W=x(C`*XbzxDEv|1`Vrd^R`$ zH3T3$C&2k(P%n+2c*ezzmF9H6$i39=;c^oSCm*uR+Aao&f%VO9=S;faIPQ7)Xyztw zdu*?>e6Y1T#|b`t&*X2#ZZT^_T5??r(;Lc|4dI2;1d&E)7anJ_PK!3Dm}V3-d@@kG zienC_*?=n#$exycr}E1`H|bqA zC6V=Am{pwV4{^^qHN+BJ;a`5DGK=Qw@<}jd6b`LF4cf>Lf@A#fP}Xd^AJ|iOJ82gd z*532wx3pRmoRDAR`p%!2Ge_4Rj+T~Nx;`C~RS3$rJJ$||mGNHQu_3eN=uyCxGNGf) z^$lsj-fh~nF+dg*bmk4u8PR;$nqI*{%wULqfz!>1STDlGZ=n2j+cJ@tc1g48C7$(i zY)t~4u$?A{{P5_Zn61AuzLY`&mvWZwku9?Ik02O}>5s2w^~2Pw)7K)2b6w?9)Xuhl z?e>mnmc9(oz_gUgkMyneXRhr;vhE*A<*08pJoDmPjGmZ4FnAx}z18XJ4sbvEh*tGG z*cXuj7iXzd`}s=n#|~e&B0WOT4>s6AtbFU25BC6B$6D$5h33H?5x-&K=l@#-yYj}5Pha10Uu6$Yb4Q<- zhW>}}(PHy1K~d*m@#<$i6x2c0Vj)`f#Q>o_xO|>EJj{XinD|L5lhJg?l}_lvLDnX$ zN;_oU`$@;UtCQ&xLy2%%%lmCI^8qtm>)IWe;8r+I*OII#qV~15wP}{ZcbV@%%IH+9 zV$UZgNsAvX^?S;d_{2x*JHh4=FERbT11`cfYwio9HLQnN%ZZ`0cjb zq~D|MLDaeJai07Na`vc?U$4N#b>;}xBk2q(r5_KR1zS}m#KeltmRt>%psG@IJvn5} zqowHox#LBnzR+Wt*bS<9l48EERYQbfK^ns@?x)wUAJSxV?$>OvOfg|3_rUoFDU`0) z3-5ameGu&!aD3cxv&X1W^YK;RqCS596&LbwOvLGrFOt`Ls`=4;&1%IU@k*;gO&tyk z^6FZ1`(?U^!748B6j7s?Zvs$_&h z>#z94mfD2Rwpp`nXl1Fn25-)|KN~egZz+wEN@HveiC(CcC3FbE!l``8(P~_4coaoa zWpN1Y#TiUOh&ts`AWx*15H2U97W9S>Q*V!5bG9l9&}154JG5?f4L!)~dd^`WxAt>|sysG)9#)ETHiU0eGF6+hW{WX1vM$9X z0~NkBO>v^qF*ICryXemJR%hzoS)U^H5gkvTcRn5jA~qbv#9U`mLz%drU1BP1c!T&D z(h`5f20njv=O^NGBQ_}E#?0p>N&m;#9pGDuW2;31NW8^5hICc(7ms@{U- zj7{!Y0;KX*_)E2bXjJ)Tdn1h+*J^w7?sIquBZX5Qq)4AMmmQ_a*v=hyAN=L|kGl%) zAffj2NUrMdR*>@YE=?kmg!e6GiyuNcQIR@f;gRBcZYQAQSwnw(;SdtV-NpJGw#df~osKRQ_MYdL8xga;#T5;G+ z!2D1|ciEq*DCj;o)gz%zmcSx9D<2xDJA+*rML^&X)0Cqze?WKewx|jE=R?X55-Nq& zWXku0o&>}@Q;?D^wdM%n>%%b$XA%n3ToTpa43F{o0A*p_#5AoQk}td_cIvaP-V{gm zk}+XKJK7%JsNi1p{Zxu(QbHAj{2m+UNZ z25MHgKU1^^wU3VZh(WnO6Vu81dAv7JTi9)9U$GS>yc`-E6Fed88qm*yz?tM^dzdQ< zT@d2B>|pj;KZIk?jmU~maueQMau8NiP0&NmX3KQS6?$kOu^pq>wkiO#;s%kiimlf{ z8OfPjb(eo&GR()D;pH1F)qi%6TJZdC3y~ua+0cr;t#RuKK*CYtb`hL)S0r@d8(V9J z=x5aEjGT{W1z$gSKDBB#0FR+)kB#5`?tY1BOi4pkK^6eUB%D~Y_gI}a@-*JGfpTUc z49caL%M`AZU|9bbHA;LM*8faP_Wk#;p6>g_zdUN*Y=#NPdZ=Fh~AL<9GSJ5t-mGgW)+V~g@zW!+JbX<7L1->>#-3dah^{Y zyg&X{?%63-k%*Wm9<04BM(Up)jMDU0T}#6}#Ui-^o%Eac65$FBWh1^yEp z3Zxh}q8MRsy`nRGPvdgY5K(^If!Nx?Hbqo408;#B#Q_a?i@f#*H^y|G6po9ss8taM z85^OZotM)`;Oq{Nw*hRLV$+FSh9!D2nJmv6dJh*d zI!U36;50okP)epFGkBGMZXYf*oY>Hy)ZSs!xzsBt<;z+PLa-`e<%13e2&z?4hORMP z1C5XhL~_zI`Cp{UEw}ZSoO3Z}{&a{f?6=1=ls5BH<5r=2ldgeZDVN{?$#v+Lnucl>{*>eT z_!IqF-5JV#=>)eT*59Yl6F6i#M#JTRB@SVgd&0`sPidWC)A20ZhhZ{-tVZYXpg^Y` zHA!F7Be)4?cMubVwUgiXj(y?L*%n7m96(?toO*873ratd z1pWP(z-<}D&zk-`;&AE0YPu(#nhT!acl{u=A_m+5nMsqLAbD>&b;MP)?j_cSYFR|x z)T(jB3Y`WR%33g!mT1*G@&pre+m9n1U6^K!E`x0t=%vTm#`r{KNZwU$S$9DQI$xm; zPxu-!l4IV+5YY&1B`vokHPwGgEx$<50JRfYhJe6=7)MD(6|r`NZP~m}Xji0%f^ZE~ zI}8w;+k38{NePdOBbfk{NZZxcTMCCxwI^UhjWfVr)Hh2K4l<^j3w z7^aLxq{s&SrLd5RjdESTFo6%j{`SV3X`+jdRaHTcE*#{`NNA`zmVRB1{4c_+``(@z z|0e66R30)|(1N-og7$`1Vt#MuPF@3#Hxv^E<36b1d= zPvbS`iIRL;6uC^#HM_7{uUq44-jtU(k{?DjaK1$pkrm1sc_Z~sG7OTgygx+QDC(y= zm49Fo4&o)8scU+3mChKLrO~;~lS>YV89n)5oe!xHkw>ogT%U7ZQh722erUo&(Z}( ztj&o(A)ry#?eDsl+vuip+2y7N;Mma~nHr$;nKW3=$6D8FR-=PMcx~?N#DR^6pQ7-0 zHAvZ(JC;Mkut#{)6t;^_mV8a!8YH_WN4jNuk1S;p;35qbCVTi)MBQZEbMp}V6xW>4oneuT zYF(eh@sp)hoz3I+OH!}fB^O*gJfmuKol$`> zYKZ(Z(clG8{$r&~y+7Yr9_mr+-8}NWS}Ry?k5GcR-vR~=En>`3iL%TH!vL%GSe9Vr zHy3-1tF=X(W#S`DOMMU52_OW>no^UKD84jV#+dxD26v~J!9zbwpJ&q1938$MJ`aq> zFQvZ@N67M2{Q|v!!XxJ|>U<>e9#}#;%;F)CZRRN7h^p$Kk*qtvxe^tKf>gp_2}j&X zY6y`eL$b@}9>?^@jhdmyTGjagqGy%ln}WK!-brXXpMXTaq`l`+q^CTKb`ecKuX6Sc zNRPIH3bwDfR>h2&t3K_k*nF*+*w^iDhefwD&oeK?%?2V%%KV9hzx$IhY+JCXy)9T@ zTm^w6%e0QYo$c>n_DxPX%W~7}VQPb_eg~1nl9x&u38mt7TFcs<*oC6M|m4Oc4s7RVrf6#ZfI$dTp-V#U>(HIw;Ml(tegf9R34$k1VS;zG2Do-R3~ zp{at4W$_s<-3Q+%^91*u)nIy#$om{Eu1F=)ugB%z7J;9Guwv1>O*zE%xb*s~RK12V ze3tL@m_76;S?|3bV%uLgrGwG#bSN_en?)x-fGAx-K3D+1x|(SjIlGgv-qa_>-toA{ z$_eRaEu6J@;cSd(>h&7mQ`1bR8_b*A*#!@6vi*u_d1Cj+D~v2=#IyQhge*3$`5=3Z zcO*ao%$c5?R=r-yEz8lXA<62~y{G;SG^W#iX_HNyM%xD?Qf5>rcC^7pi_ZsCQvawu zyvwc~2i&^p%OvByNQ%s7UF!W@-VNWHg~U!gLR{vBiC}p5)%r4g&6AJL%9DobFePPR zz_6C{I^9{hKbk^xy1uk%%AC%>ypED_0Tg{FE!dq7(aOasDf}~>|2@zUkeV3g{EK@I zirG_%HdxZ&NmM`&cOvuK%ZRhQvU={s07~+uLXoJ@>z}i5EJ>)ky4Md8X zIJp%lXV&2(4i*s;Nc|iffC5n&zikd16_)e0N@nbo(LU#5N3zrldTwADMuQ z(NKI2=)xoo%i%Y+C>BRFsucYrv$!J6zy)@mkNUSm5QQa%SXS?>?IjGI&;Q0cXAH0Z zoz7nL)$Wv6V`EMFtk^D)md81a|SHCzqiZ}e8W zt}RqXq2huHM$+vw;l*o;tA|8fM_nq78e8akudiv<)z8yg%13~R?cX|^>j5D(Im8wh z%Rq+wj-N~1>-pEDZ)|gy2TJTV%Y5x>PL?7Fv<^($+jCDD0Lg(Tx9U}Oc2h5IViaj} z+0ZjtDG<}18b~b-(7S@(ARU#+mPd?ljPf^XIPRtF{5)Z#@68hQ9_p(!Cv%Vb*l-_P z{^^!&Qjr!(Se~1wt1gCiNdsy`HEzmrj{=)<@+CI*ub zoQyv68&x&zf7t$(tnve^OGP6l;Sg*QR&ZcJ2aQuC#Xt|{zyF!~RzAUM;aO@o*>;H_ zz6K%CyH*eXuC-Irpa|_9OI4zMSL%>Bg`@ze5p9PkRJRD+yw-iANzE{ex?+E`z(gW8 zj9-P~I{te9koh)>xL`4sJa$l01m?_PP{ivo87yZ#XIH&( zL9;~3#g+Wl`?|m$i?xdc=osPL)~@VO?21~o{3sl6$y&du^V%(xYJvi&B5QK-} z2H&^eNKZFv=oEFr|7tm(ZdBo?8}+vWtHn&&+sg6nIc*fP%D)^KatEB3MbF@n@+aQe zNPHdkdb_a`=zEK#)$X3q-94vIOTY5c?Y@P+FGYvE$B`yFRuAR!>_Mw%M3ZA`KmFTt zlGo8SFD+u)l=kK!xEfq!eWKGFS=0?D;}g9#zO*)ya^^a93`?p_#DVaEkBL{89d_ca zo+@{V2(O)o317|>bOy=NuP$-}%msjhBso}`jZ@?0yr=>Q7{nj^NezQObIC%~9=-X~qu-mNO8ASSfwAD}(d$1wdfOdW?rFys=p5L&{$~}fa_G(Ws5fnMp_a`SMW~!$}qrlUm@f-I$sj9%dChtQA&>cmo zR1p~<7PX&_5sJl-q$+&%7*y~?MKR~2o)OvW=5lrtiAQ4;!w{dzoouF}d%=>(k;N}& zF?NuHGs{||Mkl40uz~nYHyKLMhvv;xenYejZr9J^n&~rGLu#L4 zUx^4pDC>O6_{D22FcNH!bxe!J`XoBA~c;!f4 zB*`S73yTN1%Cs;nx|(Y7E_>%@3E0)7ycWVC%oMO~F`aB<0y2O@E3eF`Rz(hcDi}t- z(EFFakznEljaX+I61ecw#v-TxqVaz({3N6%(JJK*Z!e7w@AmEwPl#BDbp|U{Ov_)P zI}sv?NT__UqU$Y*kjv!T4Jsde@$`6KJU#WoTKx`|0i*^c1~CZx{nb>|`G5qOB2;TJ z`L^D}Tjdhh+n@~u?Z_{s#J9?=7Dx)@K~*v{UT{MW$i3#cgv27ZELpkAv@TN}s_*3; zEm2kb-*a2+=D1O{l#bi=y{HmZogtns`(T93=a?ek_9)8ZwS_Bu6-UQOS*p|=hK-NU zsG_7mWgd;nnpqj@WHCGG3;k>doA)T7O6`lHnD?GeS+u?3I<}|PODo7%ZW6WNF*ePH z7@yEsT(ts*zFH_c>suA+m7K8rLuZ|@VGmrHu8$vp)5p(xhoY(0xWE1&_z6{u)l3^iSJf2QxbuQzAm3}0RleR{ijcM|9y||ajmAefmDvnFQmB{OO(8%fFahxYLEUi<`BQTVuK^f=@wU6hB!w5rCjUr z#;Kyos~AH%E?*+YI9Op}KjHJm#|MeZwj1Q7&``W2W;k{~mYTR9D_zG9doAJzO^FG6 zTZ6*SWbld>htVsHywz)7iug#c)WwY==(;iWqUcp8`W)HHdATO9%})f|E@z|nHcQ#d zSqS*Nx_3B<{VA^Pe5>AVw($2x5JLP+%pJQ-!Zi+McXwsSu%_p(YDhy1Xb79sFX>re z1BAX&lKYo`b`sb${il5YIv2DB`|`qS0$K)dz15TZ6Y$GZoCP|4v*-VwHsX4~!EJiC zr0Daf%-2T9{2;{hTiw%EB>L4;Bg{FP$KM56tT!+`9$#6_8ZWac`tWD`0C!9y#o&!UE~yOq1O$!;2-lali3%70O9B2Cw9XKgby0OslDB)WV_w%KC~!Xl3FQj&cm){#2`w*NsTHi}-t4SL(X+5bBG+*3x5xJFW*(^THuyln;f45SAoXSO zO2Brh#9oa6GbV#Cty}vrlFb8Vm=xn-f-admqgE>D@YG>-?+lo6EBW?0d3wx#Vn*@* zA&`A|@c75u02~eAB2H$vfZQKnZ=)dsHFq{RiioDnUQvP)&t_Nv7ka13(}!dtm!PEd zUnSm;2ud8Uk9Fc~YeWV#BMK6~Qm6D*H$(sRl9Pi0YGp#%^fyu@e1x|#=+$~%{wX*? z#7-^PO~5KuIwqFi!+9`;t!QE2{*$%`xyE2BJ7ZvAVDrJ~Gu0NL-5v*CAG<&r9e}F` zlK=Ag+)kU?kFKwaCl%mlnp#jhO*I*6{N_*o$v&eb=z~cZ}LC zZ&rzA=3eN%uYz*{R%}b}mvndJw&zyqe3#;Cl32txTLguK=WDAogZkt{dFU62oO`sI z*f+n&CLFOUB$#ir$_7_tC{}3nTWgVrRMstEm+HSS4KzBDT<@om-eM9e5C4%Z?G|2K z=3%?7;bhK9((Ihsh%dt#nOWc!2N};mndQDWG}xog|KOfUQw>gCx~ z8s~&>*C(^3RjT+;QxXChf*9>;T>fjwxcN{IWfKWQxIR}eX%<6`->I0um!LmOCWBSG zYi?&G|L)I=pH&%P3NhFBvV`%e8)q~t05Q9KRxkQ!Mvm_%W!^aMjOQ1;{%8L78-Az9 zTy$s!mca1-y584;;PINgE9whDY?$;fwNwO8G>Zb*S!Qu7|MgAzw-+a)!i-_9G&dEi z2d#*>uGfWfX(SZ7rtMFW0Ncu4syl4KH*el3FT^JNy-OOAl*&~i(9e#cazTPfonb%v zF9GtB_A$)4uU@=fCw=&JPWviOXq5a#k$MnPF)^_ZuC7h1gi6&0;y^T?$`ZTw`%Sn; z)jcqRoB-OW9lj#8DXh*&HsBkeXqNLT(ihYG;qICqxtT?)Df_4kxQ>YuG)4kmEkM6B zOhIxjteup7wcYw#cks6&D5LmJ5zz?Wd{2Hj8x!0Gfr zS)26%0i0Y5Bn7=kV)2?dxG~HMR4V@03xKt=6`V zPJQ3LjrR$@S2>M%xJyMfP46a z0u`tjLa=O10kPc8#hmu~{>$$#DUTd>rc(Dkb8~HRS-uthq4iFk+Izj#CRW{jSUd{u@R24Msl9Fxk)h+>^ zvfoOl3gu|tVE*;s5!#}J!jfT!$nCfSLRLbj`1_#`i1~2Ph_JVSG%MM^`wnCQ@YeyS zFCJHdPJx(-0nU=P)!79+>gi z3c76$;_;igBnQHg(8Dbw^vELII=%RFxF7)_KPTe^RNWbkDmeW}K@>B&EFM|bw($t< zhKGWc6{dK0N>1gSGdj57YF9?ckqT4i$(gDMX`}F(l?W4L*jk7EG%=sSEqvl+AK!GU zSrmXrP6Co@L`x9RA0XN4E7SjKhEAxqRCY@rUvS2j*TJioEY{Z{IByg94S^>YdomjAzB*a< z-cfkcOM#c#viTt~!S60KR#qz`nm#$M7;3x?@NGpRFV_X!Ltx0HC};B%s|x}v*%UNe zuDN~wr&`3`zg#}=EtW!vNavbqXWx_W)!@j`3{L~BCZ^sKXLa!T@C?t)neBUo)wp@) z9~$X4?U8I#it2M1F{$kY{kf>MGRf`s4O`)Q`_>FI{>)l7zspm3FJ0Wze$^rvA*tjR zbYo2C7(~tFsX5Ogqan-ZmZnuVDw~UNX>&uQBGvBRL0vL9tk6S`A+J)*tCuPJ*TBL~ zjLJytPLIeOcqf>)1)N4odXje{e|)7LaYs`kdy*Q@#>HqQ;1R9e@@FDNGrfk@jB!qv ziHtRolR+tl@T{W@>EX>;(epQ-mlnvCWEKr!*v)=^4gxj?Tl8;LE+m#-Tdq8hOtGG; z6856iHhg6)?);s&OXP=t@TKB(Dc*)lnj!%ZqZkNx4vZQ@Zw}U~eWC6n;}ChZU8$uxurj$9Ap9oM+YIq z@VZ#@^qN^JNH44pK77>v=Qn-}z}Tv4jndCzN(#FGtD!-_O}bQ8GLNS~6e{}xOm&hap@q5YJz%eYsj1^DVlgTl`M@yE%#jn6+)cDo= z_rNA{B_1wj77VzKSnL6s_=}Cv9M~1wCSx@Yk@R1$w}|#8@`7LWXZV+6F@?QC;f=`n zji}Xz3}G^jA;i9n8{<3sjO~`dqOIXoL{35@=C1ek;{dh>@I$x1#O_K=FZ>YCQ>c_MPxI6Q@}`P(O`)i%^x6r;U03Dz$60a??8u8Q7b=77dC~&Ls>TAp)A7i z2!*WoN|~vM;SGWqFV?)h;smkVj=?k_E_prlB`IZ0-7K%}k89W(f6;kvqytkMW{@P9|NU-jzw*gS z>KxZcqD`X$cIjuewl-Vuwh|nG$W5;C>EHS}9aF7M$5s=~$n&{0G~%f-Mh=N4rbY~j zq`L$c$rdfmn49Y?h!2@A&7YaKfex@Pl0@l$riiv7xw0qUAM)QGBz>cikz7qJB66^r z72|PE0I&G|685MHkBzkEe_sD@8QPLTw=LQR155Yen6GaUw3G=Qs7n8BWzk`H=c}s) zIDeZr_5mZm(rNRQ^_@*Rep#pt-u)k6OhWoD9)Jyzq-2~zg%&se5J81{?KjGM2jC+e zQncc46#4tNt-q)eSV|4o{@|+c3aJ>@m#KoIP&0C_XtsHv`V(tiuTpTwv&|aG*$|N6=LIOzp+T#X>LezRq_8Z0mE$z9 zCK@8IkUrOL@n}t6-yWlZX>vgF*;0plYt)Tg{Y8ZtdCl#M+;JfZe$?bh@(wjL=0_pP z1cLVzOrxcW*{JnQ8WE?#Te)8*8qL<{@9Q3h1$YK>%k#hzr$mrLUT;Q^X3l^7jNLip zV30oXwV_5Y4z1ky{=wDdn4o5fZAJRI@bzmYS`QV-q1~Wp@rs&R!6aGGW?`rMrM%vz zIc}p1XJ47R6w>TG91s!pmMl!XxtM<5@*Mwtz5Ql3ynb^rW@}5It-2Ox!|Yn^_wK4A zqK3)zX9z!3V!SV)P~QAq@CqUFja`__eA)!Bp6 zvq>4&=Tn!<9+iOv=+?Tx9F8N=aD$;p)&n?VMY!2=bUG^_bHxc)88d#1B#{9wh_4}d z^a=ry3wB4ZkOw4dV3`2z$X!}8B=1D?LZ4Xmu=D|WnX`Q7IQPfcZ8`GTs z4w8WKKrmVBi#|nS8#Wh7x`gjKzPaPKF?UUh6Y6z}PvsVwySjj0U`-aO__6eyUv zgfFTSMBqJsKi7dMdnq(f8(|=?oDJoc5;*@rMk@4WV5e(RcaRGtkaS7B6SiBJ_loYw zQWB~P3?E?Nu$S(6xJ92Jfmj-$ofnVF5>nYv=L<5G^Nn%6QG>A?&vbb zE-#;RMrhWlS-tXwb5EM9pVGj!sOL@j2PpS@Cj`|od-E0dG9K_eB+v37T`H+mi6l=b z5Xut@gkmDK_kVibP^?(MF4D|(+o_f+g+^y0`swWX)J_QlV^iR958w`R2dt3D$QMlw z@l5Kk9Y|bX@M|D4l-d*0=d+3CZ)n9!y&BMO4Tbuu3k)iikonrB@&|kPB|m(K&UBg` zf8M16MtP()T9T&9`BoQJuznL6Yq8iV*88GVq5!5!3d4Kn!=LmN$*+38Aud+vxURw( zN%slcE(7#xXBbzUy#%`;&S$M7R;4wA_o!e12PsORpSM(m@b z7_4;Sb&HfquZpXaCj={EXXf-^idE|&pVB)B1wV62Ogy8OO$}dUKk7Fq-(lq3*~lGn zG#l!`^>ekJA>}J1f-NoNZWBiSLkAO&Hw=#v#<{~l^y^$lyP;~C zZU-HrG!86miF6X7BsnxT;_gKjTWjrCrnIjhj=T-neYUaL=%#QxMAj;3lk02OX1W-E z^sA~Dbv7~Xik;NN`jdKf^Sybb$LO6SH51o8wMm)cPAQH)U$~Q85B!7x_CLQTL?YT57r-nXtGFc6uWb13yQWQh0shD|cujE+Vt#)9 z_v9}X3MBc!bT)A|+gee}Hh@v0eNtz?8-+Fgy}(0LQ@*hmzwnCg<4sbVwfs!VE5jfy zx6Oo$je}vcX%1M^n0}9Nc4>v;$=yNeIUd^;-`?I{T>06Svr*nnU~xFD-kgybSOs)V zr|Xs&Lk8Cplh{%kJV2?d-K!v9=^`;l855RRKoheQ7aJRpXvkxlksKYJjlU%K#lH%8 zelz5>B(eK{`m_m*X7Oi)O-+lP;!;?j!K79dRJ?y#6pQ|1AYxXRRY~^jleoU?FZ9XX ztuvt}IANsg7_EX(<)a$fd8CT4NfssrxiCwN{T{wKRO`6j&s3RITsfHY1O3!TJ{?l0 zgxCnegr~Jq=ilRKw(7oC4do%@JQfYAQhe9A9*jKstio?36pkL7kVYl*$0qRyf{V1Y zN~$ztpbmN5W>3q6jC)XHOiqmU#{MqZK+>@f69okYX4oM9PX_+SZWL+l%C0%eT!FZm z$~XivPf5t}B2unqHs5q%K|0B@+UuUQ@L%+zeU}@;FuGy`>UBb=rhbV2_;dDuhI%4O zA)Kb&DjbOV$H%||M6fiKnwk<)9&^dYA_GH2{eP_C70gJ>c zRL%!{Oi)!VA7lzY|EK8wx0amHpx z=iY2+YHbNS;%8`zI{+2ABnCq~Kr3gCG&e5| z2n^g6XMaCwB_)p+z-%DN2*^{aq%Nk|W0J5WKnYScDjSam&8R;FKRL3;Zn0TNWP{1@ zBPRQY`MI8%(VLJ zHAxF?OJ&2K7^X5GnG-~ZIOy@pMK%bRJL2lvPnAwi&g|wG-02ILNNX+P2)HY)1kFfs zUs%LB4@?G()Cf|E>p3IZr{F(8I+3y5VBf^*PiWI{yb;di97#m`<;94T=_-OQlv7sTk;S)A6zoXE^X?P@4J+$AL?PN$ z$lm)-=aj>$PLq6%M?oG{{flJ68fNS3*PAC+yqlH7?~uCr!)LL3f-DM6B&*)R3YXCy z395fsP=JKbM+=HZFujwEm)T}EP{1Qb?1dJ7@$bpBO4;c$L!f57zv6KLfT44P1X(ow zFN4|a&xyb(O6|+ZVm%DH*0PT=7ekE@}4+a8=zhTDi!T3yQTyc`9;bN=alx1U^JS=_1n5M-I{b*Nh<=j`*C76%2voDln|>(dZW z7aDz+&L_^4SE>@Cn~fT^%koLX5mtCVgz57y@&)~oWRxGQwth+*+oH`#+dt~1WOgyc ztMa&aYhK&65)0iJdc=KPNE4KnlTLNLbrlsGl&R=gg>T+o_8QKYdL;$>~hK9Wa^^9oR#!ljn;jLo0fBX05uHJ}j-WjU0Pz z2*0_YnV7a){jFK2nWxuG1o_-9LMR1aq3G2(D8%1zd#9=8(}pb0(tfVs_Sk+o-F9sV zsz!+f#?H=evP_)~$^S-M_N^7Ygsg#Hq!%BIW#eewTJUmdubQO(pLXh?X_b4exn~w!VDrXlE8MO7{}xxd?H(9lNpCSypyr2Dvi&r zhM^aSK->qvERfLMl-`RWjoPotDAyHsP;_q1YbEXRK{W=p!dI37>DeX{s5gZ2R9Tt8 zEbFCKl*4HPB}&SH?zzMtmhIEqc~cJo(lRqw0O#IhP-{qp7|~dsWEg=!lF|OxpZMp1Er0mIy7V03D}w+gVAmi?=z>CRBCjopfY)a4 z;Bb+?fMVw$3c1Nw52)WMcd9v>f;FJjX( z;6)NL@RZ-)MBc(^%-qa-(%6{9mU&%z4DiJw!#v;7BuA^~^U3Z_pMQ_+P?DkywaFBN zBSN)VHq%ano6oHAxJ-f5;QK$?_(P+OK^>i=PJ?kO8pgOVSenVe=kOcn!=!Fv^?_{ zNpey8{E<{TmQ|%Pp>cgp`JTHT+V7SAQKaE7oCWC?Q9DMQi}hzieS(pNgLr57QqrkQ zf5Kp6NfsKDq=lRyeZ$j)uq@E?qtbN^kk8NBj-XQJ#jY{4b5D-ZohD{;Q1?nqR;*mN zS3U3!LwtIDSsM=HafwY0l~tT&ZF)XOhUKB7VH4+zWnl#Lk!J5Y1zre+J0zN1* z28M6K0A{ppvMwdj?ku-q^vi~GZ9}1njAt7wz%s*Y;NLi=arX6TB$lbx* z(bO5r?DDOOAPnr1i6INstzHl>6_=m}=BjjjZ-`AuVsu!W8A#2~h}Dh`Up(NEtYbWv zjBbj{q*@Tnpp~*{4CO4tkh($Ios;HSv~9RzM^+kC7Z&igR|rR+WaLx%L(B_XUuI?h za-Tpt=MY19S7hFb9Jd}NG~QW1#-5H*xq(zF`aIpTAXl76Lr4GX)ux9`_jb6^ZS0RV zq8(Pa51$BmER)+#2fqx?BwbINOsY`)mgP-kVEuX?>v`UVfIZU`s%1aWcl!N@;l`X# zN34Ij=0Pvx>r&r9O8skJF?`rbrs+y#eLFSkWOM?EK^o_2jnh7hj-POBqZ1o$%O4qY zolH;SEV?XeV&7OoxYp=QKl;kTuOH^zv$ZYE@NwzBC`Jv`w*DEkkM4}aAW<2(GC^Yc zI3h$&OYCG^h?MEzR_x^G%NA_emtCY9m3 zn!9r%WWs+{;<^p(E~C|`>Z6Ekeey+5>4E)F1`Qv?)88t=A&5uFa(Syafce8G%)$yF)?IMMPBrG&dA)0|5AR_4~Kw?Sz#pIDdK8 zHjSX!x2w#p4HV^*CRkLGFlusICPGES^&mJWpwDI?rFCf;1%KbqRQV)(C%W25ek9J(8%yQRCNOS+pwbLa+XP^1-*mTr)AZr^#IHUD{LzW9~3 zT<5y?-oFGbBj@9-Azn!~v0L>`tvAa7yo}~G8}hW=v>%4%(+<`XO!C&h2SslcRSG5{ zZtFKvHRm9~I6gU({8?_=^3}vH`Y!a}1!1^KTLxe5Bff**_*NhaQfWI9$xCd)Nxc%l z2CfPL)86z~&PD`5=3+79lA4SCCI%CG(+|#i>Ek7c=*((36|n2OZ#$dZ-VBr)9U`W6PIhAfZ4&z4e?OyG@X^d0%pJ6eKzh3G4%In8c~VHPFj^uZGOV+0QK zy4R&*7gxjuPNKt$tz87iajD&&_NA{tI7sz5((R*x?PtOMJ>p^u-js{BDQMYDB4mj=3zlY6mK%HCSl(wuR;zDHUzAUCdAn$kH#B zfm3b-4}(%jbFt2#0!^CkdMApCrP0(R;JMWwNtVMNXbSn-p^H06k#q3PZ}zuBFnzqnn{1}`u?66)=iN9pTA6rVC=;;SHCjrdgGf1 z`YIL8$p6nJ+#~s`RmUV5nc7Fflj8-jHSWULSy7_}-S@@>_j9+E+$NYS#&Qb+-8hyO zvVgTuMkCg!kFV@hm{uJ=7|cy zV|Bm+QwD&8WgoQ2Q4R9@OXl%8E#S8lC%bUwkDNXwobER8?V>m(?9^4C@3bC{Z&1#* zH7)sRnQ5=xH{tsYS5-_1$wy%&iU&M+bXB@2-QEd3m>(en3 z+?S0}o#GimHFJ6F~2p%jv`tlkOnP8bD@0}b>t~0Ehjiq%T>7M<4zE=jrGE64Qxo;&G>x@`w`+r4#CUUc{u>p@h z_V6E(+36Y67MaI6RwxAA`)x}s3n8_z>x6_wTiD~XiiJf3{=xOTy(u`tBNJ_K@BDeA_A28t96c^n*m0mXuNHO<|4Ts|ZMbDRj>yGCw`` zGnTi;y|WStO$HiQ-C~X-V#hQ+ZrwmNGjYQpeTW#g0e4Mol)V{?bm*q5d^}lMf}qVW z316U)H$3laefMQ-cUXc0-b$_OVKlB3L+V!O!9P7rR@k>E(8pwwVN+{PRGoFK5&o1X zg;-V&v4`LEzT|wEfWO?e`ssHI)Sy)z#&;afQb*qh zZ?6``lUQtqBH~d|)tL!70g*0lzN9ybbShF(p@)XsH{(I86T|5ZvJ0u1#)0?k-R;Fe zeSwOEBPUDZt~0KRM7LMLc7d_QCFw|So>p-=R@D$XH|~Q z-*iVTyl0Bb55WKLF5q|ZD&Ou&pB-po3K#TdF)J5BHPEDYKN<5B-N1|0KT!6+y`r=O zhPUixcJRK~hN{vs?$?ay?nOSh=A-&PZFP+Vsp+xztA;{K`nd}_m*1Pp98(npTdh<9 z(W_!;z%v8KP100?0V_F{Gy`h2L9F}hbQa}779x`dCp0w4l)<3D^+QehlT$|IQ0GrjN5rbT@$YcZ3 z>5zt-@|I6A8M#Oj%UjR;89B}=Mvyvt0uq|-!a7fULRgb2b<7!s!6Vid<#$Ci{9Eu# zU7q@wx0feZAsM7C!uQ^MsHzqMn130Q?jLuA zyF^Zj%f^GOsuK=h^ekn9<_;pIHf;rCl;I9M$97TbzLo#c!z%ImM;;kjS zT!{2EmenJ{_%)xrBwJe(Om ziOo3I%W+0lD~_INp`PQ*Ny70joii+=L1dbq3Rqb>v}wnmm7O?iv<()KfTh@_L;uO zFAFREz@kG)tl86vHp>S6TKrwjHLjYwPLe#I;eCdHPC@KGRSaYV@kH{TO;trjj3b6M zBxbg^vXTi52D_HCqti}hwWnnrf*cx|%*@PE(ENBPj|Es`Y@pwL-6p)rjvf_kZ+6Em zmLj?pmRVjML_BASvl)TzHpC>KE{{Rw%QY(Lr`FiXsZu}2`hTm;i7*k!oWtMK+jdRG zzjhTCm2Dlew<=AU$%Ni~Raf7sl@o)*Lt-77>UI#!NY&yVM?ZNQ^`cDbtN05NWF8%! z++#O3J(R&ZkM|9to4 zAm(N+gAAaTdI`bjtpaAL$4bg+hB)8wG98lg3ZCd-uf#nQe}C;Q>Bcgc2D}4`d})Q% zHT28sJ9gO&84*pSM7M3KxirWU(P*J=XE$oNkmcBv+RBWrrHTR+Hq@)d`t;B+@U2^; zNo2JiWHqhO^x|Mm=SeO%60HGz+g-pwO%$Dyvu$cb3k|EZ5@j|Lx25r$7W2_vp?+gQ z6TLvCR^c4+7~mk8ue8wsu2)x#+|To?b6=U77yUZ%5W;}28q!59anj>0JNt$ z_xP&`Moo6-Tb2iWUAQEdvand?ioC#13~70e^g^!?99jD}t6+7Y_n<+xEZ#Q(%NR?j z1M&<`ChL&Iuz1Y%Ni^rBs?dYyhA<%N^|TU)9L&9NGTDj(#KJnSOK##xIX zkb;9;>?E|wpW|^}_|?tfV6N;?#ONqf@#9m^ZvptGEuiPMl4w$D`EsXKe`SLb{iN#1 zXj`qIyjy!Fat(UZdj%RR>z2;~Fgs#+O4FX2f+&#>?<%_*@S|o4mVQ0&0`#|M$|&^5 zk5+p||I>D)f+bCt79=fXzfIC@vKC#?04wvj4-S!l)Eq+}ZigiA^Dl?jY_e4jzN%tGp` zhgDV*q*)sqmV`jTVtXILvrw((&g5~=+(f+4@bla=)-tsqkFl#yj}83(g&?P|UcCd& zhU(4QXddV0i2+#ugOGwQ4NB3|>6pGOx3uIR4yaatyNRZ$1?jh@E*^B0bY5idi2}&t z#Mrc)&}05%<`YAgSY8E+fxg+1CzHd-ymthuaMEQfk`qY6rdgG`P3%Q*^ zQ>>n}d_pq2{*H0{$n_#2;BS_T-`Q6j(xu|8T)`u2ihRGA+`v`aLs1j<&*GkVaH{w) z0n@Nq3u=Gj%dXW2Wg{{Pf0gfniD+G15U)L9IjiXG^j6i`sVU7fwsHzMseS)A zry5*}8B@OKI$3!R$5)Fv`oGuW*AdI(p90&_@ODTyv4n|zRGlC{$MINSYvxhs@l?2e8acLUOb6I@B$O6Iy&h-XOk?U(> ziDOpkD9gGFF56P`opc0udyi@IdF?Z@-8$L}Z!xAJ^ZQv?N-3C+PHJe0! z34R}BLfiI}XQt{S&rOvrH`!~9%R*4A@JW(?n?-~J7#yrlgsR>^IqX-SN2l?$l3Y2$ z!ycBSINHD@h*rFma4iFl;>J(^jCR$SK1JTP$-tcBHJO0Drx-}2mF1$8_U`agAfB*Y z(vHSRjPQ@YoULpk2u%2oKHUrTxF75v8*eq+^t=8?N|~i?>$Q#a^MCt zhVYWlD(W|>BzWh3J~+ihcLJ)I@nPY!Gy;t1^C8h=^Q0mwv7pjY&TPhrM|_kjQAlR3 z>e+9S3sP<+e-(;X8OFUk9J!3XlYyy&9vHAfWQHNh+9pnlznM$uQQO~_-JTnHd|z8a zTOognl^KUVPB$tIWrvS{5p`{1GV5ENx%*qjl~ocZ(Q-Wp!%whYU zU1RQ%8Tq~&3$rHc!s-n@4)9RbO&9X{WrIZ}-ibAgM;cRlAdw%Ygyi_D-NL9YsilwP&` zbv!ygJ{=J-4Ae{RsIu#;pawuNn|1&tgjN&ViNehdc(BS>9~cg} zaM=lhT$XRuY)|-?l{@JB(`A;6=Lp-HH8KZg{=_uM)!L-B(Y6(jy0)1BFPy+EE?in4 z-DZpC0#sM0mLAT&WTADfe=`j1v=_rSryo^r%(9j!P}^;>Qc#6cDm(dJQ4#>W>q5+{ zm^P4>O*#-wxe3t+ZGO(nGby=Rtgak8N(a@m7QU$rqwMha>R@qAI+kq(YA?MGO6^vw zG#ER8?ny%CPo?xr`xFHS*t&8r?u=sfhB08nvjl?0QZW8zvnK`H$9t9jUtRdKVQ7Xe zHw&?e$1*T|-0I;!8o-n0G;?s)9>7qhAVlzKU z%a4#RMg}TN6&dc*M>O;{ry_Uf!n`BK=sDRnyaI(xQkI;eI*H~82^1kUdvj(#1@V@< z8wpIsmo}`yHwwk7v=g$t(0m#@#QTTIFKInZcgwU|#+;Q37e6m0L@uvxlf^b0Q{L`l z-#QuLKJEi5_$DLcui-k)^(-lyQJI1oArqiDK+E&@|)CyQ8Bo@sTUkto@#PQMTQ*%ATPGz?s^TCj^KOEl0a2c>*MIEWsABhd`S zlJ7|;@DF^!*tLm#*}I;JTvi@WVOJ{ z$HQYQmB|dJ(7a|x8TY?!kGwJ1;ZK=^YKxVcesSEm2Tm#9%l2DP6n<=u(?>pRej z9dZaDXj4E22Qv_=UDO;BkrCY@2Xd`|A(Dp_n?@C;bBYCrerK@h=df>ZZ-thaW#+Xw z{B}b16ZDoutjFq?s8N9$HcEAR92BSMlb3aDVO0jSlT#{ta;_y!U@5NBb;iY}n10S| zRm+|PXg4`rS6O(74Zs}0u% zv=KK$LkZNSxmB+ncz&?MspLR-^Q-qJJ10Tjdz5iAv|6)GnlPn0^FeR81%%h(M|=-I zTXl&uS>+EFmVlm*bo&}YT?VY|&yB)vheQ&(Xnf-&-BPE@aEsB(;<0eG^jv_BY!^k_%l?{=(s6#%Lh;y_NsXW^d=$85XAB;7(nH* z(<_TaOJ5yoD`_m!j7%YELHTH>LFH=g6jLHBUFz71UV&IM6ZxvN<@XW3v0ptuPEyVB z3Mh(wwD0r}hQobQP9ElSSa$Ix1!2Er7}fu1$|&O~+ZLXsY}+Ug)R<7=0O{r*%^Q=2 zxMX5a%5Vme*mxb$_72HKLn$>~)pR;0GZbb9O-f&#-8~sqGXYIOy>=1?byzM<%D|o@&4Ol)1)TM&2c*};c<^;ebK~j2&ik)wM(z|dUo89;H z`w+xx-mQ5TJcjE|TGJ9HM0@k}hVlQ(SAmCC^zs{G8|n=b5tj50^4G)U_e^P1{B&L} zk3LX;_)fJL0{-Q)$Entfm6Gk%zO{(bFDJy}R#Pm5&yiu*23B7WW!S z7=XPMV0C=W4>kAQlNbA^EU?lfZ+yA2v83F!rsy&jz2g~3G|Rv)3*djymkPX-cCpxO zTMLbx_EVLTd;~WVs$Y#-#p0cieIP~Jn53$|Q_`PS&&dqB!}-OQ551Qt4eYLB1csjH zLc7lOLPNlW$9HsR`yYgi))d8{wN6nfu<%0=g|Jqy87zG z=@a}3Tn!y1An?aq-Ad=pU^jSU9U?Gd8pcn4rWmX7^=m1)xh?M4w@?gLGkX-xvJd76 zMZ$W4d`e9rDUy$c)RZjRb`iUYzy(%RRCGByk$(7-ZKXzUZF$m7pB+?NN>g3@)a&1I zR5!Dmf@1KGHS|CI{j;25F{j~6rP4fs*(AP?Pxb4FTQYQtj52K1eE(dbPhZ;p_c7n= z3!AaH_1I4xPNs!p=tF)dFy#}IkL?c#h3^pKBZXv3&h7@tr;wvF^EW?;2Xu9S6~MlE8uv{B+my}ilY zz~h_zveT1-t{ylzTVuI#Hz~1rsf9qn?f8@vsc@w62)=7Zdao}DEB#RZU0jnJ3pBZL zHkJq2$O#gECBeL&5 z^yY01WYy*WG|GEVLQwg-$nFE>)J{T!CoutU#gJRlz~dr4N!oBPgb@|*sA|u*Lz=V& zG?+1g5adJkB(^6E9~P@&o$Fivz4P8fH$M>g;Mf_s2Gxb7Fdapy2Ss_`e`i^nXq!Q7Z?$zZ-;`@slR z+e(JtTbS!lft~zN?kC0UzsaoiZ!$xxu{22j-&9k`$8ZS%x)HccqnG0qjDf8CY{y^D z#c?jOXj)HaGw28$li7l=?_iF*ECsEux%-oHzfwX+x41|bk=y{`9SocQr%Tumhvm26 zN1`u*`%VA-|lW^I&XT{cDkpL zGA>LcB&tFPA~d*V50tQ=aVO9$l_Ke2*bAFYYV--`x3%Jz(=BzedU^V0QBp1$dmAOs zY>h+x4PGG6qGRgt;q%}>SV46QZM0_PzA0ZRwib%W_ClsC}_CBUzYj#>d?0 z%sPOocc;|LwsCK4O3hq-Q#H`nBclq?`{csv+0AnlE1gxh=gcJ8+R><2G!X9NrAMi~j; z+7%6cN^DaeMD|El*`CShc3@(@5N9Gkz;cR5uf~)qhu1|TQoQPikdmz_e++NSIFY}b z4E=-IpjN7giC1Lu^n2sca)~$&^zJ3e2l-F6=e)`#I$GNAqMovqtRBfPm+2yvj3@VA zRiNiiPqjGVO#PzcicuE?e_YeraL6XMC%1$ znYSQ^PZ~J)g1w}ASYF*t<1oc3i{8r!o^&Utto;RD(0+rvDQNqUzB84_j(G8SjKK;& zgh3IG!jZucDC#fs(rjG-3i%Aaq`qU+t3g!=^lm}Qs`G8%867q zyUcOO`ieT@?Se*nGCT4!^*F@gL6rI@^@3-o-UctZlWkG74(ZsOsjL6qwDrF?Em{L{ z7y9pQ8!6-vP#F$aY0HuZ+FP$**~oP7W*FFEa{R*>=u#Rb8XFrY=;}lwEQT)fNTw&5 zVkFA0y25@5xJW5yH4jYZ83z}6myC}<{tX&8v`?%Y0GudJrl9wqEP%$4Jj|0% z-s`^dbsnDtI5_I(7Ij)^+gkkJ|2Rbz5&0G}i1py&G3+|gpzqe1FYUOk>PX0@l}cUqOhVGXQAM0l_f)LhmeaDs2&#&AuF^STf*wRqpt(jE!g#T*#D` zmsckg??R$V;R#}N{d=zj7Ii~ZdVrFam5x}-U2R^@{YdiSvpB&?RF4g!>0v5<%i`(L#$e_PS0hDS68xLwtg}1Wk@hEab!ROoqN%5?XPi zX7P1OqHktTKBbD%n0?zy0t%yo-{vHKvL|FHq0bpuoO4Q4z*}-2m)~JX>e^y2Wj7vL ztxLF1;qePX)echno;378wbU0BROWON8kI%<9Y1GHwGaGvm)CV6)c3A zq`(gRr{`~{G;=5aX z9ibfsddscwhyG%g%%RJS94pN3!$#rrn9KsrTjDU%KT3-O8-Ql>rINVD(+t5OlvI002|7~iw>q8t93gbxN1E!s zUo>$0`+QfURaY_$JrHm{Au$~tpx}oY)jjHF##IiaU+CY=pC#;89^W{LW_F5*19)=> z;)Iltk9cV()k(3^Kb^`b{kec9X}NA~W+mN?U>dqI34$FS;MZUk6;*cX-u(Zu0X^m^UT^mrJx%S=W6f*-c{a)QHj5 z79z&V)_{*;3ayM$!}*=;wuwMV~9ZQy`11gNH1GL{Ed zA$}yBPc2qCV`ZNeM7<)^Y1!gZK-&^0KrMzK#*Qu3`w9zIc$$>$wOIarqnFe2K4HhQ z@EC&dgNV~$<4F?D&1Id*AIM)30qj9;+?t1E2xjP|m1#RefEnRj0b+|V!opIOhkjI5 zVS1C@7tpmc^$_7vx^#dbn+_eYMj!~a;VY6(`cnWOUf1_Y=+F36&pZr9KPsXc(A=0JVTK~I~=0YZwt?|-0P2|sJ{(N8(_qCYExkc2#ZEA0J{f|!)QEM0#emyS zE(9pXE^;zAdNES2GC2*j!y(qs8Gq0CH&ECglzgb*QeN&2Ot58zkO~-ro-U%Un|}_8 z1kG=`^8k|3MlOSY%q~)JFs%b`up(cD&3}pd=}~}FERJz90j>rSH|CYIY1#qcd7DQe zS`2&h=8a-h0%bZ2!cyka$HZ8?mMn|quc)o~v5-}5DQL@6k(Mlwt`c!b`Khe$`HiUG zt>#t!8;70m7!P0n6d(YC9ao}_X1p*rClfvSbq92q^V+7o?mR=n=F zL!q^Ncsh>_gF_=O54;^?3#-*z?7dyG$3lm}o9yd_dS??xxLIEIOyGp59&0_U+Mt{? zSvkt{oxds6|5l04f#bDvP{<2pIF3jSnU&v=z^&thci2@S$sv@5E!W>A7g7LChz@6V zm1LnD&R0MeXn5(?w9CcB7>Gzm3q}I*-E^Ipqn=W-lG+~72>1@pS*KUz3x`>$WGCP_&KN8-=WC>DCJ39-=g{pEb`d4RWae^Z|# z>nF3k#wPawT^-?Is1#(s5oq^-kC{O0li<1x%LY7Nn z{|*07nvG!1!S>_1_i9ULg7|?iBg8WyniYdh+BITF2*8uMxqQz#jw!(DEg3P|izO9R zv)ZaPzOvSPx|mGRPX5}oRxQgJQ6HtP1w%nU@odHG&veH>(~)6}&tkVB@^9TfMCieF zH?2dA`pq$FasCTd_Qi_z3>@nZNz2`v5o-kphuS9T+Ot`-07uQc>#nn2e3sNBQv=+k z1x;WvQ>JxJu>U8-M*Am`(AErN4hKfc|LFr2l_`9KY7lYn*Yu6xss;`G%jk=$2f4J3$y&6b($M?#PmlNQI zd*!5ioR;5kC6s<{lCvT!^ZmqFp^UE&dE5DlT>q@&i**0*g(YLwrd3ab^D{`ezz}!n zjW|S-=Dw=<8}cx{`OGp3>*qzH)~eV&y^Lp(5M<$+Rl(!NW!QKfvvk=MRL3 zFKTVADmb^+x>)Os14MfRJuci8Q>XVY*vz{lh@QpNITt2}-Sh{|w z^%{=g6)+vh;NdlCMV_y}TV3vq&jBgt>Z)0mi+~7jeT8<0QbDF-LS7!H|372oy(#IR zO?m3^RERJpCOTpWtB!u|H`P@mF~dvlW;0bCrcJo`ozgL^SpNlt(uzF!R7;hgWGk*a z!K-y_$mmsrvR%Xes27-N`1C&}gQKxhKKp9oc5M~)NAx;?*I=q%L9Ghhcvx}qrR=q@ zd)_yc{0T<_@0=UsMFfe3yu`jO`>aWb5GO;OQGk4aqSdhZZB3GgHOY#`?nFU(n6~Jx zOfe~X$k^m``X6d-g{NHcV@oca*%@KyQjzDWcd?LCyoD?A2pZUK=owOg?=Fp_-ZAboB;TmZTbR%{D?h`s<;^=+5qQngZ;I*^zXzSE97!D*-gao9RXc}6 z;TqW2TWnL|tDFnO=3penX@s&t;^Le9UA!z;P>IKFd{rT^m3+k8YLPAtG>cH+M_*|< zefG|K!0Qu`Kw6{h;0zY?Z&rCpd-iPY1?{?|_div= zg>M-tSEoV_K=%|_lvR$Pbyy&{+-nCGCJCqnAjq?m<^3%6zp~c1IYJ8SEeN_gJE@LbxT_{PjFDD3PsN&QIdOcsxVZApM2t_-mrzaPXD zL0~HVt%fqwilMl__lbt~q`tPwO07KQ%qp9omR8`Axe|$zRds7?J;XGBUCJYC1Bn5~ zS_f5(=f6CO2`SmLvNSu-)nQ>2vNK~dGZ~|1(`DqTP(&{Vhxm>|7S8}~O!*{ExV_cL zlqFvBlPb#(@zrk}{+DLl*ULJ}ThummVS)7}!BxW%|!_ay)sfdH9%HGd{i|4t)JB0w(qQ2&WN)k8MN z953wg7wI|>%(JbMGkbTjJvzDG;}_?!-MM6_FeZ!l88J+Pm$ncPuxd1I2AJX2mW^%% zlDEI-YbPU8C|M?&bA7tUTV~Sz$nQumZQcp~@pUf+oqKUBT)7Dp*j#E^v7(i6ep-jZ zzdTD!`8O|TcAERg&Rp?5iK;5lxt{nL}@VYEv(qKdSwU6 zm$^!#G#QLj4&_eRfDpAXDT-B%5(JTLY*h6@8n@QSrqn?=g(iq{ot3m>MG*$xSHa8V zk2Yw8y}jRtI$KRrAAw%Y8j}Z}rJi#r*f%1XMO6+UQN?9Gz42DguAH}2nA!5%jezt# zETKBOQ1(BlSFn$!EujjvSy876Q9t`-K4oQNO-lP!`2B6b>7Xr-xW>YCT?}v?bxDCi z63Rf1BMf84{=x*mo-;Stg#IWu<9P)Z(T;r|c18IV{Bf~*p=RMDv}NjyIZ%g7$m4fm zErU^dsEFA>9oDbQeLy%||M2D4p@CDcUVhMvZzjPg=f|xdpEvIMe&uCIB2JAKJ{Toe zPPGlX`P1hf&=6lfa(^?EKd7U?XH<5>`rJ;of$H3QU;b`|fn!M}sy+fUKIxX$6}g zA*}bezVyGw7SM2m?CVs9Wn%y`J@EB(BPOuSk;(siw%uq-aQ}_F%?F^7Ylp%wXPaiCR-qQi>S=H}iQy1E+7vu0WSS1(f36%TqHQ zw?jxuBv#6|<+m!_NMRt1gfA5ETVeb{?Jp8hgMb5YsT5_E#wCwh?)>mvrle&iP9q-~ zN(MGJZwbks$8Q+fWEv@Huq>q<^3b(x2+J;|wAUz!4&g-pXLZcwGA)D5+HeHdT-v)PI~FOOHJ8gCq$Err_4A!~i5 zy;4Q1%0@)M#M<4@Z9`9TlknY_z?c0M30Z>I!XJk4FiNAx2aHr}~HgW35* zHz7#UtHnQdBb6%tBc7bgm42Bh%20ZP6{Y9w$v2vicuHaIl&=lXhzhZwaIWR7OIVnp z9sm&4zkB%tF~aY(E(a9^xI4Q7}l-RGooEncQz{)8ohe2wf-Nce|2BK;)Xd4cqMIl_Ezx(y2C~ z47BXBfxrM@sFP7|Ij1U4F`uCVMNme}Y0q6MZ&4FrG-Z)ULYA8hei6zqxLQIc zh68h@VlW)o)&>p0V$mPSQ}4z%*;eC!R9SRFS`;y^FVf8*8?l0RspH;jHS6B~T&AVI zGNs)pIjy|`k34LHM3B`O?{(B|=S)hUpuOkBGmVo__}vwilTzLccZqI|o9ZL@A8~bG z$tg7E;lzA~SwWgajEs{3HH+J;xG|{bsm(bNlZeUFAhN5eNVP4(V43bn8cC2Z)1)(U z$__NoHRYB1iLv33EfM)DxmofZ-r?8b3lx7uMD7$^Qvb+{u5@h+O&4>53jJeLbT7|W znc}>%%T3kvn55h?A7-<6)tj2wwf77{HhNlqd{2J0Wfo0dOdDflz5S@sCaW3VFcJ`j zL0R4F=+oVlG=GS0R^yq&cS!zuKLBB4&>@J)xq&?zE&S65)>tCJ~vvq+D~^adX=l_HTe|APi?Nd7^CLzUL<8UF=bEF?-e z(l}hyUR_@9G);1(0&a&HRCvO8u_(m_QX8PSjwbn2yxVa*6SICOQ_G53ec|`UkQ^C8 z<<+@=(06da!#Lv{P#Z~?Bci-)zSly~O`z+pY2zvx8d-sAAVQ?2P}lizXx=D7N<>%? zM!|bhRS_=35?OQjSwBV`)EO`G_h~z=;M(ix8dH}jDR_rNA-D4c_9GXw@pR5*O~)kg zKy8rd>KeGnm_fKq^z>nRRK%K$k7SfQ#D+dabVP4M0M_BCHvXHT7bf3nqU_p@TV-B) zRKspIai(`kNvNGMgRE@*!o$=keYw0oa|3%Gs-mkv@e(d4-gF!|oDR4_2|s|Jdnw@v-Hs{nnV zaCLLDNzF`5_*)J~%l)>gBo}Xu6wN@aiJ)3P?#?--WF;$ht}J154^-KbUXaJiXX1P@ z80ZDZ(QQC%2G_CDn5N|~d^aEwR#{j+C-PPXYcPe2_Bpyq>e>ru)Po3QAAuY`u>$o2 zpS^)v0#%@jMp2XlY#YCdq$O^B^>8zMdNCP%luJR>+TpIfIgvberH4W|?J5r6)$2Yb zB(;b*#-VHx%#U|RlX4CEc_hF3VtBSz+UOG@uV5zE=`eKn^;5eK>Zq7>b|jGYPIDo@ z8w_9W#SYwrPv-^vmzQ=wbQ-ID1OYaXE$1`JT0?R%sMli#BM-G?I>_#y+U8j=td^}WlZ9`usgQIInBoSBkg3)} z;lLPJAibCnu{uXAA#qVCXE=Mcg)0tm7+)cjE4s2<(%yd6ruvc6Yp-8wk$PLFQmd1t zvIcWcwG2l936BFD`Gonq5T5!>kC!sCLF+rOX~O?R`7psdkOXc<5a(Kr^`p1f@YJ}M z0AJbvT53rUCO%2@t@l`_hFS6e0`{_3T6=k-xk;c9bV(LkK?!7XH83CPsg35sQH`Hs zIzwQp4LR!4Ha}1$FoW#-+lrsQa|QL5sg`IxYPv+5W$y9n2~ci6xzBbu(ga~06}(yr z8|ZfKuXOd6Oi%13xfn03UYa`V^Uj>=Nbn34y)=Ja>f}F9UKQzqi~?$@ZuxfwLhl>g zT_|eHD*u#*x1{+2H=XAk-FM4R%RzWc>@fij%kG#7 z#bpr-Ji5wQ6ars8o87ZW8WJiw{UoWV`8n2Kbs;W_LTu{<^T$~s8Vow!2ND!98h}uwE*6J1jwt^sii+= zm0mU{y&Vv$Wt(_M*rBaQoPNLN`gg+c3~L2T4Cy5lCnAr$5(;S?_>@}rb!xB zRmu}Ka~O41U%H8s7gKvzy1RCChSHDT=j?kHhE>1rhE1reexwHSb>@i?Y|IqPX0gwY z7tg?DdE~DJ<_0vMBLG@j$W)&<9;(N@4n7G#+**w z*y58?V^+1*NM=h#*Mgen^j+Igu}YV8DJqqeyS*x{EV!*rRvy2gk>9Op+1Yq2I3J1=i1?fd){?1N(wF*p$&W-mV#w;SW`AP9B4asmow00%wEzVMvx9;a&X)bE`Kn%_K99vStcB=EW%<-KIHc=54YA999hiRRf^xYZt2L^! zCI+weXEQS(Up+9_$-(A7c{30adO8*> zbU~u4b}7_=v;eEza~!-vfsA~L4HlXS4fw4p{#@EybJLlfP4@r7Vg!nx?LO^TL0CLS zsQ)e-&&R@N|KHbX2w+HJ*FEiY$Ln6jUffd8F8-gi64H>QuQ)i0FHoW4qf1|&`6lO| z?UMNc54IJ&RH!n%q?)L7T;U~zo(*s(gh>j3Wu!!BVL6SSM{v%0qc@=1ED`1lx_}T? zw3v<}$7me^rs>PKEI=w@er$`R6hs+O3s(6ulKh=bUVa&N6D(?=g`Gs}>c~4Ef%kSW zCnNebmz@?rL32?)7r{=0&k4PZ;Ma^!en-IguxGxV6wNS z!Qn;Cl`KOVJ`l&a+sGEVQf_ryH0{%w7!YE$bfbGY5GFo{9sf-$K(w7T>Zmi;xQ6$l zYrFF3@8Di4ntrCCTTC^2K6a2b^`QPc>}BKEBmDX`TsHR-N8ojNj=rr}JSg1)7S+qu z`s3N;8jS)TE2XtW>q*exN0XR5Vj*Z28N#73d^h7|PdJg>am%iF%2ZYD_#=pr+$QUN zN(pM1griKq;xe7!=!YxqMXBwt%-J#C&N+#gJ6Tc(E_)I&?LIVP!Vp$EYa|dOc{DdA znf!oMLyZTjGb&yNKS4WeA~YZftiH#^mMmhyxc0V(c#i)P6A}*n)a_7IO{h^R!Hw7X zrvOui^)bc50Fe>o;2VaJh8~)=_wp4XdGr^U;Fox5(hDx**!{^v*iS+>0}1Y&R{x@> z^K0RhEPsNGr1iNseA;>k$&kFf)E|W?2I2WWP=hX&H_Ev*QRlrsR2ta} zz7taC9?Xer<4kMCqD0V} zrP&~ybzqw`f7Irxjv9Q=xOmtl5Yk+D1809nF zCFFq8#0nc`Crs5URp*fGWmA#n)@ruC{rZ04Khc{*5w9Ds`5ze}{d?YhU2tmY3=Ujp zKSmS1^QoZg9D~1F+5Zrg9SUqrf++%aHlr2_$=;Nb@x~Yl)rPZU`EPrZquMys|7-Mn zsQ8XIX<`;&oZ)N%tY*(mj;=xTlEr#@1YaMERQ}ncy|#nXXp#gx&xN0baOM=_CNjce z*Srlhvz&&0rNwdf>bBw^2V=4!mqS91>HP~XMC;mhyPWbcBDPX_1qwgCo>cN73IWKu z_UH!>OUu#+?Y$PhZ~$eB)PHOBFI3Nt04@av+ky*P!{o2dOdw~wrVzjdWpoe}T<)LiRf@v^-w)rOtki91tSKeEldB2yGXu{4V30PscT;7pK zz(75&a%aA8zp-V#5W}Eb#D^HzxAH#IDM+Pukzliv!j>NoJA9DA@Vj$B}JlrS6}FreQPPSV;$!R zc<>{mi4`n505e7Cns7Q`2GCubwAU!#Uzcs$Hsf@Ga0p8ly5iKup);1Xq8o zMja$TF&vV_q9qH+ErenDKmo@&>A2`jr*tH8 zeZBwQEt~MIy1o(cl{GpDzGZQprC44ZW7F>-Ba@Nd(`H7=!84aMZ3Ybz+>wh0ethC` z`!E?BRoWp@vk}aa743NcN%LK>x4Xmbmw-%NGR{en)rSE+~V=2R)*o z_vxoi=E;g+F61ATCE{4FSpUv-2Agd$#Mw&(>ZjbH`mC8Z#--$T=qM1s(7@f`63tdB zZ!DCu|Fku-b`A{7ntY9`_v(-I{aH~68Bhdkw&91#TeZNuGG@V9p)xsyhdjl zkXdcN{A(;MIKTtY2qjHyYx=bm?YwYB1ml6InM@e-rf>&5p9OQ=_9 z*_9fdN>g9cGYh;QIZeTI7w>A#B*(dt^xh>B?OQ*0g4iw6_8d_LiP^9O|I&K&Jbma? z#jvSR(!1nb<@?K^xZOorPDPmzUOMxAR*V)7sepA@DT7*RynoBZ(sch|e_UlH^dkSq zD`L~IoiCD??sx25gUiPA67iREH-wRy2js9lgShHA#_PA~FLwkJ#sg}o-1BELVl>f0 zjM1L&{jAYiBomt7u$iJlZUr(w<%Y|D7GDUUMh@Rn9m3a~S}M!IbKa!sdPk@Lb2?eQ zW?NzBq3*|N^{AHD>0IH3i^2h_L8lN|>6)322M6;WW@;B`Oh4`sRxqBLXig_Fu&y*1 zau2X5Ykc#SUuiWGN}u)~dd+Xp<~^fLUB|IdN%U)6Pl#IA6-XlV$QyVYvHpn7_M<5} z5eMJPH0vEpUGoT6^H-}Ua=-CU8vE@~yWFm#!P2~M>Kw+>vCgrLv&3Ib>?9BTHD%kG zf|~u!za?~!@Vm3V__f(Nyh=1moC83_LsmY16Q`NeuR+}ChSuz;J3b7xyyvYTR5z!9 zl@vv(jqmEBd&3Len?m9U)=LNEGVK$XqM(<^#d4HcYKe4$2_ulpQ8DZ_noaZXg`+wv zsNEr=RWKH6cR2Ys^=B?y84gwN*?sUk64JQ%Ah4!E3@Pi;CIvSoh=qvB!!+ic*R%a6NSJX?@L`IsN zSN}UZf6)RXrItv1+b=&YZg^ccl3Rlg)Gp%Kgq9!Sk;ZxbHfZ=$yW}FBpFQ7j>+XMf z2J^)qH4EtYMuG0at%pPu790t2O7Pk{C`Dhz&<2qRuU28{#US9I2laH6U_%bh&<2;O z1z{^#8dAy?C5ulPwFps6RZHfx@(VRtYn0PQz#krsqNa+GYq)Na-PmX?yQegF+pJ$~ z6NG&=vht2_b6hhw%~@scyLRcyEYfa%?@qYiT#b}EHL84n6L~Y>H|uJXp~8il5ImXv z8jS9?CPU%2Ef-uetoLe)^VPeutprjBF6PX)=Vf(E z6Qu7u1U>-+(mDjwMI4~U+~4T1ADZ9ZsVIu%pf#lMyKYpUVh)k;XB%LZ0uCsaMVq0~ zpG}5sa+}%?X=*{kmvR7k6U4xvJefv|^U6~XXkx+}IU`R2<7djVL92Qzs_9sn2nZ9l z8WTV@DUpW=i?jYqG*AH*xm-tZz1KlI@3zj3NN?{R+^HZeLmncTZ34Kk!T!eYfq^hb zZI|3u=(CtN7VrZs5?$|qhOQ)XIiTb#?d7Pj26}r?OV{~xWMooT#=fHDSYC3Sm4_dH@3MSK&Fm`wTTL2Vut0Z)ASHjf>^d)hHXPbP{}B3c zgjmC@#bs$*_rELu5xEnm!(Z;ScLvFD|LoItT8`OM>T&eUm=H6u&+&p`rHG(zuu<&P zO9yL4;aECeUZP2*$SwkQXbsq1m@=aPLQoRprP zMwTkxuL${NMgF}=e>n(b5K+d%_LqPk4LFj;r}Tt5kIlt z#+@j04AlS1yT8Amfp^9V!z7^2G4;*+|9$8oCR}(hn;rrrr2yc?J==tL?=oIhJI{50 zTi<8fRR6`nsgIsz?Z#-k7omsntirBf@TFN4q**6z@bOeEo6!mLSEQ<0w!bhk-+l9E z+7f2w&V*~HEsO$2N<%;UoK`K+x!iYmg*F<=q(`4unswS4MBwg}@z|jt$>YhEt3Z?5 z2%Dc_I~qS|ELaefOh0N^yN6gAuyav5a=9off@zygcL^vKXKbq`+U- zjT`%Z3FXDRp#W6VS4N6bD|I^v8t|jSey8A|^Dcb=z*dbH7%wbTQ$eW{_W{A9gxDGM z-R^}dCdhYnLVq~`#||6Wd*zjkOgmvfWY(J#5TI!HAf++Zl+} z?`ZtyU`w?0cUr7!T?^owQFR76SHz00zKg7S?pAx9Q%lE=12NZ)OEv8RX!cONHNa~4 zEZm$rKnP;nB9)ew-s7mo)asgzw!`|fKkyPWe;^S`IGQ*cv~Szy*ffbeOwuWFIU?u4p6$ zb=)U?geV`^v|fHGDra!pz0kz9J!{(cKOEQXedXU`^fAwXx>oFSk-rgeWBN8~YHCu| zyQV`CZ7115qX*o!-v2K?J;+^0aEkxJN| zDK*TO|9g|IV868+((SZ!-NuMPQ!WU5zL$DLS)0oL53wHckSyU5%_d6%OG(e%hotZ9tHi)0G7^dFMNOk-vJvT}>vE3(^Zj@%UCYUD2*CCVpQrU}g%&3v5J zj1c90vNr}r4DkjOeJMnX74$*tV4aFHOzFR{HWD&O6$|Z;E0XuTp=D$OC^G-abf%^`hfOA9XhhaGDnStIJ1trZ+JsdvqcvVH{L0g2+x3K|ej!`-1*w6WZnRY0&M zGvDSpEX=47{BRv*w4`w{IhkI7Fre_fZG5)NVqnQErO$p0f9xW*85Dp1ZKqk>IW;m! z8L(}F?s5d7pz5OdsOp%%)djJw{?uU^vpjLuqVsbN-ndZB#XN)olR zE;>IjlL4%h*?)(IUdg^U^eA$KGA?ToY`w6eB%)-1KOd{NFVhVYXxbr-NCU+!v;s|2 zDo&m%OBJE{IhNWqua-lD#QVQ8v^bmQ4P4ph^X^C2iScpwY%uvSkocG@^7MOXU+hR` zWcpu4^52sAz>6YeMm5H2a?KLYdZ(bLSGghq)>{8P#xEej-h1pRc#t^9CH~B@ng)wQ za0gRGub$>8V-&}efz7#D;bI?MueQcCK)%8%@5O}&qkJGOEQ{0B&FcUK_`*2JiW?%A zE;%x~@8L-VD3Z@LE{v?gfExP zm7Y>r@Q4#Sj+ae>3X=xTd@o>NCbX^DRHx_5S&i7!+lE_TaXq!*HYi|C&CDP!8G2qH zVxuc4<|Iv{PfU*M9J7B+w5I59rntVk%E1C3l6*-7;z7QA`GWJ~pl)*7Q=5sE^8Vs+ z+^TSck@c)5o86Q-gECM9gHnt&w7>s0P`=RnHA;4zaC^=S)!V&@@I72y+OE21@CMzx z^4|)R;(Ns-_>*={>uSNdjdpGqs4({@-z;PoCXHKEP`SBZsGV8{-6>*LX3-8#H|qs+ zeFe4L|9}f$jh-!0RgVvp|8WN1Umu-q(m=sTfj^!f-_>*f_ktj|U_re5#6;z2>U&i2 zvayb?lO^?5Ou-{ZnyzS8l3d>`pd$F;sEQ(p;v`s9loy!arFFdI2Ck0df8_^5-B-MS zgA)Ianpl?4WLs1kso3sx&J8b4(k*tRs0gXHU-R*MHl3>t;g3lyl*?p&a@XAkOlw?^ zdfFDmEu{(oo7YxD^JYRioT%^zf4&dES5O?B*Vpp~)Qy*3RkbfDLt zsC+RXALPk^NYXZh0R$wJBn`rfq9RJXjuuark}lt?2?1IA>t9^lW%L%9P!}?b6sMsl z9)sX$g(tAFK0=itHjRPOO={hy+$b6!i~iRNrU0l>art*PPEMdk=vtc|WL|Pu6A9)# zw&o&^*$~9ai-s(@Rag;rh5I(E(|j*P;3SvUJi9R|LIks6jXtQ~i1l7$)$*BEO;i^O z!b2ImbD%yY7M1m;!A=@(g9U&0w7AIp@PV3%i77GD2k$mK4ud?}Q#X=KK_zo2SKMm z=0Gs!AL7G>XG5F{7y2mM5q`6Sbs>0UeSslw{0iCj-k5I)_5x{Q8v~ym=UL~gRU{XS zvJBQ$uhn{j-}g$WHiepwgP-tjRj3gs$f#1@sGagaIljheX=;j;k5G}*0V0zpnivd0<)e8#AFa)71(2sA}1pTUXN_R3yZF;9&)|gDFddPJs-Uu?bDwBZ9BK z@^@COPe1_RO##qXaH+@FriaQoYtWaoW84PWH>k*n1ik1)t7W`UfjTNN9PnHlVGBO^ zt!b-IfxM~SSBD@k=nfL3ZCr%iHp0HCWpOI%6y}VS0mJ)!(o#ZLgT=31&;I3ma^_nX zX8P$@w~Jp-mP?QB8srxaD?ADq3l;`4Z2ElOGlZ650jroRu}h&~`(e}X{Eq%=OYly3 zTTv<9*tJVmufa$c$$+1qzoJ7{DyN}!|D-^I!ycXomL!58_7#Kuz#j-&0IX6JP*eK^ zE`M?}2l{j7AZF&;nZUkc>~F}>kGfDsXybIe3EmP{_%@+33$FSQs+7%YW@1b-S3D@t zDWn)@!8v~fDS@niF)tOB-s@Eh8J_(rUE|26ENdu@Rco+>m2OH!kvDD>;cCXkRbEBo zE4V5=sg$W?5@4N!r;{lWf_hEw1DmaEeLuu};qICC46{?~lC5Uq5&SaGoVl&-%}8N+ zeay3rajDlOtiAjBZmNQn#Tev=G0Py$9+(5OwzSR^Cm)Ok^b z8xB}e{}shAP*vF38U7g{MJ$>JUY{~a$D(IF!#yY)*jH;QSTRj-Yi@Fh;U39<-!1gp zPAhto_iN@d`i-ksEZ6Et6w*W=Oh2SBkJ@JJ(FuvHx^z##I#-}Y#nONwllL0y&G&N4 zuS!hjts0KixiOpzBq=+cXTrV&NY%b5I$O2AqsqL*8F~w(R#`HgPW#&Vq z+Cm(S>#t(t`#<{h^x_ZH%{&1 z&?hHB`&JpA1fc2%5UZ%Eh`pU+KkRT0hjt!zhwip>em9!#0thp`)$e@vxAlBqCXf-= z4YwjIWT#zrUYB|`ot^LQls8UX>ZiU6@eg;E+%7ZeYIMh2(n5g1Szd|<#agh zWM|~%J#LIToq>w#FK;H;*wVK%_?3fw6W7KxPKD-3%k&AFRw6{+;6$dJiBKVh8L`nh zj4cQTMXtz%S^WO-Makh^qK=&G2U!bQYT=ippx~sMmGntt8?aM^cX! zM7ZmvLbL#5#T0sr88P7v~y7`<5}iEsQg%aBe_qh z&~Mc483X)H`U_^#@rx|g`Q}`E2K-x-3ZhhP6*mu(unz*>=P;1$Pu&=c@)*kZz2fDb zUiHi#2JZy3I)7W8pP)r9yJK|>mgC4Y)NTr^K9-1@1pBbVq`2#h^egM1V%{{AX?W6J zybEdJX%tSu{^Y4Pf=wja7tqs-o7(X;$!13Eem6s}<*yzs^vw9k3~$Nrg2U{9 zkB7H#8w9W(m9W>S;FewOzqs*O)FGIYZSp3E%N5^a7mGlKs#*H|&cy=$w8-0BA98*T znoW2Oy3am z!k!^SjN)_{c+%XA&)veR*AX8Wz~At@Nc|?eoe@4C?_!=t*4>tg7Z4dAbb+7U9v4}oB8u*9QP>WG?#yJc24ES!Yzq6UEEnEctNQPk zvxi^ffPGEvj7>gjUMG>X+G$ZH^0LvU#5PIgLVO{Igk?@svLvv7`EJ($lTxv6c-M&z z4Fst`9A*)gKRR009F4olw(k`R5B|t0s!2eelyRLdB1<+HUDZvb>%TXULh;N+Fx>bh zA`OBO)38b9^Ea(m5d(jJVHBKvRR?$SI8rD?DAz~>zB!!J23Tg; z#A41wN*q#k@2ra}i5{ls!*!{w&y-a%SKGpLl?LQBQaWK#jZR?~2OTB6FE4I2>Dq(I zu`uOPWU4N;l4h}YsloLt7^Oc;4)upWQ>W+n>fl%{D+}&RR(~3qkHzmK2-Oq?Sq_3G zhCzNnC_*c@>wCORsS31%;`wYX9&I~bj~ueOP)3~&xl|IS9JM~YT4T63dPpC2E1KO- z!S{L9a^gTv8r_Tk5#63$9{sYa{xE`p8uIT9VZaVLK2@ct+thCf=(X){GS%x@b0+_s z)xul)C|xFKm#My4gHLCMtTc%$(WhkR_gZQ7d*&^K$LrcHz4~h#Ao~c`Xy?dvs{NYZ zTk!MDBQ`?Z9`|wa6|OLN&9Qo|;?1Z$?1?Wy>Fz-ZE!TlWqP4X(nfTK6pw^uE^MQDS z+)jns!A&G^-T_Ns2f5y$MGBg%l8H1^cXsrxMB0XPL8Pxw^3+AP62-XT(DJC!5jZ_N z}wzlB`K*(PcL)oc+qJW0Q&Q#brf$6-!NFFFeV)Qq8Iy1LuV}|esPLZ zFGRX~%48)~YNMdQf8pbibD9oo=x;BKZ2VZ>*{YI-32KQ=RM*+L^ts6_k=(TQw*MF% z_(u|5zPaeG_IjpYp zhjo&=juFp1Q2dy*&)LngSxz!3fAt^Hu}P<&$n#6!t-d{W&;}+Ed{T=^RuK#SR5rw} zMdx4-vKC%3`dJLc;ILZSzf&M8-j;Gnk(sYPXYzGjMP+rar-cB81UMK$E2l56N&tg` z218V1kjo-R$926{iN5yl8-jKYC8Z@D>7B1*>SU2o70hUp#sXEeZy1LToCACtg98Lq zao#D<#W?En<(IQrTC7B);O_Rg4d7!|Pda@6SK*PstW!xK49NpCrCG1}jG$@@t9if4 z)8D_zx()lfxE)4cE9S`;fzRf{MF2MT^Gl$Ky2NK1&6-Yc_hq4D{$Y#kZq>+lY)50x zkXEq{XH{2l%rn}?ml3HjJ)Op(I;iNi;o)FpFjIuIVu1ZGdHKxCuio@bXVb;43}js9 zDpZI=bH^JsZ89=)3i<+G5fPFQ$SHgksu)EfKleecO_Y~!px@x4i15L8JBNFqK+&5T zkn4^kiC9Vu7qobnG1S{+yjJvl%>dQP793SqT4kziSdoh1Wj#F7j#Z4QoQbPl*E>{e zTwKP6BfB_>f0V>gr1$*l)mG)nb^8vjQDBlKoFu}n7d~x;lHwjU(ZJNQbGEA&i7Dy6 zGn@j-BH#nitswzVqP#*Qo9L)X%I})_DNW()fy1by;x#8EB}scd!sI8;F0G`r)$S88 z?x-8Zpag!;4;jR0#kIjPg!KqB>t@bSz`(HT%%Ym^EERc6`NGbH!EB=0{{?b%$V@x} zV0`xQm#faQE{{=hYYzPS0|WopLC%Z-&hF z;oxrKhQv|eLuQldSZl6+nvi+Hj?Wi8UEyXTnb6tTRMfIDJ7N=y57*I(ZqkW-)*qxT zEhiz`FQ*VuI~-IS`$FsLs-WfT4nX6FXX?=c08V5|9(Ug3tM9ybLEwGV<@0OrGrD;23|1{VmpJR5pV`1bLA)_ zUK0{xwI}ks4X#Xj$Q4I>m!PoZ9-0Fhdo#A`AVs;>OQI`<2uN*kuS1^DuvsUu# zgVu@;z+hF0jw5;n45BT(rARvHP_wYO+|^c};N`aKn6k#QEQVGz_94i?bcFo#`Nf!x zczWq{vg2Z^$Ys0;P}D(^K#VT`E&F2ZH(2)Qfc*lDC1a-IqZ@N7$JC3d8R&Q4YLf^* z^!WPIdt~uSMiBl7njXK58bWg#+R@~+D0aHm>v6RSrWtwK%3E+_T}r|=s$AEw**r&a zoxgC8RiT2VYyPxaN>;Q<=8!POO1-}B6moF7zw9EtfvnyKvh@NGF{!Vzg%N>(2tH%m zF70>QX|VXFe;Kshlpx$PTNzq6MDq0Rr;Xv~cBiHBp7TD2Ac-}uH4BwBxbg}{4!?xq z)K3|3@hWOcOtm=u$X|_AwlT{2vQ>FH-p^>#k(UKcOW<~>=s!ijU-T4%@&2Q*z%082Z4ugR=C`*JuW~E@W-}`5ilG{#Pu^*#N$adOAXnW*s-NTP%s=Y) zD5i8N*txrdgM;x5>i|kTm*;}L?AE1RY!bce;wZ1tOq|T!ZUHS|yFYlsIm7@8aaLgE zFY>Xw7}Glw>)S&oBBt0rRVVpd6<(}S&SpU4u~a08(f_xGiz{fF(Qx-uMIIRO*s_Zj zMxGUHAArajHaH{<5r_9?CI3A{NuV!@c%lhG9vo8)a+S2AuxHuOKRaQ}On1?1*6KI_qaXV*T!9#XfS;~B$i_xk$B_S$?3jH3OI4<1&C(X{$u6v?b}N z9C&j~$G_#Dkwhu3hV7Mvh@PHBVjvy1v&)LzuR-0Nu3=W z@3CnP$tlFK?|AypvI`P@dhKXAB6X~?Fgj&eb7ohTS@8?{69CONYxcv^F3S!_?^hDv|RmyTuX-$Knzj z^k!6xrrip3kjK5N(41Ow4ar9MG&B%vt=npZjtvq{*3afNh=8w%URm!RS#166TlBrnWb*%41C#UvRd@OhVb?(W-rn*FkH(6RwmcYT7PE%2I5Vg?BO1i%@d8l~&=xek8^uV$51RFd}S`|AH~mKkE$JVV3F)Eu+)un4eC z4c>UG*vnnm3j?OupW=KI5xc?#hNb@%m=OfY657bdjuLOj-^>`i=Bgl~^xNwT-wC(|q>XlikYLAj|J`2yZBmJSz< zS=q+nSj{kogcT1%&)+^pD?|ygZA6+{uxyI+SM@IIVyBy*em;@367Or5X@JUAP zkeJc81MW6g_MNp(xz=4z{c80ggJLaGa#Dj7_ZM-L)&K|D6W!79NkyR82vHor_?;r* zTb|qA1TK#??}W)&e8OtS#d2~@c2ui}6#$KUW}XK{vStufd!p$o7Sq^!vPxODGIpyHYvwr0w-z0}Rj4;V@j} zN={aCsfZSApQD*Zou2bnuqipXoBEZ~)6mQE1XsWlL}wk&k) z5|WZWnwF{B*Hm1Wp_nem*~1&5!$M~hH!w<_fOY3m^ylwAWi^4B#|VD=iP04)P(yvy zSHCj_3K9XUe>Kz&%JOj%wP+cl!a}VS;&gvV0v9kNW7y}IMFy`~M>JDPyW2q9?VIhO zZ^l;kL!e7Yc%r}1qt#&#N3fY6X67%aZg;b`41b=;U&kYHZ#*soRO_#$0j(~79VY}l z6$FD!O9RKFl`9n$4D43PKgsennNr7T14dl3+QvD?7@|#mi0^57gT_^9BB3%pqVyLh zK>OpenbaZXbI$ctV9E3OJ~Pe5_iZM&Db5K2Dx>BL`7lSyjnz}p4*riI|JFnt= z^;*^oqIM=m&Zw7_Z2-2CM3xHA($ykN1{r^;^Ca&0lapF&*}dRR(7y-C+t(4WDhvGp z@%mD%zYY}*?c{V&QI6TVH*(@W4d?;JifzwjapEtXSPYkr@$(BvA1Za& z&VFc6f=efomZcGsCj}9WHY@hitd4HYN%m^OHaS(z;9wKOSjyo+`p9j}RU4hzl(HPb zg=7Vize_v`ZvDKx2{@4SCpg&CMTV2=-W3!0)JrIRPgT5_b7m6Er`=n<*TS$=lMSdi zws2QyP9hc7t5oUJu`CTr_y-cLWp}z2J@O za#9IHMI>3_@{mtR@IQ^s@GeRqd7P+Gy}cn4luN|s-fja3auro2si(qo;Sof8@s79= zrh_BoD2A-5xoCshuUFJ=6Q^U3!#fdwX;hK8U+56K&*6E%q&Wb#lgpi;^U2Far{RQQ zp_I7f!Q5cJlO^LlyuQ3tos7YGr;lqd=c3Q}Ysw7ZBA%0t_KRX`tJjlW1<1XJDUV!*JcOrY?3ZTM9L z{HUV0smU9A1WPy>d?`b_)vZsD+h$tfEHQ~vyF%NnKhe*D9A3P_^WjjrT z5;;l8sSyqf=Twxiv0>76UnxHE6mWG+_1XG^TmQ3Bx8J#$U7wkN7d%8Vv&VW8kNWm| zrD{e~|I_6(sf!dETLq=+VYiqJ?Kc{%AAf%U;qRIH=0U2Pn8|8BurN8Zs8NWox%Ao} z^np!ylcRwNm45_qp_?%J!$gG;E@<}DK#2RvqGl)tjbMDE%gcsil8OMIAfYXUw}6%5 z2#&XbrE$RUp_D$v$T5+|@@#{IMNngrnS(_?j}1;fB@37%V5ZP{;8>nT7CF`#Mo zJu|{zDf{m5^+UiuaR49@H@FB@oz!D@Bw?g2O#fhlJL=#9-dOnQ2OWjCaw}Zl)MSoQ z;wVE6auMtuf-8H0VcOlTpkH&ui`hR8ZJ;{0AvPl$Tb8=`qY41le68y{d1>8Slre7e z-0RYnYWCj+38)K#uy%kE))-MT?!rOOL_t+GYtd;*!qA}wbhD7IuQ}ryP-L*o!+bRpihh!2qg)QDu|pDB%EVpIS*T2^&+=#Mip9@*4mvi zJ@K;I6_$=q4%j%iC~B`M$Cg%dMc0Asu8fp9P6!}VrTki_C5}&S<0(xjw;p_dCL}Gm zj>~yL;yfj<@_`OVQ0z9fR$IxiK1iL|V?-r^gontQjbkE8=%6u6+2)M0&E~98v=ynG zKZBXbXxPKr0Ri3{3?RiRFRqTXG-H6DcUyrQLKoa1_0rnLWkZPf31~ZlT1fc;+p7E< zN{vdqPh=h;HLvy~XXBeP%Dmw%>d^KP2jx?;)uQ6!Igkz6g(1TZQ}iuEoS?ESt6;iA zW9)})QX*DEg;O!)n=1gpyt788HLF-5;KnP4$=-=Yo;EFNzv52JZxIQQN7S>zySt{Hr=PP2G1_;`?%v$>x%f*D;qi#=sJCRMyu{m4!aRdH$7^^%t(% zWhISwuY`D}OA}MKsR8R#Vf~Pdudi>4z?$y6)OS(v{+;8+B}2ROPOf5T zQsWG?UFPfbIoi?Ss11?XHRU!5d@n`_mjNxe$Ip$8Qw6ufIl_J2*$Ngmc$%d0o;Kcp z-Q|;_xA(`u*&rHan#-yR;wdbR$v(2Y3Z1ol@v#0$Tds%uZ6M~mu@8uIxkxf6RbIK2 zwY_Z74s4qXb zb)zxopYj*pfc2yA@x5Dr8jxwPtA$A^R%2+(C=U3rJb`9^9m;uz?>CnJPXg4ygzW(0 zZyZMbF4q0a;*F1f3*-8pOV;}*508wLpbkk^pev@M{}q;JbY3lkr-AE@rNPsyvym;g zcyCZilA|R7q4z-rhZkq-#AwCol+mol?L7(kqGu5er^aHCGyi?O(LYu++uE|1K6MuLEEAxt#;fqK;@K z=WSPSs}VEH)W5e|x+w7qKxv~IvB!Q2=J7vkZ1!Z5kx87E_#%!_QLQ;!f3DnSz7IM(i ztE7J%iUavBY6)g`V(yipX5q>)R0f?tb9o$lTOckj`PA7E>VD!X>5eJ>h-8z9lnQR# zEZrObVy(DA&aq1Dpp`OhY5s!2wLi$j^=nW$YqsCwo@TYzwyXTheG_~{y|D@;zIL4qmt zegG3zO9=w5<*qihB342mDbpt4v}J7JxNfID4B$Uz_pCVQxtPOoF{lDt5z*^b>suepFq<)UBHL^UbiYO1CcMILe~!X=6YN`Q zlu+RTIWCE#OoOIhGwB(-x{bGTDozMaX^-Heo8zQPInK9JyPSlmAa}ln82sq2+2^gPjBWXlT=w1dfK)fRhxO8Gpz zPK8s?8#HjiXN|l#_|y4Ph|xU3?1cZ9cN~4?3lq#98?a*`XFY&cLcAgv#6DvRyN4a09+YP$m+Mu!?ef;}< zGoHVfzbhw;rjxv(58qw8%y)vQ^6N0K%n+3HJYS*;Y&2a& z&AY8?Uh%&qM`YM^DC?glANJ7b5OC%|srOPH0iVY`AV^ZnFl0IDo${Vut;37ojk_@^ z*dDdMTMs?lOeWZb2SM%+SbQ=Y$6Fmv%GqeY&0VuJr8+x7H{H_Z-c*UJpBY=`Bi7+z z><`5dKFeWb-P+{!f#(OO3Tv(He!FfU9DD}vOGlVU6t624k#RH1hHOs>xfY?Xcm ztlgMl@;aR!@&P#iX`VI6zaRI_UmkLp5i$_*QI)-h{H6f~j}24o8mv*$%4vJKrz-!u zD;Bp|C7W5Em@b>X_H#L-u5vZiAd0FQSeSZla$*%BV_T!!-BWK8FBS)tp{7pov9`es zcpuc6*x8rXl^!@~#L56hjZ9VB>bGmqc0FKHU6^h!a1oyxYWtLx_&KBtvD z_+#}}40oM*CHsoACy~{J1Z#mc8}kJhbtfv2Zm>Z)27jNxpIPj$E>b2S`sni3?sS)3)I5^197?Z(Rym9Cfwxv-g#{s^4qoPl z>j|%9!v-7KDJDi%E84CUvLLP1fuA^bn5td$3?U$5Z0!8Ss(Ze(!}N>d7vN@!o%viO zBkJlU)8h*YDoL_EyJ7gyyk^tB@X=g0x2*H5V_;le{Mn!ihW@vE|FPuLq4fu$Zv~48 z#@HP*j#W1kJg^O9Fo}V02%Pim7uuclD{6hj_AS<19e~TLzdO(w*h`-s{#{-&v9vx$ zpPiedb{5KMPWHqBe%*ATu)L>c_qWXn$;b`zk+DThSRr^N9Tm5%32#OwO(t7iiR|3a zG;*@*6w^T)Dh1ulzAfAVS*?tWOjf*#jLXG8${e zU~O9m@abWH>z=NFoU}~_>=;!4j@Eq|=S>8`$K~yhg*dqlqw9L>bI}bMO{^2RfR{Y! ziIh%5!Lyl%o^8Wt+4M4J;Hg3vSBPz_;@=InFHglHY%KP8t$h!FXRBsrOu`WB)@73| zay?F~q&e&v6f$+a!}RBi;;9z66*Y5yg7ZdXX5x~p;LgC6JyYtkB-XTa+_+#`_ZUCd ze>b|Js*3Q#P>4p#s5xx0Bjo(NO6mKbKYvhBtWz*_>b~u=IV}S%nEH~^WvFeB4Iu*f z*@=G&=amn!QMpsoE7!>-Rl|yBQK4V8*SDG&eEtS=VTG7}b{`dDcnjulQ|fW_@PJiB z6StQe`LK#%)w^#y-1K$1a3UzB40d;ab>Nv9+ADEPJTdWjA*DEE!KQkxOJd!^Er7kQ z6Jm!|$iJk$dI6-G66jPunESV&f8bIjlb~AfvE>~%LZjoRGqjlITlM9|sSyQ#-f;PY ze1U?R78PGdsklOS-}&M;!vr3Vl=2Wt5mn!0t9{=a*=g$St!`4p&EP^jWMOV!YfjZy zQ}NS^-&EPhLl@%5>)tfVjfy{h`bI5C9_5r?qM@7hW*dC06920R4DYbSTmz!N&CT(mp61JLhWaj$Rj$8IuU5dQ z46d0gSi(UuW*y1O%me|JZ!Y&A61N=QrD%W_Twn~)!1?BiRSY?O%w2c{ezywv zMA~e*!G(sfXKp-FicF2_d*0#09@30rr4bN|b_$so>jaXPwfKjLbWG3`cD40EWVLRj zqMX>eu5?1=Z1R&wIA$aLmmkDV%%o3=dh?*4QlgpKcP_LP$;=|(44W^zlqqROm}17eI;G|}9S>4g^TqI(R> zXfDG1QoagSH%r|}0=ytm21Aqd(Ve^m!6!NkW!})IoWZDv64C?-&?ZVjkjuyW`9AAir02Xrdnbs53}_n}K_K8WA2&`r*AQooNkDwJPm5 zBW#0i@0vGiPBpdoBqYp5G}sQ4nM@5n_Q}6K(L3{!aD_lUHs7+LJnZj_&Y{ac{{;L% zuOt(oDx&%6_xu##=s7vIC@Cd^)#+pXjB7$CKCA1f4rXz=mKwnv?Ck96>7`ON;Z~o2_Gw0i{s|ydP-+4UdUS)cD(ERA-qNM-FNBJ&ebEw^J(mGL%VnvqpDiGt?^UDPS`|lNJN% z{6X>8=2vM&dPJcIQX0{PW$%!DMGF_eWYp+7vur7>y#$!^=$52-Xv5#k-xH6-xz=k zR*hxfH3RC6sR9?fQ~;s!&pXh$o!^cb4i>_auZ*gq4cDfm8|j8kmw>dCbcb|zcO%^(T^o=t>Fy5c z2I)>|kZw4`d%m;Q_mc%bHZ!yDdG0Is(dIavazy3ceD2O*A~rg8F)`gn4dWW`b%spn z6_QeFgGO969mzq`ImIEc#9Iq+uwl|5%!)6Y`TIMbEL4`+L{j|W=AqIh+XW4j(gMO_ z1w@mW877Fmb*5ajakr-{3g7R}3MF*{$m|`{sqGMw42UXp={w|sj|b?Z;bA7I4M&&# zk7zD|?VJ0^?Q47qu#Oe?q(@da{(h1@LaH-&%iJNp)sYjVPA9fco;#)5`vHFfKfr1m_sfrtR1`IWOl zMeG2t(fvcw+s6TVBqiqQ)x5mC-Iu#{YwS+4vJ%BZ4svqgcHn&o{dmG-h?Zv_ZOeM>Moxa^nmwgZrG7>lnmM)!Yb`#nkxL=&p7z{mu2MK@P* z5JDxh+1W>N0C}m$zSWc7x4y_nBHm|BQJxq`)P-!Fo@m?Ufc&oFLjY8ptUJag|yVGG{4dK_d$6?fFm#XqXWvt_4p&W&~~60D2He6l0OLX3{^5gR&&FfLXd+n;o-M z5|gdEt}(Xe41)TiI0l`RR9|~JR(|d$hjr3OPz|Ym$)iwzDxe{52Y>l}GghBJ6P1{V zg`3Q(A?7p#3@7Vy-oxaLH=>=oNdd1J&Qa{Kp)@{syVIj@baiuQv$FQ7{Gv|4QEhj) zck`Riz!Sx=J*aXze7e?jH28&!E1|B~u0J8SZ|`oyuZpT}DG%k!8UI`g#$+>YzRp|$ zJC40^X&Vq-*aU31*oy#1G+z`vZ>o!gJA6#C3Vdu>snzW}sGz!cL1w^h7zE8l=hLfK z;Y5@3zI++PKc0uGrVa9@4M&NfIb`IGR!jkRoX%M8X&k~fDNf-JAcVqKReF}$Zr zCULr06J&4N7mmT^&<%03ez`EmZjOjx7zzMIQEpM{0#}0fn?dwja~kHS9LSUV2#TNo z{KBw6foIgJmpp5G^X0%bSl557e&%aGDlHpRZ%V%duBsh#14%J(UNArbRF7=AUunvD z#!2MGI3<-f{9%MBgfIff)+<5QJU{r@98ln9QBcbg>monm;uJ^e-A14yu=_5;1`W=^ z?>c3+OivpVig$RH+TIZIDt`qsG?M!G6WYyFcFFltHG3ygSM!d*j#-%Kf+M4}7d9+P z(;a)g43+VzzR*eb&Bj--JmBP#nCRVG`~{;fy;}PPRLwSz%9AyGmay6@5SCnZ z6eZ0hwY~@W5wjq3r!QGrZkKKUvbjflg-*v`{J|Cq8^_PzisUO?|FU#kD?gliP=i^O zOU-qCZsx3N0OAD`7uVcIxym-JTCBt~A=3hR*P%RVg(f$u5XCYGLvazv`u}eKdJGUF zO%z@D8>44uXY`S=PwZ0z34AKV>?#I$v(+FQpv_JWBkJB~$kyxbOtr{B$n1A0N-f;w znhK0DICVOPDmMmEMJ10d%6Rj}Bqw%fGuBW$&UMf!wx|~Hea+*ujGimHz3MCi`SRGz zU))8)!yyWh{x6M#7D$r=!Ia;06`GShl~ibUoL8w|}k`BNW#jV3?bumQBsU zdAO5INM(A5nj`+USTlU4tpGjVO` zlvP{&KdN*Y2a1v5H|PWX?@O=VpGpDO>rZDXgcoCTsWUv+RfjVBn>>y*lJ{lmRm!`* z;MvNr$}0X{q>?H@ruW54nD`jv6R2(ph=P0qZqY=GZQ68-PxlWpz=mN0aL!aozW1H{ zwVvaM5s|tKE&qyII?TI-XV9J$55Hfv&eb}OOY^8H(w@C4{<*w`i(t?O8Yk(Yc(a}F zpLuYO5C9%MVQMO-v|O3v`SsQectF=Hn@Os~b6nrk^ii7i$jqn1XbdAF@MW8w8=8Vz z!Ck>EZPFi9XwsT=bVHgsh9>PKYZ*jt!kv=jnxX=@Hf?UsdcF7wk|xM3Z_>TvRs5qm zutY09gSfwuM}Dp#z;@!g0V+DY8YxvcMuq1~872OudtJ0Z8ka&nj1c}vRXO-U!XbWn zK~&>pSOG$-Dj*S6Tr9>8SZ7npZ` z>I*9Vsqi(3Ns!PS3M0`{VjF)tT$9y~3uk013in2&7h_mQ7Umu>iw3jy0mi*ExcH!K z?Cow=W&R(*B~)ZJ_(xCR;0mDLW8|GuU#r*S3n9B&Ix=ILzw9Lv1Nplh@%y8XjHv&xxWboZq|=;DvxS07 zZc!jD>_Gn;xLS~aD6E*78rXw}Pnvc}D@)#umP>=lj&=^6XkILn`|7~ZU1o8^M!36_w|$zsG~RTR=9By+kqD)*!7gu6$cSKM)j*FD|NGg=CYsK;hd7n(LqJ5i8MB9JBU62fTvW)Uu%>d~pg zeZy8*-N5CW-dCwb-PSlDE%3284IX=*<7=o~DhN6>R?YWz9>rRCUW+*l?L>Vqj#t7Z z5y(K48vF-8{N=l7W4SI}*e%Uho>8$pqemfZuY~&$mjqX9H4#q}0Gjw&`H@${EJCyb z$U!PWpf5#!47eBTnw4a>IMC3(@*RM&vnB~TYkOah-2jBQ;+wwqdX)xUVBz+|G+}^Fri@{Z%IUqomx{Oa4;j60?Q$%Q$37?_;Ant zsguK#S`r7dn&Srntm3P*!5!Am0_t&$J;SqnFS8Ck7pcmDvXkGurlc3iUg2zeU=J9lhc$8c0bA#es)-v zyFf`e5>f55OfOi=@-{LeKPdiQ(i+~-n&e~i*szi}ESFJ!RQk_B`Ehy5s;=9g(g_^; z=C7SKFP~!gzh4(4_j8zCQrUjmu0F|c2u7yiWxf!FqyETW%>{Sws` zI_xM=&>9Hr7H71b6BMXqimV=lI3y9>r-o8;^2#uD%>gvJW#1}tcJ^bGLv-_6Bio9a z3Vzp&!zz{4H%k%^_)bY4Y2jchoSt~ z9*oRVwlEbqt%s@s-DEWZjkOn8atB~97@NwQL5J4;3}(&{@M-<7z-FeXs8~^olw6RS zYj02DoWag#`iyaP)pj5Bh<|ZX8E6c=)T>NP#8i$yeDV@t+;LyVkxE04gtt(5I zB8E2MpS~K$#n9`Hr9NOL#&WH>Bx-eeKRDqF`nG?!mv1bqG9e4XLH>t_sLR8{V}+^2 zp*UFu1VpIf#P7kQ^s4Z;ajsacdjW_@!m>YM#Lna_<%-=BLc%$a%c0u#a|uj;;Msmn zbCMrKcWau4s*ej!w3ao7CsJpwHqX)cK$Jyj~B6({7bkUpVdO-TdQh{pu&r z&se4!b`pmoV04@EY1~TTS|xGu)^g1bak>S&wbl=bBZb>rCu9P4@-zH-WwP!6F!8?_ zA%85ZGsOy5bNm-kr^$vub1f86K=LmoET~*ewcWy_-1qm;aFO+nDL z0tGJ?JoDERGm0VOt*xz7Y1>gJsHU0)t@HnNcmBizj>5detsLP><`m-3#pR;4IL4o4 zd1G!b5^`Vl=+hQyxJ4;oQI({|=^V8S(N*cAG;R;I1W(=i#!7zd5faerKHf_3{6<7? z*e>YihRcHc_m(7T@eS$Mi$+Ip{~wV@U5A?M-WNdzD$PcgR0c~juew|e3(p#;ANkG>w912 zYXD|z(GO$7r>3xXsUw=YX6*ZUftv}caOgzwB=gVN5~q8P@jQ|EpyAsq$dhmcqFnGS zoUo>=EE6WE8k=BV>JgPNBud9TIWrynU6KAM&7W6wBh~d7g)Q0703NEVztr0hp_Z() zOlpYN)5OI^@}I#{-*h5#0>-`^7$Cwln_O~FR%&z+ubj8q!AL=)#>}Y{9q|Ym3BgXN zW%1-0wWNClN)yuy`o+z29qxiKh3+G_(biNulBFM$lBCQE>r8s+T)Q<&z5tkTm5hl> z0iE`d3bf^im4h7XKk%uP@89o}L0U<>D(xnD*N8N{F^vMI07@BGI)b@E$%%&gM%hK9 z62^pC3JMCwu!>rI6io+b3PS7=yv^JrvS=$*73&(aB1)T!Hg}+Nai&Ot)b(BrR~H1J zH;U(^UMH-chlMG#PxiUe7Ls9v!A!gkpcQ;kM(~nx3%~UMTL36|y7){qxd?0q0>_gL z*1|D9NfxqT?pc6FYu@JBc8>_*>KICx%`N*fmfUdjK<9^JIJS8Esn9pFzVaUWg>^nV z(Oe@MFvs`qgOj=O2$m-ssqgm+S&PX_-&a7Fh*-;wMqBD!Qq8RU^^by}>IU77YdT`Y z0)@w0~xY4DwmkKcJDfE zkW+54ps9+^RFFBJuGT7**tH1pg9^UkMw~1W`hJfqDEviRJI|UV?jn+>s^VfF*UlVA zLOYxkiLf)y?Y8o$nt*bdDwrfD`OoPNCC=6(YZbFe_s2+S0hAT7FD>vVC)~NM^rOOF zITg2x6w}Kvc0LPgRSW-lD9j1}`)Y4}1si+8Xuv(Rj`~lL9kRIu zyBy9bD7*K|%=|*3<=4n7@_JOTQq`$z0N{5Nyt z(HRZfz`4(O3kz;g?-w8-#JA`jL^XyPA?IHuf%3W0-A=TWyE$F@cf%Nx8i|Rp;d9sV ze3ckmSYPn55dE~kyhsRN;Cs1prL@#){*XK)ljIx&?~iC!dNU=>(WQQDE3N(^SY|bo zpvUE{V78{3lit1(_CDwWCfHDSyLE^ewO{m^k`kO|-3Cd5?HU+E8kOXp=gf3MbfP4L zYxZ%-_*_aql%yF2+$xB^riJA_f4R6oi@TsLIUt!8)AQSr8y4P7<5;O`zohqkju^~6 z+w&N)DIAD;(m7p$cze-tmCL>(B7X;l7_IMyC}WGK6N!3jy-@GYXtOJgg1s(kf-vI;;ARUayOUNXEQJz5+hTkX4ev-bN#bvy&5;?pu+N z<&|0*3ybcEm`vEFA`g7FFN3!gnAc=QuhX|w)W~ArVYO|P3Il6O0Tq+4kxiL?s|aRC%ayxgUb$-wwUx>fu}aYZ@zdk5Mej;cyThdSIaJ*`q{ z77<^z>ca^uu>Z0Zl+hMz5yqMgNO*cMtS^}KHmFr0>?7zz+0h8(Zn;wTZ?1#Qs{BSG{T zS$F!@175!f;lH4A+p}iz(2tDBpNxtScs!Ymtz*~*qY*J;kXf0N%EtT9`suhZhM7yG zABmN+cJ*rbTrXa*nGDQbBEfIj=LQq|pbPBWlW#o&@**hL8^>10ykw;LxF;VSoeT;y zR#aolzB|aIp;w0RmuM;EdYdBF(WW)GbnnPTl4z?3Qu2wpkL)xyK<-qB+Kx6=cvy1a zl;qX*waOLqO=elih?=<9zOvzQcL2at>kH;H&>z;ZCr~s1I~g?86-E(7%V%=(tpXtC zYF>^z#aKm>$1=>V^D9>4@&lX@nm+J${`3x=G`@hQly>?K22cq13UT#?9?C>7E}T*> zeuot+D}ux-^gA_f&lX|(OQBqycvGHpca|0Nu?`?8l1lmv3wh^%CXR5@ah>k%&`?s# zs|A-sKVgFGUI0^|>Svx?{VVid=q#C&-hTU{e^ zyWEGEbGjwp>~$JGA}%<7@OtFk%qvHyK!c;Xi z1b$DkprE0pFjTfH|B_8BO@di*g3=SAcCfuVoUN$mgpquF#wqodl6oqXm?XKcY?g2D z=t#H4i@LH6s=cuPw^W?x{Q4o$txslRO9fj( z{V9)sX21hgU4aGv^NkZe+a8+&Yl+!d)9!UUmkjuD%u^YQ_!u@#oUhM4RHSliBW=5P!_yL`r| zq;hUiT$|l6@~EjVXaMiLv%?E$SL)~z-z=xBMlqS8$?|~m{re+vVjSdUx1$3YF}hs- zF7%vtoVI?~0lS3)QpTm*z(3?BQXxROhv@6wi@O!(1EwsxuJasrt)O98xgNJf43VrF zqMD0jN!%VhTwsq*LKSj;oz#A!Jk>_F3Ab8WgYBTZ87x}RDC1yvEmCswp7h)?S*?dm zoaWd}L}jHN?ckKY5iDxr$#p*cr_7KAHWNE;iuAOV;*n%jiSKV`#PC|?C7s{DKaDIR z6^#^Fs>_fCj!F%MYH{x4YId0=_mPgpT@r9l9Bk9d&UYbjpee8<*;w>1b*WW$OQncb zS?I%OSoh*g1Dq}`p~!0`Mj)X_pCHMkVaV zHl%IN0Nu8ZdWb?0z!?J}17crEy&LaO4W_Ux6ELPrFZ-wCh83;_l+BmfH;Gs6yR!}x zBjqYSj&teDP$ZPD>Ils`xuOd`H@CI;f5OhgOo}nw=6?A{{>OyT+fu&z@dIoSpwwG| z2JzqID0k7*(W~rX=&r5ybCIE!{&|(|*r9Fwmise83zEC?t~;0B@<(ROM!nw4F7YUA z{HS)I;;#t73}SfzX4%8a%+T5Fx(j?0kScL(A=9hIme%ijxy~<-Tx0yOrzjbwKkmf( z=hq~9XWmEpk7#W@To&DzRwUA zTZ21m(>LO>Q>4FK^KwaPQbJ|;@}*sMr^Roj%df9tezj$BsGIoXC1d>&9j{Y%Tb!cdmFduLc^GbyvWva>~cuvU8%wZg_z%Ldp3{q*Gc-b3K}AO7Sv}w@Ot8lks+*%ijaz31Kj1qIYu- zEFC9og|%Wt^>bo5HFr;JaqA_k6Sc-*1Q(kY>lEh8CO8tsJ|=6&=~i?5iVtHw4 zWjJf8^DePFW&RA^!{}4(z2xMHv6sfi&R)R97G&S<_G`C*dUya^ z285>B>N2Jw-%}+L$IAoVxJM>A?UP@(e{cXg)6-K{RidNn7n=ukAP1Z)#U;6=;4Wl5 zR`C)ussKiCJKP@1)~cGiDt*}E+NeZeuUB|}Q5BItz3}5!ka7$}EBlvW2vU0htSR8$ z*$OnpsM|70$@>WNQw`Fju$03CueK1;bgx~X%I$_t6)}*pf*@9CDa!>OUoqK=?KOfX zJAuJW7T0%Pt898{;TOgyi5x2Q##D~m5uiBMPE1T}cpRV!ubHDk1;D#nucPUi!}+hQ zp*Vr>Gr#&`A85nVF@t)deeKHOjkFX-~QVtJc#(DNG_Ka_WVbAz(m1I&bLIbJz~w zU`W|%i?|E?tMa$F3hjG`cn%XqcLC)3x!==^d$OfBJrz^JEQ?X#AC84mb!~>t3omY5 zlM0|NbV&W}0n-W@uJ3oh6mN4-_=j2?8jsAl)003^>c@3i9ithnSZ62Lc!p1sP$Int zB|$35w1b;F&V&e>%yxFto{>-3yCjKUWQndk2T}H7CI3-qMiyeB5lbf69;*k%xhnEE zJqoq7ia3Nf3kL)tC`l;CO^G!yove_WVoAuiO7^yj=4EU{Ch6!fX)ja+S7p)Po~9iq_t54qJWu{5f@Ti!U(vJofb=BC2dKrE%T5qp{-sG*Hx; z=aq}>$M>ZPbb z8hHcf_x9yp%kp^ahO2Dq?H_Fal2pSE|Hij7Sw#Ww@X`jkU(=beHL?TMR>lX zYLO`TSpuXTzo;4l;f_C#O>wIi?!nM; zK)dY2Do6;3EXpXxTHt%VWP_@m)uop3SpaoW;%`YS=C2!S=DQ<3d6;u(zOl$az3sZs z8#K9aChLb=xpahpU+d>-#lN}Nf#77OkktI@`WUk2Z>n#9)9q?K^Co6xSSnO!0mt7P z^CTH$J>7gBg7%~UgP%yr@Gp&TNu9;Be&h*d7TzT0W8)~Dft=AoGG7e<6Z0i~r~6;P zVR}^!9@rHE3!bcZv;pZ8I%w~aM`)kEH@veUo$q4763J8T17c(CLH9nWw;1A z=(TCc&G=b^NcyTj7fO_=)Um}Y&t_Z9X$yNH9BvlD2taZ;GbdSGrS{IKuh<+r#)E57NG zbwyK~-J$r>1>?b(T4^J^n-z*#75Dp)y95vf{JR_vr0&ySwQjE5zcv925re?D&(*iy$p?B z6qzHa_7GSHKSQBN7{IYb;coIoP_+R4H6GHnpy69aDo!kuH=ysREMhb?yJXAjlCK#8 z%M<98O!V`4W#Mrk)BK{FNi{`0qQy)tc7WweLM&G=2lr9D!O~t|@WS6-FEBwKu-5?& z=d{Qb-HT^ozxw7+`t+j=Nk=iH-rMhV?!wtLt)~WkTVo%+Upr=mF395H{vncPgyGVY z1t5Y82gCx^J?`)dOXuu|;9W^d9sBcKwqJuYkBGJ`?1vU3wjpNbZHkjCHqaT8@8x&u zc2w1M3zLQebG+B)lNx{W29z=9y#h=_>W6H%i(WBlrB)bGnNrEFt5>h_ul}1?zq5j2 zS_pzGD2nIG_W9xz)}J<^RS9b3pex|qrQcmPBp%!W(W2YQWojaZ#{#NQX?F_i>}_6N zL&ao*tH(mKUl~{N5k8VMZ>afuXsRianQEk{DN{>Gk5HjK;cmWa`KNN6dwTmCEQus! zmg2Dt@)Lfv#vXJNm0g>LEQG5$`O)0Sl64B5^9vsaTTUMcFc6j!!7Pv6B}#PZ>tP=q zp(;YQ4a!lC=~T(_NvN~#{#f?e=)xi!sM}a5*bFf(zk<+YSRB_BC&T%4mGv~2|NF0? zZ_4gCVKO4FQi&)8ALnuE2{SDYZhg;_^TIy|&$l47LT#0Tq#)XXb4*)mn2Bp&1*1tM z$*i}Ny2;=pZScT;p;w&FNNq@?^h|Cb?xe&qRG};V2v;Gpu?(dRtL7bf->OAa2Y-Z< zom|Z?^v0P#e+s=~NgA&B&6TZc>3rq~EnwtBAXL|+&~-ySIyj8y5`h?{{PjK$>%jw8 zYT%m6_+kF%=7sogba*2ln8c$uASO<#AWJDIV6ngiwcWQwr1RH0S2IDF;!xy26-VVk zM<67inN~=1TexWW#G9_r)e=H=?3J1rVFdOj1=$tnB4|W=n3i#V{OF6V}&sKpnSa0q=hroF9F(-7-A#~GYQ1;2m*wU7vsBEJwPDWWvQ95p6 zpE>1B^`=`mA#>-KE>i**z$izJTKrH<0oDE8tabedQ$Gpk(u!@mYi;JE652_9uH%xp`lRN2=1Wu zrQZ9sRDUU0Foj9ZwGO`Oh$Le{4a>=&!>Aq&`i;15@g4KTbE$O#c!cjeSChA?dwovk z|EmJfsWA$X?G|OX1ytgfgQR}Nca4vQz-ak;x!ROZeT_b~;C6=bo|FJkLN(xa*H&|J z-=etY{>unifz1xpcekhm6eO5aC+3M9K?~_3@%#P1h-kI-3;XcGAgR(+R8`tH)Bv^H z+BJILH*iiYfYBr?e7fk{=cKp(@KtkkBO0qy_BG%;Y`8k=eb%q8$|U}&4)tpatDjf?a5KIa8hXFbXM1QfylVuCJvnBt#mXUf5*QGb@<{@99>Ah!^dNcw#I; zwyy>W{i$(ZurEbwJCA&~Vn|!~ta660J@O-^N4w{S@36>8CWgCtpZJ$dqCTWaT4wGE zj1Ev54a}YDRLL&3pfF3giwrE+ zi!FM0XZg;WMRsk&NCod4$p7Z6JrB4f#%$}uI zNJRw3Ku(p-dF?36;MEh`oQwH0lihl)SeZ>GqD4oACWgV6w9@JF;+_JKwfIdRjgXCr zD#8wlfvsRirSJQ=_O-djc{fE8|A$<*EP{wlb8I%vvwf-ceQpX9G;W<6QqbMG{TyJ8 z9?_Hv5xxn{0=xtRl~{;!NVyiE&!9EDN%ZeFkdj)Ctc9ba$7+I2;~w;B|KpA>pWOis zH3|RMO{hCX*w73jT^esj45+UX|KJjvtSY1AnM@%W^5i9171Oy5J=oAYjRLAf9EQ61 zjX=VLpeu#%sT^fP2^K^CclRxEMgUb6v&%7>eytl02RE*sTOeT$54}q0Z?%&gafYda zS?lv9#?m)A8B^2@dKFTFS91Hz8}$fzCP^F*+J5Vb(f3D%g*5SZJ96L zPnfq%0--MQw(M`F@5&^ZfsPTyjl+NwK_hFKKfz4ed7gGFM%CgBHkm8d2B#yb^%l z0s=qK8xO+&6z%QO`yC;*I}_4qcX&S+7%#xnT85Dy7Auw*nHG|&+H!ZNxCtLpmbW0!{Q!@E zPBtruZUfI53WHqP?5?fGqIP~W`?hf>Pm>)2D$8KZy#8A>w|08k>BHyMc0NAFwc+8B z+FhDV%dYT66LS-djQw{0MsOr1dp^*UK^?Li{*^+J0cQ_e<_Dt5=(1|9-=JFkACT`> zjk3xD#S?15CT}V>VNU{;%%?7`f|&kJ6u2672zTy-ui3x12&Viie&6H@qQt<$Ix!Mv zu-8s1rTLHTZgH)9f7A1L^-Naj_k@vHkm{u7F`e;1AmP$Gg6td-dk|vNG@Jiv>Sg%> zuYoaQJS#(lh+RxRlT|J+2#U3ldiacZg^B>dV24H)<{uyY9#VRDr)rr-om)Y{aIChw zBy+d6nSUA&t^q|Yrnf=fC(Vj45P8)83=qDD=+!1^ioDYh*I)zzvqu?B8o4-wBoVXW zKCSx#neN91K7JW+)dtyzYB+i*5GL24%k$#@Bazm`BVL5cY2t^wp)dh*66Y95ouFI#UiMVNS{z z#i4+TI$D#3@2@O=mUlF6Hi^TbtD)We+W1!fOtlNyP=bUZKDteA74#jpE9RZ%wc;P8 zo!qH>KG;l8(o`RHFMoECok{odXMWKd+_jJCIbF4 z!ffr$j(cOKp1TQ(MfZHXYeCZ#!4v@=Byb~{o^*GKX(O%y1JuZR$5S6PKJT=_!cSJ) zQdv>WAgd&<)eg^&k9+&{VWmh!eI~sGeq+e0uMQix;%47AGSuPC_YAGYU0-7in)orwv`fekb9H_C9(>)OdK@M7SPG^>D- zG8sxXv|^vv>e`~D&m6_ML=*kUT4v~Lzt z7Phv|&PLOYeOhO_6(Mcnqa(^?8!rKy)d--Wvuiu5zI*S&gBsOPPdN17#5W6@9@>5B z-$$;SScmn9m?7-ONt5KgjVRO_QZusOat^ccO8R8NRr{=}?nH-d%a9t@oeOx(O649H z-?dt7mo0&(x@bG;F$mz9ybA@Mi$1L6EjdN(knbkwGgX7$OES;)f(J_Uq zKEn)W3^;kWpXuiip-%dZ|KvDDg*g^ztiq*O$;g2ztDZc0G8h6zAroNs=;FPu5|Wt2 z>|H|$2xAnpB-ZZ~Rl~xsu-S|Cd(LNzt2kbyUTOTnzg*pD>QlHg6g-0hgL9=v$HLM? zSRoLb3#qLp$M?$MM@mr5QC~&5^ay6rugog(=2W9}Z~+ zxzmDpuv<>wE?#|Vd>G5k#`hS_5hEuH`7%H~N0R5zAuQY{_QrCxoOanLA`%@9D6 z(jTM;+kjP9Yb-O9uyIR#Xk_`+wjus5rzA1zGwYL!?Il|*kg=POD@S3ln@#kUOcA(w z*SJG0TyW$~c9#ZpLNy+cE(i9dqd@52KRpc}M&cqRer?5Crtksecsr~Icf==?-ittr zuN=7L>aW$`iL;MqLK`Rt8h?epA1tauHNpp*S<*gow#OgH2x19Om{0KOP4F0I5iPcA zB7RHk>6-)b7|btgD5G|{Qi`+CT!@>7lqv8_O=Pi)tU@^Oz|R+e?uCsY=C{8Jc`yuU zJlerGPE3v`W6QmHS$7}6BRYU=IrlzLS`;3DV`#rv2NKdFHp-mpq=~)#$NS!CTgP8&s;mz{V z$r|w&5(N&V5^2ituopHQ2Z=AaT?+dhIpVm7XGkosWf4SB@Ghy!0$J4QA?UXX{wmgFp~-&a{RXI zN9ax)hfO@!^>}j%flb5$Y+=8HeH)-i;;8o8uO`3Y_r!mSv%~`ujAQ~@W@ePT2I z(_~W%lc09ePqZtiK17Eh!(b%T#OzO;YeF$&+D@c76G5OxCb36pszgIX+(@7b{(h}5 zxFcpJz@ztPQubz7)Cn>VS7qyNH(}y4*Il@{K}?eK?22^qYS-5f#3KLvStYq*tFr^r z#`O!1U>$#;;tA8|^@p*%YwYTNAD}4A*|m~5+x$7EH;Ufw3Q+9~l~r|?&hy``I`=9^ z+``(Zk_RP1G-XvQ)KE%5*-V#w-7i$VUp*blF?+Gg(NCk2;8$J;v_088F*dOZgM;;! ze^d@dDvK&hu3~zv#r?@3aX-eOjX7k5-ntV5$lR_D}iCi#P@2A zAngU?Pn=YqqZQf-%l!*83V3iB4^)!LQXB3AorUs@= zsdYnH{Wgy_Fp^#riE&EuLL4bOF?^L0LcsxuPFGosu+@iv%`?S)!&Cc%mXG0iXnJ?$ z-af-tO+G|8qWa0yk|kWXtnO3;@p}L86`q|W(IpBzR2w*3I+Y$qBT`luS&zKc*+QYc z$PT~VY>FADT%Q4TW=lyFH0#*;UzCyTCB-63o z9U8ma^^4pAiTkXOK7@8V?xEo0X{NgrDkh|69#A3h{PnEmywfeccE|BP?M_)AQk#+V z2?H-v-|y7*zTzmk>nIC|6T_0v*jUQF=7syyEfj5v`YSZsHN{wu3NwY&^IGWvGr~-* z8^?#MNH(1Ui+>Fy$bfbAAt-5%Yv^Yl8=cr3T(kXLhsPGe;OMwHlX5rBV~Y%8q+)Jw zK`HYThApx6C?rVX>rDM6HZ_5+IKj73dC9SJ{O1xW482FC*5DRZCEil$Oe7xO3Wh3UZ-`*XeH zLEo;dD3JQfjJwJ6{&}FYwKjRs`S)svHM7J|(n9zFI$A_B(B)@!n8Qo(5({nfr+Mx#tmhh3q*DMj@FK&hqB{=exVD{PF875AoUH0zO!Gdl|%XUu!iv z7T&fvk0mex7v|XSE$sPt%{{JgpQVWLi_|X#JW4`!pR!t;V+@GPi>nmledaiX!Lg)_ zYZcX*9NIUs5d==UK3{Xp@iUC5q3;k0^y6~MC^>4n zl*L8ZFLibIo_JJ9EwM;g@zyMH`oTAHo zrd%`cAFn}I+oDCshSx8F9G_HxZxM{i(0ew1MI~$x55FVkCtA6`zpxq9>dm2QAPH8- z1SqY;nY?iE+YS~Fq=Bl?QfWH38y|^ooap7CoXN9DfJtL$WH=k$N3Hw#U~_h4*?9&er+6ld21kb59QdTXo=F~LJs0{Y^m+UCMnNS=n5RTxNYjHns06L}e z;+ht4+V9WHr&I*hrYv%(c6^iDB)+>_VYBUV<-XpXR*pm{4&LO8$>rJ`WX>r&u%o-T zqT3j>6b_LF`eruTGR3zh`W?~p-P1D=_~JZahAn7N_1vU%%*l8a@M>#mi7euhChd{03S86rCI*WpgX25+a?fbkHB`!hak7k%$Ykn%YqLh% zR+AKDntrlkawy&B&YC|6AT@X3=!9DP6lqz+fJ{EKXA@Pocq-gG+ZDz%I=GLL{AR17 zC9Y11D74V3!92z=2|1OWe+f7guK#@|W*wTV=@L1;5`uFGTYfltz1D#S)$1qGRti3;l*$hHb>Js~Iz%P?~_7)fnN1Ka-N7D@?R&Uzc+ITbc&V>l@ z!fVC?IF{@Q!-)=e}XxQ+35f_~XJUnFmt7Jo1T5}7r?+nULXsePkO;xu8&xZ=J zurNV>?SGx{BQM5Q;mxGW^A*5uJcHjl)zlXx3A$6@ZqL<+yRXe9az1NQXw>GFGiu`b zS;v*@!0E>`oZUhB*Ed2NC@Jeu=&kFq5k&DI>|kNnwPM8^afdg&m|Y7J%O0; zS`39a+PT^nc6x|= zENz3|$ZPlKkMF05AFqw$&F*|yk72_{PuoZ=F1N1P^BpkruW%$DLZ_p?b|S<7L)2HW zMcK8{&d{CG-QC?K-Q6;DcS#Q|C0z;vBGTQ`AlU|u;N8;^(%W8rJ-CS&sIlo z-Jf{$-#rTz))3x&urX|*{#qGu=R(8nptxum;TB1c(r`hqH!p}7GoFt=sdAZzinR;VsM|8Z`&a+j47F=dzJn#@CFy*WyS-RtZp@Ev5_S{0 z4IN-hXoGHIAt%Hq6AOmLU3(C0y0rf0Q*)*Tbe61AfIfVZi{&x-LEd&=A+{ta+*v3($~8Y!XG*4J1Syoyzlq<8(9WDv zsxw|harijXK*rD065vED#BDJi?1{?kvIwORqtm6%Cd&G6XYO|8@JLuQM*>*AXm&Gc zxGDoF;%H6(wF(;a9#AkfBiHQnBu>_U1c8wP>*`p@OI^`80i!wC-YS%OTqJK$-dJ$m zu*X}p31+4D(p$$5XF{+XHyXqOvvd0YuDWE8}oICc| z+_d{zy3L`2`0b*lHA3CB?PmIg5X1a;J~v*zBxDj-TqXY+D^#8?-%SA(P>6a2KT)_c zYx!8@pZ=E#It2P5^jp%Jh}yJa<}o}mh&ug%{0MTrtVT)CU1toU6sZh;VR`P&U*tgF~4QYWxpVtn1>P zcfq8mhl<;uCEaYUgO{2u%XQMY@=sZ&3kQ_YZf%GAD`sgG*J1hDIsGC*o8D+j%;X{0 zM_TYcY;|%KAL{j%rUM6(*1k9uS{3+M2^oP+9WoCN z0ZBt}Eg`V4BXTwR*-2?DFqe2B<4|#K_(%(f4zvIP##%O|cvfe3Y(A6fI?ugrrZTZr0eLQG7 zb6BN=UAT+ErF|FQ(oVsZ&+;mgXbpXBLkP|^&7!fkTz^MIR7BYF1oJd^=aBnIkgh+3 zOA$y-qVZ)B*OT_dKxAZ8dq3)qr4lQ!sjWh*shh(EP9yG-JJ@Y*Zegh7-?SVXB%CevOFTW{*KDu*{fVh1;8zK~6R9?ow-BFzy$7wH`+(t{rgpLnr zicMBizp$=oCyJRwUxAPzLQBdn$it;Zufl{BTR|H+y_JyPW z?im&vI%P#8kpIg?4l#qXujRE>2Yt?MELgZPfhDe)^E5qTYeZ;3h$=wH+Pemp%w;@< z^^GWvYl-{s9ZO0Yy0n##<0nYM637u?l|Q(AyGxoI8Kpdj6vT#w-~5)fEq7Y~k-K8G z_Nu24td_ye92%iDkl(*qKig6qiZsERUP}_~fh^~%KCGaqwN$6;J%k3sSl-!+7jMK? zHcR!-qE&``6wh8hnK3|+ewF~r>RaInrqN5?&D0GqYgMYXyw6^xg&E))r66`+%a-0f zKjY|}M%FUiV3jo--nNM1LgvXHGoRmpyZN2+sSPt@6cZ68N!E&s7gp5mGi3Q16)ok{ zp5HuX|c#|Q^E-^AMJI3zHM=58DUVA=(f=_#RSNeNMChyoiP zaU)@Ny{&)coO0nhmegHE0{J*iK*r(TkwX|aN5y%!N0)FUsg-hZmiEv|58_t1Z<-3O zYJ-`DC_RBzv;}Wwme}lx4+r1D#s?T+UWX7KdhjZBDdI41vx^2f#q|4*{nh0v?oxWsdCnGgGer}$k2|@YlIb$C?_r>SobHd49oHY=Jzke3%yfQip7gZT&g$#ohDitay zG1zE>NCRED@;{!G(S8G6K~G!q9s*hJD_~=!mf+SW7W75pFPVNr|3=m=my#s5K6r6* zaOejItvEZd_X@EOs^S=`Uhxgb*Fa(TQ(%>1^_e095XcIXi_3BCc ztEbq(ZDlL?C=5l|F9}>g*t;QZ=@NmgP|CA>_PdFr%7Z(#flA@u8l8(ZhA$6!)p#rP z3!ZTrm;#1`#7M90xPgb`b?BXUVt8{F?>A;wLCz+~8Gj!`Lb?!~$bNy2*C3z&k#=+^5Z zw-m_%m^6yN`J*g}-)tY)Br#oKb6=$WXFVTNOf6EZ6ny8OeY*6d9ncDAvqxNu1NS!eCMb~sYHqp&=yw?mZL$F z3gHkyzTt`yA#76EFwxPZ5u($T&d(ek*X4464>gPfaS#uyArQD@BBjy`m@%=8;Fhux z2o&Sj*pk7h8hZEraRQC%8A)Y3sc7t`pr}hM|@?=SV$fs?GvW@&&kU#x`QVhpXA>$Q9(n2sUOqt1eO$31{rY^98W?Z`PQ z4gpwFh3Kb9$*}xUaW$p}rS4%i3VuUCYO1d*#P(9YJpY(Ruo)oUb{|a1z57tkRF`rs zpv=jM9>ASZYgMAF5D3s{6 z?fCBG#HbVs&{~H|uqrm@147CqDO{r{GskD7aiKaHw)B#5o2;D_cAx^W@YM!tzb+tu z$aHB}#Qn9uzkhfy)0FvYtEXZv?*U~KX=;P|c3K88_%Q>KEz}ap-V7-&?Z?RX3U;TA)*SWi z<}Pw&4g7pi>}6$YOA9(tW;ys8&l#j%+mVLh~@Lty3$-MH&7?jW+NZx zbgfPW8i-h;6`U zYnhAFhXtAk#}Mz8$~po{78c2r&cjrC^)xztQ#Ny4`jOa+&P)c4$}kY~gQ?KBJidUa zr|`~YvmgiZ*(@w5h7PxqD{i7`?xX>D#}U+FSv~KrUZ3*< z;quPbgC2jKA_cJn$-tFL4e^PI7ak(d{oVGGuuTYR&A+TG!IfadDJX)IA$v;y>hU8y z4XQ3vPT}j*!OHc&h1Z|QOOv@g+ErcWMueZY>YV$GppBhLs}*SWy}vh*eliJIVa+uP zDr?%e>d>$hW9*?A{>04DWv2OrT*J$53b`ce_S!=R;TyI+iGqV+crqkL2>sjI7=PKF zE4yW2)_oLRiyzr#Ew4%q?@!l?)hA9c4`xg_yeR4{rYeiqCeQ~p2LAZjDfOdDOEl+8 zf8@rre-n0vmXDKtf+08RNThQ!#2RCS6kiv1H~QZPL6`Qf@|JG9O863%=AW`PgXO9g!7$26L-rYBw~7RT}xg1N!C3wz7qI z(zn&^Q0x4I%2_cu!Lu^~Mp@J;b1-DVd$RpJiHQEG$2W;%6H|#XuF;pg2Nj zWlvSUzYgXu=SM=^CB<2}urPGYE)8%I5lm3MrYT2m%LF6njEnxczn73BQ~a5lU7fq?zhi;|+dJ6+%@@2k1o&C)2+?PNx3~ zcdd)!P*Z-ugvtE)g&n_Wk66@DCYNq0^h!X`ecoYM8~ZoHdelMN*v#+T3sJ)k(-<~$ zUjL>a^h$yPUImNGt_4!?)$A@i?yaP6l-TN%fp7^Z-CnjwImq@&ju&~IvBqoWG+7=z zLwF&RwG|T2gt3n)jh~>EK>`1kK}|WkU&^a9L|k4Qb$aq1iO-ip+8@7_4Rv2-(jjw5 z+`qq{6S7r+AE-+yV^#!jGLbp+QZfnfQk&ptPH@umV^DGkjM`g5sk`t7*+2KG{8a_| zO&`0{@IHBXt$wR!R?GzfGZ6bnV?#|Qp=?73b}S+?XYGern!NF*GZDk}AN%{GuCG_> zOswU0wo53tZke*!QaGCwl!fZXtkoQkIO0dD5T+X~ajb`_>Yn-&-+!xx0LO9YS(5Ni zQBkqXY8glzWbyM;@VJmRxV{YhO-^W;72eu-Mp_nU`qu$C+o9lDP!RhoP@?uObsiHU zeKGPn7T^uGh_?D~TTJCUB3pPd7{4?3#X$U=GpO zFjmut*7rRv#vW@pLc#l7b=Mmd1)@DhrDcrK;fu0Q;nGDt{ia%&_)1J@y>f!ligBk0 z7pR3iN@H{B7VIo=jv3K+F!_7%8u&dL1$GF6W#svcoxTFUC^b%L z=e*H9u;Ps(^NoMX@MAd{C4<+2`o^E}ADmDaSehIi(wA+ZJw{)D?{5E4V)|}Bw6zRb zK?h0Hj)(W-#lo`^&dzOxu4@^rQJP(dm&|J-7JP#|!_+VKl*vJxjDDj|oKwPOnSgV8 zrTUAIqr5*x2nKv)kr^CG>$haI2Sd;gb|c~~!%EU162UH47+M?m4PWR$PNwM)QcKm3 zF!fHk{ehD{e(3C-cNW>)-esq9P4}^Tqq_4#nm1!(78+|C8|p5xr1QxZ}f{t zJ&>8p-@bfhyj0m=0%+_I9@~^DC5?J&{LpKj|A3oDCWp1?2y~BRoh)6z8Wl_VP~97a zb`MWE5B$?-8wP?>egOqC{N*wiIa~Ks`YRtkg^zCeq#_3&;peFXysp-^4`72&bs zi|~-8|J>fd+KrY-7L>Nij_BD+FT$l6?d4eXgr#<~KYPYyNb>!NFV!w$CuDVvNEkoR z(#FNj{Cv+WQ)++RbJ3h=whK6%bM->SY%y#gIa9jE1B z04Lm@Ep0XqTtPcO=*isifsH{~#zakm+a@7>=pJjj`a{hWL5#{>M(iX#I(sNx{LhPU z>>KXq7KXgG89(;%l$JZiQZh5B#X+KUDuf(`ntVN@qbIicgyf0Jcu)P0J{Q>ZYP7VU zQ{5I%RStEb?0oC)6?O3eXxo{Y83kpsk#`oXH!_B@8JapP&)gf6xq?F@lv>hqcOl0dhl& zlru+wD$}XT#K?;Mctj6#oYahhg138tctPr)w4a3H{tvHzNY$eSjmc#?|Py6Pa5LWsT-PL(WC?eiS$rimckm7kt-#H z>JmzdG}FJ(f+MtOZnO+jp%hImSk5fm_~WL|?$Q(I>-YGsB`r|Zc!Y9K&%)z++!3`T zu`!4Cav7K({gY9WaG5o{))&e1K-!4@H^#Y7$og!g3v7%)AzG}*r^Sqw|AxF}9<464 z@;OhXf@9-GC#z= z^en~uw53#a9XVij1h+T>NG$3RZ~j1Fia0;K0Yry5lxBx6ojS}cDEKiSbM55zpJh&S zolsrK*!NvQZViAOfGt`oT&V))K+_3YA@)q~1yIqzdO@IVU3?E-uZLyE_gA zMaUvfv^PDit{ssmx=s)KuykFb5!O&cr@Fejem?8xnCE0h(Cue%dF>fa9QU=1<|*Fp z{>L%U*=xaSzcNP$Qd_NJV6wtH7w%8RZRHW~UMPFMI^{$)Su7-?4%7MYq?Cz6n1KHiGPpkSuwN>nC` zt?)Bp5np&?l4jm=KB_d;(BF|ee9fh8E|X#g5;tOwQ%2cSNnBd6=0T5dUxl(ZtQ5FZ{F^c{%wLSd^-_@9mjeB#o&Mh>kg4JOQ)ck1arrW4;kLtVvoC>Y{NF5q z0h$(Z3`iwN$L;Xl=KD5MSQAC}S}R+d??37lzjG4YLS2bB7=^|#6Zk~+RK3xi0%^G| zO=y5oA>REOtEJr8c7=d6+F58P@HRtd=uBOlrU(>0&7pb=w11m|JZ$`|^=eBTV4JMRvkFVRw6$2>#uietY0=y>5$^l4AQ-A`Wx`T za%^>wWbe2E>LMaJb9hPpIk)96s|hH9*2ABk{r)&*F0}~JrKiM24sfoZNqu#JJXpj5 zxy}74x<)J;r{mg&(t2WFlKe*For#O1fBVzVS6-qgm=JDGFv6Rw2&%>J?3dJGH9CrC z{G4U8$Z-oJ-2SQLE%lkVPtzo?R%Q&5zqb`*kSpGgcp>aLVJL#$EpB3`yt-A+x~9Ug zUM@Y)yi^IH7YQVILC}?S5AxIv&pxRVIfvVsSDO=?u>f*?Wjr3f|Ce7ZBX)jQ^|e~q zrA#6b>us1oYMpxEZA3tj0-h^ABqa){j6?T4h|wF4SJBPR!^1-a8YfvL7H~Txl?HRc z-kM)rX3iwb4d>HJsj(k(-;V!i2i^0ckS^U=V;q%n(=!{f@R`S57RRMmNs57JY;)Vs z(8A9U$L1eQJWP7uqImqbt18?2qxf5}lHO|z@#(A_@*n<@mPMo(vQ(sjc*#-_789F& z;yZ%fvYAg{NayFz6zD$85~YkB$)~ec@Fo_<9qyZ{ileZhAAk-IYXSYVbdaEKX;{ZN zq^SzA-Wwfckd9I^hr-WB5OaBxmIYG3ir&bFS0VQX8DLxOqr8SPoSuD&vJo;^qZWcx zv9mJCVlC=^r|$hdO2q%s5De3;;3G|)#^MAa&&w}E;B=l2=$7QdVDQsrEH*&pcUTK zbJnhtlmppIP;uTNA%en6zk~)FxF;n$gP9`my3~pQPnoOCE)B-ZEIeX|9@=fNta;zD zLcF~iX8B!YQShSmpLi?a6#&Sm@DwuVc3VRr3s3y%QpP;Y%vZW;r9X~fbem@)DOF9l z)cM2Q8u^3B+r%)z+Z~V)@5=&o=Z4ZBi5w}}RpGpN09 zjWp41qHHcv;T|0y2_@d$V`gB8Qg-@O%_|ZfSvHMk>yXNAlsJnloNT_sG|v)Nro?<= z$Dvfxl^J2lMHRP*GHYS%MXobH&oWpqU{GgZRLjD^yTUHd?@e&(mzZL9Ypf=dGpl@{xl*}R$gHlm%LYFRWl6IEJG0UbKDt}@Os z4qU%NeTbz{g;Phj+-!Wfs>kDrc=meZ*i*RNsP*-9S>`J_It_j@wpPZo*SeuR9km`< zjie1j*iYIIa;wE==4Li9ZQuS`Zk@j#Rss4(|LwfDJTxy%1G1hEUuMrVU|EqTQn=@> zFV;Jb#j>+2z?=d0v48AgLRumkIuK~6`fhnb%{qs4Ze%p#SA4C_7R%K?FJlnB69*!N z#eMUHDdMgrkQx0Hjib9+J5yxGr@dVgDFwVGHKs8c>z{`DFqtGx+@N`5c|y7a4D`L^ zPRYD!7`qny3o)1m-z^5?Q->Bm>Xvbe`E^+p(<#$*E9KVtY>rHm>(YU+4P2xGtakF< z0`wR2UCznv%CS|*bQK&NQs_aA$4Ij<3UN+`R*T%=61@Ers$|IQwWqJ zE@<5YFC?|?Bh-FHM9{=UX4}fwCNvNeWaOgBgi~hpn+$C&^qU;=rJIxoev5+Jd4ung z#EEMth)w@*anB(Wkt`B9FqPKPF9K z_0vzA4Y0|hZZg9kg~-doDpz&rb(-EMJmk)YVxNbha-bvZoQ#g0FoiB{xT_+o>7y{FU_EN^h*7EqeoB z-x~AEcuAJFIl8t{{0^t(f32y991#-N3>xec+AgkWg{gRDNWY7NFd*)8m z0n+O-ZGxfr2(B3vh+D_7ek|zM$O=qeO{*Rb*XQ58i6@_N!u2H6&pz6&kidLKR=EAW z`1>(#WyyH)C(l5jr6dqfH>0Chw%Bz%>=aX5k3Trc#F&;|zAzF6TdIY8$vY}yG>ZKv zyN6%UHu&_4VK<&fZ2?+|K`@*=_*iM&%)B{on-@giF#Zd7Ky9Bqr2Q?3p3QO~{>a7i zId{JM(>y5e!qL19>&FeBq>)%_7t+kb9!E&2q!HYugFD(AGO#pZSX2HVLoxHlKE6Xe z)y#`TAYj1Qs4!tl>{*f?R8_HR$?<(C-QL+_Y6FS}Rx7*;{*-+0)b(&=+k2(nED^J` z_;HtQ!Ztt>&)+ncTjF|EjlgQyTBMs|rdLVW1k=8ChyEAeOz@*(n-d;!r1y<#Eb=H> z_Ai$qV(OAIo~_#9vVNaGBW0T!{ADSztd%8oVKunu%1w$jc*>Mo*P0*P_r94hNg`BZ zpYh~Rt-b#g&|@QuEdO`(9c`!Q1a2PkpgDTHy^n%VXs=%(D5LPRzgwm!oQgs z?^aMK9ebher<33J+ou#UPnOsl^TOF$_3EAXPc(|l_1b8V)$JFr9NBKJpuIW$VJ1|9 zSdx;mg(^d~jr{i(_=mOGL@N8x(^IFt+2a2o>+OCh4SR_E4HNMJk6#}J!E6|n03h`^ z94!{9=HvXq2MlO357&QNJb~%fQuhe`u>f2*OfKjqnYE{yA9>c>>f&oy{498C-i9+K zO#($7MK>@ThUpg)fVB&}*$gDL4X%8kv+c*-ma}htx<32#TSGaJEbA zvj=W?0dTF^B|4g#?5__CUAxsBT@}G*^|que#d)G;DD^zn45wGU?WAylVsy;G@w6&A z)IfM#N@gzAW0P|-us-bXoz7;f3ahWF7Sk{qMtZD6W}UQ2LvgZ4bn5AhLRS&_g&$9R z!|8Pbs-RXtHDI&;`Uvw0Z-0jhJD7YMHD8bBbTg&Q$h!Ees0kfXQy`Q8Y6OAzgcWIa zeV_9&vOnL+qMTG^iDUQ?JSJ*DO+?2BIe{S@-J}JdBOw3fEcrLTf$%uud3k%2nWbs@ zV|a=2r1>HvK1UQ@DO=e4%X?^n702Sk_4V~^kpHrM+^!c~{BYAC&L_A+C$OiWvOYGY z(${6ge+`Hr2p`{Etb3f4Tt?)+FQTVs=tca6v-DL@$zrMNBWRNv;vbAhDBQhS8 zT=Dh^O1zqbwnBL_@S*iaWj#L>ySu3nOEO7D?@nkDrrC@fLZY!#70@gV> zjXeCy(Bz8Hh6dhvl8sSc13mN7_bCd#(vQ2d+Um}T_UN{cts-KA55B}Tdx!cOKpvl@ zW4_rN4HoynI#t+Nnj&XuYFfz(sN{e$A4NQ@7l}JaUiEvmAuhFJohwM|`r=FUfY{oqcFKqQL$Q4QgwmYJ+ zmtu07P4OpBQ@jzXUkaLyhE3M#N=lk|fiP@~6e`9bCwOyrDQdh&$M^Zvl!7|aG~YKv z+%iR1S5{KB=$b3!;L{S22zj!k^6^3fiYZHaPCXIeQ&Uo`{`^#B?E58S(3=Xjc9DnD zO%~%T+N(k^cAC(jSoy;<-{uS`KH*5XUtKY~JBz@i1^(nTOc0Liy9i)U`EKxF+xt7l zx#wZsc&?8QP$T&Ml=x=`yI|&<8~Eo&3AGQud$g`fG#touc?V3~c6BZ@!8w z6Ez_jnY@fEQ4O`QYz5mhm3oLP9XIeeZG8y1aScg@XJ9*Y5NP~{X575)RbPQ919u_2 zPN8q&T_pO+qt%Gi4EC0Al++AWLIM`1iJ8kq9Pp!E10LZxfdQ;_c~W=-gsb6`s-#*F zjy@$;7wTTu_`bg)X&$4L0v!J)IhYy+Rdk*(8bQ}B&=!=LO}Yy6b3%_6*SMd^I)UU$ zh)qZ~7xsBQ#!4z7E?u?s==$z4uf#8$C#$K#6Ey=P_`bRtD&>>|yxe$8x5A`@0o>HM z?TubXT2x7+4ldf2~kSw<1_EDKDz{!eFQr~h=>hl!Fen~(oY zAdj<5Yn%W3@XdMlfluK?ftciB!?AmQs!Q%yv=OWkENltz&ebtCOZ=n=)tFmHEBuly`clC3C3r|S(wT2Lu*{Y^~3cMU6kD<8k+6xXuZ!xcyl2@o{3Ub859r9F*xQ z$%_b0o;CGSh?Iw%CR9_y%{r*|0_J0Qmd)kdG&DGKEZAd_6P8|V^E^N2ARsnMD2Y@U zx2ci8F)9W&1P13@bc7TCC1&5&&wT3eWn0Nf3l?F00|b57b;qeQ#DqA&eNjo}PV}&b zjJ|l>jN%OoTLDIxKtVylfOSs}iq1!`Y7T15z@aE%=Yl@J^`BOag!NyuoAS$ZX2A^-Eh}*b!NfHTIe^JTe zheb1{S45!s(}XUeq-ZXFYDLeNOoSp$vmj@%KP4du_lU?yQrA)=iPTaOeWn7%4>hz& z6Q#9N?oTln`S11?UL%eUljd0!=QKephJ6Au=#tbMOUx9Bu8J≈MEGyz;AuW0RHL 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

    =kBf8-TWp|Lds!KgIF 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

      EDztTIp?x<$23*=R+0 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 lTN0` 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

      azK?1Gm+BCy7sX|1T`xc0eBY~p#Vg~ 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�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�a@@Jxfha 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 |Gm$x!* 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� za3CAvFu&0c_-m8?RME8Xo)w_=j{x$%{zUvl+1#>0Ue%Pv;mq3&Tl-zhGv_q#%i~y? z@1a-QLyshUszT$>3jw62_;G~|`z1GB7H-7mSf*7Iqc$VtkdnXzm_R2V8#BokHD#0r^-+nbzt-{KK%@%v+lJr78%D@H@wmV7@bGcy>^3@*4f|VstAi{#Rn4uh0I# zC3g!n7rPY&er}MB-nZ-im4j&C5)92JdM}j{tSUi~Hr74+`Xp3*O&ZkgH)=Jeih<4TM8B}n;w%Cxza9bs@s29;HlCo*93A2iY8<~Mq?obFEHsJ2qnKluB3!sf+ zBFGp8&z!mj7#@^YN#6w#3g+A4;k`OpglAF@&}wmjghL3nTGAxc8yha?YhfkHJ`>dNUfr63_H3BlxXr!1Ft@n>50-rM#G{vf)c%r8&QYFLFL?_OR zwndU;B`pZH#NmCf*>QZGfSRHhy=Oi%RdoNohrnJhMBkO=07LrkUHJk16*~MY2GK}q z8k(zCTrT_6`VytkPu-L1%g|_oCmAwOpu@M`m*OjJ*c>^!+!+;AJi4Is!u1)X3_$&I zYcbHiv-toTZNnw!S0t1-BowNyug+_g{bZnH5+2Ga&*0pmTu6idNXA41L4U$T8XgaY zb@spVe*$4Td=#H4n^>}Vjd`8a11Z+?Y3Rk@&a>*4YwZdsdg{t&K!5ez&;pW4jnDdL zi7kzE71)1oG}UCMUTRK-6beKy)`jEwkaw}*&x00@Hp<1h{MpMLryVX3GGaKM0?xxu zWm?*SFAFgLMD&$X_r~4KfMop&C1Kp)EZ^hCa$ce;%aBW?=wyvCvR4!W#jnW2Se)W{ zT7IAq`0J8hX+rwdBz_c=itS4hpe?w=rirppy{&|rMd?p|I=UO>HY#t@IJk45v|>Uq z@bsqYL{Ql+cZBAS22-Jl)d1V_48H0_hIZvz=OODB&0-crvun0D(i$x3bCG`QY&TldM+EfCHbmU$5Nm;#qQ#>d;^a<2-c zS7D5}yp6G3Mo6Bn=bF{&hh4qD2r&x*Y9qZWB1NEQHk@<6Vc!!xE81InKCkd(U|to%}~JRZ=7CiPl#r-ILF zR8qwLNytN=MVLa5&v7dz+?V;{7m2;pq!Dl~;rGD?S{zuYiPn$XW=Yr2_>-W+HUwm)Rf%&mpEE&>;Wv)~)?Cv$%XQ$1NM2^vS55UAJ>TIt zl}6PVua0CZwW-Xmw1yP|gL^?q9xc8p;K{FR#!0}}MO(g0q|wcXo)x+Sd9(YsC>_;oIozzm!|NZMYzlkKf&As{Z zH|W`-k7wL^FR9O$t7W}&fI8iJJ)e+S38TtZiK#sLAR$k08Tk1*5HYGwL!po!^^qPNc0TKe54>_z5Zn z2a{)##2d`XYPz7Ots^Qq{?7-O@jd~2npltK|L2Q;oF@C)=50!5v&#(JTVfJvp(Or2 zfwT$myw-i?hxRR@KSFz$dwS)`Q?x^U&WWkw?fEe?L6c!a|9<^@@oltPdtp;)Y!`gb z<-@54yXY-8;W+t5s=smPmz0R_KoQvHyNNePLYx(3-|j*@WyP-!{XPsP#KCyKER_qn z330$7A>Mral)IUb1F&5s%-_^J#V@Fu-M_gDWflJ5Q#F0hov?KeYM-_ZJP}udPpyEI zM*<~=7E1%{>78kPX$uggXIO z7Tkz0qi)5D>>+bMRH0)4_0*O3a?%K;ppkgYNFaR`cUAEZdP$GF1P2b-e#)y zm`sl3TgK%reyB{$QOT_l(dQ`+Q;cM6lx_z3kXpZp%8vgh2B{;)sdyA3aHNioDml1% zNs~^S3je8(c}9vawq_atwa*0h})T2BVT9osBOrS|Lv{ zC2fB0_h{JvPLrx35TjdUY2xKfw@o@-|Gr@P7un5FhdvQ(QL!^l`Ft?!{b=T;B+?F} zBK)3#AorUlRYCvKkiUZ<;e>L4FJ3V>2wMX$as0XZ{bdrA?EMvJb< z1N(BI!NU#vc<#0-kUY`WlUrkB;QK@wLhhV0raf4sfEk_sUP5by1MTfW_29ToJ4a8O z1_Fya!LfVRAyMk3M)uQqOe58V8-KkI!sn>Km^PSD-W)#Apdh8{aLa1g-v&_FAKG;XY`|q7lE@pa`x(| z@|RGk;VuOTEh3$g8wFR_Yqa>pT*o~7PnGkF2nVK>hn*KLmA$q=Ra>uS4af0=8M#=0 zxV41&=?)$l#$cK0FjIgX36%h*n^MYLC_H9)o+ZPcosdVqZ0}g46W^y1Vxqj_UEbF$ zHIMF>=hrA4bFs|*RXRuh)b_LvMC}Ac#Qd%kaL@p1>3JMRx#`|qY*?=J{`OEV2Xfx9 zKZQwXaK8@5U%06K*lLD_wQ7_ZsH?U}RjqaOV=yc6Kn6(P}T}vQ9 z$~Ls_BcOyDy1&8y`AY>zF8hBq!Gv<&KhOA;inTS&23teBQ2Au3V|3`_f!2g~Hker& znS+uJu0~5SMz`k<++yvFnF$L%y_j10X^k*UerWMpD2}R_B!gxZgY~C<`W?xjXRC5K z_6;1*#xpGvfKoBOx7Q^VSHv1wbtwuG73~?k_5(30}@!z8a`{ z^}Lz)etcm1i|&kEi&ayEK@vh@`Zy!pD27c&?iFi?o<1d-?LF z*XTHovCVE@g&2b#wA|X3P2v^mCHQ3O4Wx~uCqF11 z7{6tkkL1O2suZ@m!?nKoXoGh(rzZb@2JbC}WOtLhMU*ax=@y!Q$g4mxYtL zX*hqfC_Dco0=ko*mft7EKt~*a$JArikcykgWv|SU{>FQVJgv^4Qy^TX=qD&b}RHBc}<>*3q2ORJg=wIwjdb;fOf z1Iiw_Z75VY`Enl0798!u)N8=w$Weu9{UAz&T-XO~QUe3nrir5IlH_gN)6Y(qyP|8$ z^j^*TusfLmFpWOD8mRB*aMJugkK;J+T_9hzU^;o(hQKJ_`J14oB<^oOSruRGcgIWm zuU-P;Q53>Dp)73SLVR^){K&-uGG2AeSq)Jf7{NR_z(_U@S~=b&#XGe$>))rvE_|wl zibAwcyo`>wv%A`PaMh4mP1a6y>exvXo7|{SI!w-XhD^EEcGvdS?I*cwgBVPGvX$aRKu$%hQOdyTpA;{P6lw)rE7ENAL8t{i%& z_ec6tD6Gxzt7$t#{oWa5Xsg)r2e%xNws*EtBalYdYV&FR*uL`}VM(Q)TbRMMHrv=p zY1hrcc3*qXBmR*qoDBLCM^~RE=L_~&r~Ev{9p__x5+$)YjJdRDe@VzOz#IUBV<{!B zo|R?r*RyJmvTtObhRG`Mn1av3h221YTXB^ z3Pe|ON(Ka=Ic)bY`i7QFxieb-Fv;wkL`;a0dPZXtP_wA%x}-lg8Mt@0?cRvB@nHEe z2G&I~Gy`{tl}V$Qgp#uFrZvvq=YXo1<0vD|q|MhVkb^nfiq>KUs7jX5^@Sa#Dz+4c z?lC(bJ4vs!a#G@j9g)dz=Yj=|pkAW4^A~{l-k5mPM5Ror4=pR95}Z5xNX7RQc8in7 zu@8YFkxMOeIXB+Q1{v~}!p~mmcBRgM+^*1NAh=nfW&J&W)sqW3=csDM&;+tHM=v)Q zw2y9;54W$E;3jOKQ@%FhAX8xI+2F?t(_u~gk+Rr}{E8tUE5_w+zpwK|DsyqA)}^J& zhSPFNojmiHKY3b|RF5v2vB?~5Q2kG(avKn+`D1b9z?(s;WeToajnpQGQ5}$W<)pV{ zUTHad3xN~pP78ng)Kq-kHNSy61XcUT$E)XQ>5k@QeZe;~>k zZpVr3R>pfLs3KroZ zjY~*O7_p7-9qadJnp9u2QBTsYZYtIJe#R~XK4c;$RpPgk*(Lad_bp#i_qE^=jIqo7 z+V+^ZFpkV#=Q4Q{tQ3O{+F}vq3C#~A6aB^`V%Yo&T9qcu`I?mjj6eX1g; ze9J_>Wt13M|M7BrVVd-40k3@tDf%%=1LF7KmU>ki!{KZMP~m$3mO$gW|>vCb!s4VG)u|NAX#QId$(V4Yc0V1P6F| zj%6UqSt3ZTz@A0hZU=h@zH?)aMa=b_aR)lC4eT!yxmHc8S50H7^->kwe`+*aHI&hN z25JxGB(E#p@w7eVJfHYJ!)TqAffS4qBGKk~t`qk=39GRItBW$sP3yvI4KO_p^+)P9 zw5>O~rR3o6AN4<_%TEa?Gp>BcT2;a^_WrjA&x`)I?Jp7=L4@`n1uii1rX;4|^Y00B z)8dk{(z5CrX*SE=9A$y9>aCh>J?U4JrMk4vuym4e<4voVo1|KpDphQaMfM*QAO5$~ zLU*_lFVL%yYxuuP(clAY9pC(w=zPO~AiI<@=Bt#acAo~no2D`3_!)p%jy$C0q` z=Ka?9VFUSY$8)KEtHs|MF9xLPznD$rWl#McZ4}j={0Oe&C1q4_1RE9Ky_RFpM>T^Kq_4`F3mKfmpLLe@P$ z57u@ft<^;+fN%5rXe#R=sJH+rD?v|_0qnYiyhczXDwn0Op7E#Ms{d|RUv&9Z~})8za#@&5}c0e5S1GP>#368ZOGlyK7Dw4*w7G{1gx zRIMp~xx&r4ndif#Lr(4#&f`5KkPec!n%d>yHy!L?V5#)BmYHEU|#MPBv-%)Z3+ z&@_`E6fa8dK7r9GzidT0~J&&EuhLCAEzal~t^5?c_H_Z+~hk=Bmna z=ciD;x4%ci{k>A_+ER6W_IrpBTQp7d^+V|=iS&umVCa@T+iRhRRU`zO=bJyd@0usB z(I`Skxb;EN51SG^Qa~RZ5xBGGec1(i0)cyPh+nto@6|Z~A2qLYkWsJlBYw5{iNgrk z5#)-%;{yOH-D)FDEV6ywyyx@U|nt*HoS$eI*4@*2K~n>@vt0rzFkQ z)d%^xh85-}BRY6{$@4b3f#Qe?UUIUuZMg~6|2aPX2DFXSOmmadSHoK0q~A zbF`7W^r4MrcD3dfM7zYi8mYV0*z2}ll1$q~vMK>N+$?MeC)pTy9*8m^0zG?5ss;Td zx~D`lfptKICkOLs{iu8i5NDm2_8{!k$LysiZsNUmF>rA=;i7fJB39YkQ?qwKV9Pc8LkEC*5kjJ%v)A7I=O z4Dya&Ka*E?yL-;D_$*O(?uU|~G?7F*9>^P65KYg(r*Kw#O4u8a5h+1oYA7YJ*Yr-Y zQN$zqS*+WG2!vMv@IE~%ZH&)%m5YweS>M`ih*&w}-rG93w&@{`wQtCFXB)>cpWmrPBU?0~de^(f=tH{u}DP*R(P*M+_EAI~y-U z+(@FzGRqh_(;;tfd!0zVc?ZIZ?i)7-u%cpkj2w0b4CS|{L@Bc0l>eRn_CLJl4@Ra1 zFtUHb2EcL6O%H}?*YQ*sp5g*4GDD)f)P!z_4@}G7W&vnV-sM#Mlu@GvMCe%^c|LyL zbHf+E!TB&m8}|JIb-7~;Z}4MO|A;I381~Jb=GIuonZi-p^W+DdwtTT|czz=wTj2eq zx^+WC3vV`Zf!ye!S0c1jLd7RuH5D%YkiaNxBJ}iuY}~z?*w-2~WS@YuXH`bhiY(*c zUL{6BvI$N#cHGs5Flp>Y$r*yxND*7wl45LsNSXGocYgeE>o&;ru_H~hm~`aS^%@1_ z1o}1aKtQ_CumAEH2$kyXtWIPm#0jo#qjE~PNygs9+qhCuz{(AOi4x%`qcY}#0HqV0 zXS=ir9=!t0!;(N#r@fsTiWjU9t8N^h8X<3olLt?TRD-_elY!nNFh1NG=em!5w&Xxv zUEiyZ-vsVgreg)Vbv*Cls(>2DO*S1OVfYX3%(|(eise6D<)7aQJZyi$amoRq^S^K$ zZ+onY44GKE>00}qLn){k)FK^C`24Lg2vq_=cq`w>jct(U+Y@E$B5Dd7&;k~8D`+`k zawca9QVADor^p{J^`K^fOtcdpNv&87sR(=RYqrXaQli#^nDfl! zstOP!{(r5?E<4?2-FMryZD?|49e%Q%?2A8QBE6bCqPSYEr>H|v7$jRN?QM=(0U~6z zU9L`7r~OyX&Bi-b#vS^%&Cvvc8L{z5Rtk$=!&IWz>HhM8eeZo0MIiYJAVZ=jxVozs zntz{}g4dHjEvIjR}hHGT+ZtD+BWR%BKPvt}@=O}kb8!9Q$ zvI6u5JRD_J3fr{kPtJ(I^v(wWzDAGGwYv*&8ZPBm&e$@3U)=UHnnR}@HfxDfIVg)& zpMU4uHTNJ0&`C;!nmBu64a9L71+(ijggu+|j*M5P47KjlaaX_i^xOa5ONRMrg|i-|GFCw+p)dP}jd= zv*AxIChh?jF5w*80PXi2@Y*GF56Y(1)WRCo zP$nPGj@PMd?kqM)mhB~uiKU1Rn3kD|TQKDRw(@an15rvhK%E7O?FUnBj`-k80hl7V z8RkBY>bm{(2sPU0o^>De*81Xcq>;2o(mM*_383+;`n@sS#e3h-6j5v4nX#*xR*(HX zP!4-1aqKoP*AA}sxb>TFHqmZ=-on{4juK0hZ}O$JaM^jR{<)?-Tni36wTA=CYE`>IX_QRTDWS9wPB3uL0!Zg=>Y8LnW_FUc~Hf21$giU`dX_qg7 zQ23krHPT-G%QF6a`_f0;SBHhRQ@=1SyR5^6gV$B`i~wsej&pw}*sXQ}?`<%2e{SHy+ChD;wQy!bwOE zRRw;bJYU*jD;Qq`T6X{8S=P_0Cu2ccn~vEVjP*(Fsx z>nS^%`6Le^#@l%2vT-~Lu7_*XX2XM?-lTyEgOUwy`9$Y`nO%%!pt#N8)*THf6JFQQzBE z!N~kpsHr@tu%jyDZLS2&1Q-=1+ewuNPv9jQ-t0}PFKH&Q`R$-q3f@cKs+Rhwjk7KL z%I-*b2Rvsq8TskYoMk!RJ?N>w=VQfv!dRs0*~AijdzEDZS7cPDfMGk({9%>oCo&E? zm`Ohy?tv3z=v@~XXgCJWidpV-x>EJ=fG0ll28smV;?<-9>yx*_?gP&?4=o7QA57i; zbD#YuJ_Urrf_Cy6Mu8@B-Oywdr?$5}ydrqp>!W+YS49tUbcXoYo$JrFJ9SDBV;{qz znBswyH*IsNln0_W%;)Kz7|;FUbnK3yY$H4peaxdA(==iSOpMXG?h0eigKB3=dxail zCVGl>J5YOVaa4U!NWoYr3#T{mhH5nv80=nqTnAb?VA z;*%qGODes8=R*sm+8X6UiEORPf=$Y=zOCOhnl#th_dS5Jo>OBG2Ya67@r}t_a}JYS zXN~!k6Z7n=lp|MQaL8a$z9YZNUhdcsQM)PNi@-~odkxuIlJ#a$qE*mm)}&7OZZl1{ zJvlm|+GO(39JFuwjJ(q6nEzqtWXqG@ppfq0%p4!kX#w|lxQKH)AoGI+q?;2gMj%@l<6G?vb zk2S};UeBG(*2>dx=j%)^V8mL>kMaInda2?J(Ow3&Kk%n9D>`0Km zZB6nwkJFw$?=uUL^%Dk_dj&7#@lKBgRZlL@ujOW3kEhput~gWSnJ0QR!#PDNN$c=2 z#nG|8NTxA04W$9-WxhiDw`k*Ojo@>+#dp{%>LJ?+oa90pvm6ppHiE^FB>L9MOYZN1`_i^SQi{$QI<&<;n+P~eEsb1|8w3kD|D}S z&GrLIdjhp%rJ|TR!k2}_wiXCX1}D<3_n8T4<9S>j)h$Jzny^{lj% za(y_JiTas}3(Z3q+D%lq!2(i++BW3{uhg-qxoP)RnP6H8dSAY|@j7?XJY;WD>gA`u zb{gpLR4}N~#mLP}vMmV>f9%P}EX6}ENRk6bshx&vrDy5Yr_Zrhrb zowsg=r1NDHc{z1kU5ZcHuW4Cz6k`N;6|#LFB9? zx|9S0X4_<0&w&Ff>n14v6l`WcN{*beI!jmr5}vJo!Uz3MS4ES{xiO8QiCG(=(&rE1 zA!HqPvK%gK3J>Pdjb{3vv4*DIiwG`gyVpvvu1CF%azXVHH3w=@F}4aiXL zfUH{vv?j|}Hr(c8`vVBQB)kOcpC*%KpDE2nJ} zB-@V%PEP}atjL6M>#doOP^vWk;l_h+pQW%q1ym!p5!4uJ21dBB4rTX$-kq*21j3^%sh;Hu-8!ZV0gwtq=kfue;f1v{d{=$TKi7cyo?bY=mo<@A{zh(KY#%r_JgJb@7wdIrwiDfUFI9lTI?2OvH;+gOm+ee1B?9G8-V6|Cf?tpdVG@cKL#? zaqibqKKr#SMnAqP6XtF6&Zlkg!T?!WZv!UljShy6T2PfeL+`teDR(JL(8fmA zu{gd2C;ufT0@HV|dAk3oQIjeYgx8j(AtUz9f0okBk@Wg`BB~<0eFkss)KkwPcD zNMmefYZ7ACl6peEeQT0IP^zUa zCzXm*O{#f|&yFXa90yx}pEe(!a41&&X{Rx%id`FN=qW0e0@GcF-)uNsdCB`6W4d|2 zMfy>PB*T~6+C;Ivcw@-3%El<}8F%KlP5d{Di189Q7EXe0(Wl!*vxRv8N`+9>+qp^g z_tUj8+K0hG;f0vKlB=%_LtryHH`%*tgHBI@{BikIAR-VspwN2wpuA_PBVw9pHSfhd zi>H^wn=0%cMPcdbQfCWmRVG~rz6_a{D7n?+0KA9?pD3hylX$<#bIo78P6XnxV&!5( z@cBaV5FaTH%e8Hr;k;9EzN??&hts2VHz-MQ2YHQwK>L<+*K_SM8dP%LRxShs=^iKX z`f)QNO(ka3boQ&{_I-$>QijYetlQv*(1>}K7XWn<0SO&1VihGc&c=>j|2ra@MYa50mxo5Kk}GungYbFQjD{8|W?l&xFA=J|ftQ%tNM#KRoKE1vI3hXH+5{S=A? z?GD?ZY@-u8T&GbIAW@A$woV=axuXH_=bhTR{gD0S?Na}Qde!U!R5NYty8zG-Ur_lo zR+Uf{6uhnimK~}zwl|K~{t7)K|3;K(J_`EMTWeZst=(9MDtNOc!Up3OC)Mm8-YX=kH0I?b+*oYNp z`hFFF*gw;H1;i)?oDcn)F|Qnc6Sbwcu%&6IecB$Z;6iCyvW@hp zIOF`tge#a@U}Bi#&5tUm2oHY%W0|=1t^nAfRLNjQQQ=1^@{ZXy9DjBIE`s1R#PHi( z_2Tf~Lt_fFp5n&a3;|_UR>y`hcRT;z)%Hb;)vj8Bm*$_YdecU z(3u{sLjsmrLP&z5Mc-v3)@WIVs+B?qad!;)YEJlc@7sLXH1%QpYrXF*d1XGl zZ~|$WeB9Y<#}SutyHu2W)=QwU&+H?Aepaup6pTR&<@p>~dMEpMO*;klRwe7Dh;>71 zDOxC05aEAZl5RfRpd;~$%&#;ibC9`TvBsXT>b;&58==tW{uaWB0^UmEHwVyssOzzK5COpat6xsl2S=0inKP-PxUtALZZJyyv~5le_jmYqzia)ZniTeLwQM+4#g1v!8K3D!!c_~j z|H>yos#lngQyxsM57Cm%G?NgsGC_DgEk z1drP3Ikmpv*)dm%bLeBNveJ@yii5ivu7Elj*cvYd)O9GDKAX}{D4J}o&NJ#wx+RRu zoiF3Fjw*g2mp~?oW~R!b)KYY2bd}3hCPt}d|efSA^8eJ3wz|+ z>u3jK%OuBQ?gWq1fKlm4`5gwKAy16YSq{%jy;lDP)$jGkKm6Suz5HH(3l7&#_MyXh z*co1L*nzd~wBv4NI+3|pCVR#&e=amS%xn_3bgwbZ#MbqT-A23AAXRMqj@O(>_3!1W{o zuEYazu2+LT7Rxc zNcYw_8&Exa4gZ=^>iJm&;@xtqy%Lo#%~t*5PegL9Tw)Dpm;Hg%GYAxu@I*~`m;MpY zuC@z6F|QNJjLd;pJ`@O!C3}+u67|U~q5}PdIlaLk*e)>8W(||J`WqM({y>Z6qI#y* znD-}`-?oN{XF8WG7`>#pm+VP!IBxOLBt@^5XJ`k%eDZnxP`A4ArpB}kN_DkBCrv6U z=V=fJ0St#01wsEIoP;0*S!zvpilW8>KGreL8=llSKiFOf zp=Yg2C9P}5+m?17o=@-;(pI{Haw^L(NLN~^pSrrBW%5RGe-V-IV=5UM1J>m!omZXz z!ceI+$x4?#rwyXyUdkPk5ACwSuM9%=oy99QrA93fkP$T8c(uqOc zEfU%tb^6+)p=(R@W@JlMr~UllV@*N)+KU_zB_62b^1V%V31Uz~twtwR#MYcul7hSh` zik$iEqIg<<>)5epVhejX-vkDiDFr!LU68jxR=jgKT(}kz45+u))+e-tb!dvYMyO{> zm73GUCEZ0%WD|McXHOiPEl69zl5R|6(uMKrn-$nnNn`Xk3b*5RvO^eXLtwoLm>#5? zxolOtEfVG;*zTEj+(_o=L%)1lTAZe_JyTo?~A zc(c2}s96QSlPe15WBWcXJPE~%3)}u73{2$JgitnspxZJ<7kV(1;h3vaz;dvf&o}1#RJLQd!4;{8-B(=L81Tmh= zTQ@X6o1t=RTjB{3kFveBaDCeF*a1fg%(Apo`|)S{aw7%pCmTUG#zhK?VF-NMV)!|~ z(9pY)ET^l#xpjME*g_fn8xMtB>TLFx5yB`_GYiDu1g9EFz1`s{QZhFsX-h1_U!n=Z z7+3_|{0~8A+qGksdwZK>$+=0=eoa}(33e+F{@bjo$UujM;Q_+Yu0tHGmVb9O1+}BK zp z!ZOt|&Vg}!k%Nqpwvv(8>OS|!=7r`Q!qf7fINpDA?p^wE#!wb~8BzUNGYqQfj)r#p za_5_S_>_}vdZ#)m;*Rc{9tw@&Sm;weDz@@whi`J}vmgD-80$)=FNJsUw1nQ#Bhz9a zYxfjewbiRNfsC;stO?;wM$N=J+<&WHN+hf=ueCprCbjiUv3P`eQ7TIV^-`$F+?C~H z-sgmyA=0EluPGN5vBAfhL&%w*h*zh2dAU6J^zQTK=!-g{{uS%T#f|oRMSYFW+RteT z77F%N&fXKL0k#p{$Jb6jpLI5q#2`!>n0DQd9D0(7eNAq^aJE`V(LNBGtJ<9V^8 zP%THGC(Aa|ylbuX)iZfJ4DiC)wR$f#j#(^L87)?AP@bL1y7%rWS&d+Rgb@u$bFqZj zQOjwvk%B#jfzM_}d?g`VZhj#4sm!O?;DH3~!irz>7&e{)=Z}=UczCX@rlf3f4tT~K zxY)g%dBS~6@fyP~#lM5xtDvMCc*M5&Xr3GL75Dm{GiM+Hqbh(hF(XFMB&NO7wu-X~ zzhu#sL&6I?T!e0xwh7o=or(i*h<8- zha6@iQjY^#?`|~BHclKl-rqEl(p=5-=ur{wL<+5l`^9k7eR#5&9+NTAnu+}!W!yz3vvL(BTO>c5b&jmY4ey+xwlqh7kWZ=pCZ!}&9ckLkKYE5!Kg;jZ5;eb* z<-^{bk@Alw=fz2DLg+iCO5eFUP?4BFS1NvcThh`0&5&xLD{p6=G=FQ9u(Ej!eyy77 zyX|$uvh*lVQDj2!Ur`Rc1~q%?C+9tHymwa?UCoa5XcHvE4D-t{={Ju=Oi2_PVtp#; zqzUd5?m{~tmuolG3TjKqU3@_}N^GwLjqvHp;oy1D?7?f+bq#&12AZB_M|ufJWI+Z|@N8uXq$aU0cOMt7r5QaMrCdny z7~X{8OA&iPiW(T#hzOY?es4nEMq< z_{GoXlMLRGNz^KPC)4E>IknPc=#>PU&MH}VJz^nol8b=B!EA1P7BpA293r6#zf>J- zxAO6`3)*-_IgHtF%uSZZbnc06!$&Yem0@wq5An3HQ4-00Pp=()6m(#gjFHh?yJ_6= znu+F9(fzHJsgT%B*c6N0$<}k`->P{`Lt|YBr>~aqcfOy>x#&1*^C39Q2}xXXZF(vt z_zX$3y(&A#yrWysi`>S_aFhG&QHs1YUf#_?3r-t#xdxlEEoPS~?_+hVj#qR}xv#gD zeBKOX4E3+2!94GVK2OFm5B@g7PtgL)>96}T)mA%luJV{RlYHtL?5~(BkZ^Nb|s~u<6Sq?b?LOR*&?i7w4K`HXeHe=z3-J?_T zS|3+V@;>NBUJ>ir>)CSD0#(kbsK6M*e?|UrA?J&)C(8uIla27a@o zfok?m+cBYcEb*?0Hqph(B_5K?4_kO{yKL$>KR-(G{^l}%alG4xX4!7nK3Tw=iMfd9 z{qjTE_YuXm7%iJ>CUBN~v$;@{rd{}HQ$7{Rr}EO?TG4!+WVX6v{N&O_Kt;w2U%LP1 zE!BBhcjgBAKDK17D0Ipd<3iN{U@lyPe!Re;{SR?)DA#Ogl0y&da< zbXIx)@D!d_IeU0hq`mpQQ7Ec)LFdLZ5reARegK~LcQX5gEZp7*H;H!}^=LkYr*~wn zoY#KxM3i}(py=Z8XO&eGJh@brw3}@VG(n29hZUpeI1a?Smze=md6=dD1Pd%DqpJ5k z2CvKf+Ri9)0vy*sfRl0zr#}bT>cox01TccZ62QeaT8Xxl(xTY@8m1hZbo5YK7pv-F z`}Qnvt!;B7A5Dih?2YDW#46_a2&Y15g-v%ifPM)sw++kAB;f_CG?60S0L);1aVWCk zM)S?JG@T7InU~tigDNYfw&Ssf*h#v&4zYW*70J1BSUgatB2Voplc(zJZMgB%cLqIh z1_`z~f1R-Z`Fx!kXee?#_G>evRTUVkZuXK<=Dv{!(l3Tqxs`+!M?J9fOHS)z6Kd3J zO>CbxKVDxbUp-m2xlnQ5IEKe469#J3MInz^@MfypA{=c^aFZ8fy*~SPwep1I;OR)~ zQqz%{ro2@fROzcd#^69@Yd+<1b$iU3c7&AYO2)dFTR`!~gd*ZoFSeyHwyuPXIdR%T z_1jm)&0%2)>+-8B4^wIL(vIArTCaFt;cB9NnEa&ZTpm7#T(QF-so{ML4WH%T%3^zH zG(XB<{yt)?ld=(AbcLjtcCAZZsae1arO7st;)4$nh_v8V&B1!k&F=ltorOs07MF~- z`iRFXCaM?tmy(XjRJg7oJrqg0Y{w2xksY7h({6ZtyuS-yilpBzY{4s+JUH^Pf<}y@ z)0i|3zct;cM%?CVyKK|m;iHWN7!O~551u)4!MUY(RbhY0GCuGIh?c+zOIws^!*0?Q zt-5!D_Sdv{T6|O4AI+;5A~Aci(1Vc{KkakJZ~cHj+XT_x6;X%VABhfpHy-P+yWUw_ z+Rh`6b}-=LNSx6NO>sOenaNvuOvf2-5gbWAT#T-;pU)HtOWoX}8BW$g&RT%W-TRi^ zx*CA}FJOv22E4o8hN5~TwDk%}TXkO2(~9n)d{k87NYd2x8F;&6x#*os_21%m79=Qy z9d*jufgzLQmEb)ztfn=eA+fYSjIQ1XI(>XJ+C9s@FNawoD~qsWCR#&sB`V(eGA=0i z5s8JK1><&Km^_bS$T#D=msc`u7cjh6qt86wWDeMA(AD@9iLNZ@C=h_t;XgoxItNR0w=t07}lO*jlxxVai zpMM0$L(a5sB+UkU^nK%+pZ4XRpFV0Sll^`b*|*HnIBQcq9re;(?Qy;kgL|k#3?Hht z1@TY|t=Aoa+)al@Jg~q=19I-fO@CgVJ@_Vf)(oW?WXIs>JIxeiEq!* zoOnao$(}a7i+J|!V|s#S$r-A+V~b?Rr6dk6c3BGoVc<+<1PA6bm!|Pk`BpSVv&QS$ zWkh;~loc<>RO;9Tk}uiXWzW@eR0gJtWh$(<4m2n-taJFcbub*d4tG`kCX2W|YL9uC z-WA6`ewRp%yDu9GR|574Ui(`s!}jf(9Gbf(=k>F`F-UKKiuNIYcCx<?;=>Xc}XeYF3_6{vcFA>Tmy=ohfKZZ?=Wcn)nMU8JD-mZ zQ7cBxPsA}Va5iJ;Y6JSc{S=cQj;?17b>}%1*pa*Ds|9BM&3tD1AE4kpN6>mfi}~3j z_L0fViiMX>BnbAvv%Hh?)N@Xoc(ybwAQIDbMIga?;2*YNk{T@QT6V z6Ea$BtcLhZ-eC3ztnoQp6Uc!Y=mCQAGPr!0k(*}rI(_0^YulN;4Mi8kNV+obCMBzJ zd1+6(L%b%DSPGd73f3II;Q8yYzxWgnH=@#kE}DZa)Nhn{a~dPd!JSZs@}YWtsg=;x zM$BXuSz0qkI1HNUa6;~i$MdQpl#+W|kNu$_zdiy>OJF%sYu3U6`uz|-jlRQH+TH}ostD?>Y^Pj8S_rgK zmVJ57mI@UW!i2PxNX7N4VvaO#?NLS!lGM)LBDv)w=sN#mf!;2u*!@oMwhWR$B%aU*q=NeYmN$5mJ6Ne_ z8M6;yzL_pX7Qa{Re%ZUygFg@PeA5@103)b@AZJS_+VX*yBECDzMt6Ot8LW|NDk6`~ zJlOI-IlnSyiCRiLtuiO2Lh<8_pK@#OW4?3%_~ATf%{QNHL=o#`6EGfK*xT8R#8GFV zXWv`??eU?fHx!WREZc!O(r{F6_azo;D-ISJC}Iknp)?e?KwQ);JO82Mthuv0zz zLUT$7X11<$s#)%~sWEmRLIDYmAbZrnf?x4##|P<3N=A*qUL&9KA;^l#NbHvrjYsg@ z7w1rslEaJ6>*wG@pM%U*Je{c%`FAfH_rf@fzeSUm#%_99w_IUxu14I;*kmvJyfne7 zi^2E^GV`fWjfsye@u5-3)0)|-BNsLR6N5MO*@%`<2?NiFz=+vQ7s!`Cd% zn!pO$!7j{ndcp#M4TWECxnoUlj?OHB1Bx3JY%@~c<6`CI7I<4cuH zwM#6wP{6yUf>fZ!rsf9@3lu_gYnAOj|Ud)o|WXO z;Wsy*x>jzClmyY4B69mE=ho9C?QuHzN9cn`up$RBS-)%yyl^PU9P$<+gHxh>lBWXF zXFvTLM{oBN{X#I<=xaTdo~3SKBN^&7m+LCawDj@@P}h;sXf*fh?V!4W%nO zWc|E+c)vvDkhc`>yz+_uAH?aeyq*#pJ!+AMc?PHvWp>@_bF&ME&*0v_zN`fngo%-o zv52Hxk{5)`&zN<)DAQfnrkG?IJkXe~dtmv$v^F^q)Zq`tO(=`+{Vl%#EoHT98R!!H z#7n5n0DevPpw`>2*8A8^zr&=Vz=hFS5Jf__`kw?m?jpXp&hUv1E$i@=38x6W!$+Sv zeN@`U#kpSWe@Vk~o`HuTB^9a&{JoqM;4VV?sLB62GkA;q_}nHfSG=`yKhjG3J*V7m zkRSBbkKwb5tz{?qGzehAIO`+ht?g^Or#d9E!9x<&(X^K^Djc9lC? zTr%(}{xck7)Mx4NJlHcF?9OOw*%sk5@4i@ZWYv)4*J(SYg%ebqjQ)}lM%5oHxkh*2 z1*cu2YM+wK$~-O}_1e_gnrY@V0(cuC)g`^^N{5+lIXL4}CwNc!9m;uPD6{|fle~-Qu(40;;zy$RgV&FQt{UMOvs(k3%HL;yF zRn1}tGnE%yMol-g$P>qp+Mab^dJEBYcxv-iX{RH=40RcLyDPxy#6v910#n)lTZdPMry z+Fj)NzI3eUu#iA-SQd})Ji}uB$&J3TBnaSXt14#6^JReADFCi8VLa_)^bZq(2o#l$W8ie~rKV`WHMo66fjfE+J16k%yJ{2#RxrZdq*U}@AG=Z;G? zsS!veg(@7(^FyLH+nwJ!JCK%NiIU@PXcKF!OVR8#NXJDM_osSG0^gq9QxHaZ7mu>M zM@O}RMePOz3R5T6#q>ujU6hD52XFS`k5@t#G|;&S(z69vUAJakx5W!?QJ=wooXWai z|C~BEhT^v-fXu5GPB4o95Dby6uVGzK2RGrQ&+>4pl!|P zjQ}FLFd)wG-!F@v^?!uY7O$IQ01c8^>rSr5(?($9!S58yz5C9gKHXbqnwf+SiYtrq zkIT?=82~{`9$7QfhZ!XEudFFGwH6?e7g4jnEe}=s=}J(n%wX9m&X$jF>pn(vnK7}s z`rUkWkqOGB5ynVIZjU0<{B*)DE<6OXxyijW{n^GR(Ldy={x%%F_p(9oBIXXBhag8{ z(e^^=_{lAU4+>=~nOUi=o;wrY=nLKc*jz(pi33Y^t<0$d>iNjycv_xv1(2wgNPKVv z-TXd771@}JK{lZ?Fox08`x~=11-9cy$M_T~mWF^@B<>UF=I84`>lORzlIjN+v%WyE z)+u8aOOZ#TrsXT>yCWmqtiX;_llLxv$(zvx8e2CvVPah8M>BD~%eT%IRWStCe z*>fqs?pOSEfba-ZASkhrxvAUo-SpgYI08(uO!kv4FZ9x*899_0`x1kkLS#V&E+_l3Q) zK{JB+P*)bzpH>yG z@hr6rR?xz)qKnLLf_+I-8Yx%V^x`zB)D<0oQF_;~7yb~;M-uylxcc|&Kb8WlYS`gc z>vO*}wc(vd(0fo^;9B>B8UzM1M?7~emcP_1or*kaW9A%?rJnn;$GFtB$Gp8%Nsry4 zg>48=cd$O$NxU>*IyrwOC)}v7Y4DB#Zw3ODsg{L&XRgv(nX6tE-F*e`F5Ideem+|3 z`ag6VB(^~sA95Xt$NiMYfAfU1@V6-Q95)6`niC}-(~U#K)tGG5TsWg>{9Q)t^%&0( zeH@$Z{W!yGVc0y`THrXOK2Yo!V>x2})Y#pk`x_s(4tC3AM_fr>eS4?^qa-YttCA)! zH{E4)?Qnt9Xj%3v_KLz+Y#K_q3A7Wfpbm&slB8r-2iocxf<^z3s6*c8Sin>NA}s}l zW(KkU#s|EEtFgLnPp7AWf(^Faq!%^pPfsxFiD~(*3;%d`krk(D#7^Vv&}Y@}>D6DB z{O9gyQUJJu-HO6!sw1i3LFfHxOi8XOo7O)B?$>>;{5a$P=QW-9VtsW)W&X$5QvlY=oFBLF!nIp4Pbha5@6o?2cEJNAdx z`K?Q2l=WW|b_ij!xzoTwUwM0s;Rf&nJ|DeK`Gt}!@6NMthCzq$Wn|$elI<_|pZ;}5 zy@zqmwsY_WH=keL;m^f^Uzf7JW7>=~ZFyZ~0(-2QK~r z2RVelflte4844K(SsH#zM!&O8ulIZeudwKxo2->Ir21oXel4my85BPBQFlWLEbCS7 z;R>=rwZUhFze1HgT->+?H^298G;q-I@3aN~UJS-lsS>#cAuq^))nOC7szo-3?Wa+1{^9@~c2&gGlIxEf`uTqn zjIjFk#ut945^~CCSaFT2aG86nl$SIM4FAhzKvO2IeY#8Z`)+@~^QQZrL3#_8`DX^{ zzv?obAG*x5>jl%l-O~$PytKi@^#AowFapDbdaf>eq^@fQz^(6E*Q|1w^;LWHj(j}z z`-y(P^G^O7)XQ9oB+v;_A;BGuhxj6#18CS4N{~DG9F39s=Gk@fb6fo z{(K;C_4@Hc#JAsQd(HEzBwr(Rfq~Xv1G(Fti5kQ!f#AS6-3rhO2b_@8F~R?1Ki~d{ zzOI;1TKo~}{937tC-ILtnsSD*DBAI@<7nf73G<9!Yug~->AY}Wb1tbv-pLnXy>E-K zT9W_zSqY9GzseEYFn9RZUw=Qpge(61=9n^4F>dDaaFv@gHLtmvD_c`%8c1R1;bv=q zImChdIw`gI{_#(la0W%~Um z?wGPLQ2z#9{B~K-l;a$5QapI^_;v0dQ86;@k~?2ibp! z$`oAUf*8RsOJob8Vz+zfPiN4VIZvx7a|Ifwg}3w`e)e5y;ch=OSZv5P{vYv)n`6}g z`=GV(_3^KJ|Kk#CAdNTO6@KA-#_{=wA3Pp*9`k6^#lj5xdD@)(HEc%aYH3rv$r-kcOSAx+Ef6&!xKt!|!W#@z+|h;A@o}oEMf#5*g6?BUO0ldm5tXoN&k2e>aX~ICZy-2kP!eko#|1 zB@?6vVz2cl=ehswgr55@pwgh2{s+GYqy-Ma4591~$LxPwssFM_|C03l;pzdCWfQrw z$mhTMvh?(fTjIm+*nIbo|BGEteDi&OZ~WR{Wt>0qzx%a}WBA3!?eXjlboPOlH4CoM zyUf`NW;icqyN2OB-QNrT^PLQgkb@xU_jdkwcM1;Fz<$Wwao^z*T=w#p-2HmjDC~W5 zXORW?I~_MFfNyyPvVvdZB$Lm=33+ic0Wuw^3Lqum(dziHGg)DuzY4MWDP>D^XJV*6iF$O^?2%5;^t%X&R z4dtc*cP6sAORR#l)Xb`fJPx}Cbze`Gx@IebsA`XS&({~S3}GD1dNF9=uo4^_wshZV zskm_~1^@!`r zZ~$i$u4?e9@GdzNt~saOj2U3E+Vj_OfxPl{W@$GgBg8z~UTN9Xh<huq~hqu-tizBey8e#ipA=R9H0`Y{JK;KUCj&@Sk_YM%_5@9WW3AfmoJEE?jk=hWt;|?_-6iJ8 z)7=Gd{ws~6q%R?Bp~<A3|}LbSRPQie>AUK1WGwi0$RThfP-wmR9AeY4XOksDNdy2vnA zjf``oB<^=z>0ICRe1W?P58x2c161(&Bp%PKHKEb*ymw!xP2$5Lz}B1)y#L=p(*CUzF9<#&WUTk;#4K*Lgu=*6s! zRxCDIl?I@5^Ct7dfb$tFVc|PpFU1`*1hjV=`)GH8lZK5gcRCxARJM zV!>@OsA&5&M%TkA@5Gf=8?Nfbg*mor(uUv+}rl4ABQ+^fv;_qrQzvs^ac&Q?aJ@B@fpB2yi7mPDR2%3#(1G9P3IosZB$^G}tPp?Q5WJ`E z>M$E|+p|3H=yt5vTVM6r>E5z1cN?E#E;$k!o>1z-c^{^yUR(-FQ$1{9bFoHxXIG+Q zyDLh1TnEwS7cl7u#=JI_QHW^AU4hQs&lWG9R&PX;w-{cvsM7>6u|M5@!olCM4SRXE z?~a-sqb#4D>MkpEzv>#e!}oc~%syDhrGA1Co4>U*YttYk`Sjyt&!_5<%saeZE4j*i z7Ip1lH2-qJ?roB{je9;^6m@QnyF{Q>)+|HHq8!HzNwa71+MlXM6MHjni?%W*cxgCq zQ+s@sSv9FqEZ>OEny_6>cVm`&Y%|#s$5J%gEmuxMa@ka^Mi=pxX*67~tENU|ZRz}| zoNWUR=T9!eE3km&V=%34eL2B~!$HYGzoPw9^sq&4>gt7<&&=fAcFm}g3o)%*yI&9D zFEV(1OX{gyHfDtsboSk%LDm~<4Gdndl#ZSK%jQlmhJjAt*0!E&RL|})v<(ZmbOq7; zqY5;0{6^6_x0)-M|C(P@RrW7oot?I+*@-v36{cw3nVr$Hx2hbYIo^h;mOi#+JXczp z;3ocXx}GX^OoqyZC5?A~>rH1D;GMFJEEd(J;b>XmHUKa~52*RvA6AB(N0PcvNs_l% zGCVtzpNDPzmcV=ys1!w2?}wNtChV)5eR5)!JG|$2!ehjoqGZ@TOk_%$1TAjd_VQ^E z&4pIg5WT9wBB zoQ-VA)AHq;!HzS%FACcQHJT9Wr#k0d#|YBQeG?p5xnFVU+zb}YiA0Y&>ka9=!nIj+ zFy%IV2+BCNZQE22)1$rkgX7-&b1JTU@;6qD#|PdSse~2>U!0?6vu5*oVssyrc>fTRY~|xG*5n(NYYRyUddwB zPO#-jv}cU_hfKe)``wf4ev z0;LwV(C3NF3LJMmYg6?`-P2`2dmQSL_p1V(KL8Vg&=?7-+b{-wE;iz9n(A_n;m6a= zpY|EI+R0=Gjj`H8Yr57G&%=A0ADRHTrl9OY-1$41>g!5M0{iP4dQE?+>V_)S3-6tD z;x*D4IVt$}J^E47^>~90dCq9J240+khyFc#&n(OM&%@!tJQNqJY56(k#|+qO@=+p5 zE*$(6EbBXOD86*bK^d59=V8t(ZZEq5W)JJwZy05>J@sk(<<15=gX*xIA!8N@*k3W_ zR^DeFP1A@%>{2t;q(UbIpYODh3HWec;g2|eoTX4{a> zN5~MPB5h5&$1*9|H+X77(ls^uhwrm~o35HkmI)Z{N#)7DoA0wGn3Zel%P^Emp(1{E z-+v2rvkKo)t}txA#lu{ARousF@Qs&BjK%PZ(X@KvXuUgs8`%)tnGOyvecfZZYzsAb zuOjO6)>=uXDwd-+{F8&ENAJS{wOE~S>m%l?v}t_;dp7laL3|@-FcH4bOs}EnrCx*5 zB@qpj_NB+Vy&z$1w-$?I3PUc5YLL(}lYaq^Y*0n+3vLp%m;F-xaDxw9M~JD zA84mh1km#5=T2?TqRkB1U!x8kk~k!HO;T-T-)#|jpl#&2qbyWbvThSDrZK(g^>%lS z^_IpP{rD^eql0pIvON*oWXuEU^7cDBF>a*>s^4s!!dA7{lgmzCR$NEhPWJ6Qs0tZs z)t)__W;f|3|C~vm=-!XI-t|NvblrZK(AkW3Ft8GYDFC6D8k;VPkBpX#c@7D+8w3k7 zkMFjSRyleC#!u(N*0h)>uo3pUI4ukdj*Gx-4(qrvppS~S^(=>;1%-+yXLBlWpDWmxQ)4yY5QGxe<~3nvWd`K-aD?gThZw^$eu7lHBeULgj-B_!-OG9a*T&rYs~`f7-jJhp&Cf5 zT!N1nRFeRvfMHcu)j!SU6>AiWy%4E=AFj{y;8QK!KHkwJsQllZF!KqJM%Idqi`Z0e z8E5UDqekDe5xDPpu8)1zp8WV;aCh~bKnZbir1@L6T8{T z@{YSr*-Oi7$Ka`BJW6XZ#x|ZxXSiLcM#Jx9tAKb_dUVBu7kA=k`E3ZJ>Ske)_CL^~ zRxqpB<@ER_0daD=(}?{()+`Z?gDNpKK>r7>@}MNOCen8v_K9v9$Lc{EUkdti(M|Rr zpNCg#t0uTCxMb}*Fyxjqueyx`O#UgK<$!rOHr8cTn)&tL27P^Fu0yQiBMtT*rTn8c zR$8;W$Xz~BLmv^Y(FSGNKy(|1KpcJ-^3U0;JJ!2T0-H0}who3CYf9QyZ!s(!gy5i+ zyVu>XvKpw0k}@mr^a!uFpkAiAOodq zhWK)^dM&&AV`%)dh)T<{JD#(A)I` z4uGuzR&mFNbN(!_(ao8Wxd^LpY^I}^pVJWgDwY+a`uq+YFXv$o=MOt~)2(%8v6=PF z8sAp5*XM{i?=FsqYv{!-iDJh6;rDT56pJ^F=_|@ho1mXQR4}?pSMNz zF#wqm;N9sGoIx~C&|rL3!_Fj+=y9{(3i|7XZsaorcVSFMlo`HFHot}isknZ*l|sq& zkV~&a;jD6`A>MPo&Y7=<(SB%i_8BpHBLtbi#4FY8&D$0U;%gn!X3qYm`zKz|DzN?i zF?nQ!gp2>|ef*n-l^LBW;~C5-K~wzqUrWb>3w65*c$$D@Gr|e3NWA-j*5(XK(J~C} zgx)%@4LxCzV3sV5}E!sV9s>Lm@^|-V8 zZF&ri==9&HPW$4F3-^4^p{N*yow74zzNsL1U3ti@Pzp66#k_^+A^xflt$e($U2=me zbuvhbWI!5da_;+Pbf))}t(9LplYW7L{Go{sx4Z@Wj7^Wvk?G#43>a?int`?)=yGKc z=NrkZwm_Vgg9UNbbs8}0t+|6JRB!JIM{e8~%6L9~x|3khpKuqg>)w$lc^|)|%Ub3W zE@8;6FwZ??=;QMh>J(?@KXAsWy>sw?Gv79Zz*TE8dHycS_FiwvJH< z%@J8?Ja1NVPJf@kIcFTH-^419^2piRvqWs%FkvX7@CM@2fi1=2rjC|W)U1dZBB|R# zSxBz^_8zLhibN`x+jVrx#!yHucO2>CL-$fDfJ*$e`pbBJ9aZGe%hy{edO1)Eeua2^ z!({CF7cS<@#kIy&=H_u5yhXO$ii@u;phPoNB#|;gWT7~%paL}!qe?UXT4qrgiD>8R z!ra8;aSw5>P*j60dchM@m0(v=2w4d(=)W8(A@p;OUI<-WN-|Qns_#NhfODzF*M4sr zJvlx?R`s-IePamc-RD-W+)NklF6F-KsgGZi<}b530tM;ta!U46=H?A;4A(pR$!Mdn zwQ4?0gl20(R6z?mI;B1IV;3MGnB3AjzTB-`*YQ~Iv8!FsdO&y$)XIgm$NoWsiGDp zt-AJi=CQ-}{VlXM^j2l2IcB%(n5))%wd~A^Cdik2Gum&Y$GV#1y!l1zcq_nP&|YQl z;oo-W9uR3CO2sNPCs6Ic9C#L_%*XS=B3;b#8O94{n5s=@?y2sKF!%NKzJ;MD(jM{U zoqoM0HN5R>$D-6fzr0YTi~?&o*j~S|9m0pA^e{zC7s_pmtUV${wJY&%_VO8(A*{7i zT-VX@yp=mC?Lm)QMUxb}R@K`36fi!%#4-uFFE8xT&um`BbdRB5?Z3H%DU@?n?6I(5 zmTR`_jZx2Da~9O>8auH!-^e3s*mNql^b1i|&y-Ed{&nM*=o8NVWqJj24AH&oN_p<; zH_+8oiZ1c6^mk7TW(PY zMQC@}_ydM%`|ya?3-W`>i*OEOEsIkV#tinQJGca6x=|Jy81v8ke1#w4WDmr3jTRzL zU$Dw}c}BWc`-$AY<@WH1Ad$q8%6=$1ISQ@EoOjU>|6z6sE-!Z?%DT0yt(~C8PvLE< zqvxPcOmSn(f>^ZAU}!Os<^H!Ku%{MJ(d(rStKI6#4T01KaS4RcC!_GcpjR;wCJKo) zjuw&S_ne1qWv`>QUt9Y~O@>I#dH}EfbyMhezv0GEbfJ`(v$8`-Jg#$>iJ~jwBt|rN zP-+qSqEM?mk|j)5jyxl~4qA%!__MnX*U4{1+-{aZunnn!Kc}iy*_O(C!)ksZ-fbZt z?vmoE!jk=UcHP&Bw6p2~j_=UC3krzGoffjJsFCO#BPnFvo$EWMtlUo&oQryMkjZ-2 zQO8XKJSRh}W_J}f3z7hPi`*OOSX86Jl&4H@w+kt+vcPw^EdmmeKK_oLNFTj7(ta(7 zN}(^$&P%z9^&`_2nth|t66q+5*NK!vb5ese4$P>+*~MkAgPpO^VpfY7g^7$nL}G6Q zrD7Ts{qYcw`8DbhyL_^e~8q=zbfa7UYbIZT*T{`w9g#BD;Gj~z^QJGx0m0E>5#-6Bs<@RG z5~ba+?kw#kuA(>~7VMiJGO&+oGGxH)p_(?tCg0iIVcvN?KbGmRDEJNa+^ha_;23Mp z_;QGBajva)!#D%+-rpm*Pa7~*AB^nIa&o}8XG`f196}7r+vx^I8{8jGUJUf;w)gv6 z3W|St|C+AI+bgC?HVe`}dE3=KBBnDV|pB;eY<+f4rhZ1g_q2nrGl&iU|Mh z&k$JJp8UW0z9z2TE#G1IZ{@Uqe+qo4Dbx%8cc1;+wGDC5=F5^{B>&^%{NWL&MoOi?@Z*x#Hb7Q z>;N!~;wbDw!N^i#s_qs3SsSe7#EYlceW_q2T0c-FVB=;kn_=1-R3YAQ{tS_?hFbD9 z|0RL*%SWIV&N|)@LfU>SOPw8tgG+z&ICVaDQSwcJ(vPwrOv!qL8Wt^{`%ewij9B6I z6-ix>^*d28$)_cnSAMcRffEqYF9A|2x3|4M0n;sB#*4ZM`O*>CrM0&BP~zi4B$4I! zhVy7tD5D(g0baGLxG5nE$M-^hjCG&9=R|vTxThwEZ$$J3-jNPzpgYTwVGnXF; zEu|;J`{P)*Q<>R6I$xl_9F(1N2)i3}mV*YBXu>}aEz1aa)i_`hL0)uZ z)TtY?i7*Hm2IziWN=Cp4(#7hq!zTq8MS{rwESz4{_U=rPl?PJlm)1{?S_5xue+Gd= zBa`2a#nGxXg(xn$$N=8M?L_%%J_+ivBLS<$$Gi+5H{)%#SnjM%pNCu(VeVIOx?X_u zaCJBS#W#Fkvb_2&`h$l{g#Xc&X8^C2l}M=iW8E5s@vPMMp3+)}0{epagvTb|$M}`H z%eO4Qk5Qn~ejxd92jC9QW#Bl}E$-1wLy&5}McE@8rSrUh znh}YUME%gby6F1&D2d@GXtns_&vM=C)tYEKk(@t%RMPiNApN3mJWEZoxfT*1;rAvX z1||}+LhYHt$|LrbcH$NMVu7(RhR82mvc)+s>gylRe@7)8$AK60wKds(JWc&|eOzA- zfU}!mc7=+54Dg=KpE*%v+9?H%<>L-A{6WsA8heVPeNmnD1mt`2h)ulb_B5Ai2cyYwiNf96>I4OjZH7iBjer#TkDM_|F^)W9 z*YO|4)II}@DbY~HT54|Iuf?0OPA`1 zCjfgM(El~gc~mo}Y6DRQMc_2;GCQ(_`Tl(Ar=$!V;IY3pO%lP=A`@|0WsdQs#Ni7e zad0XPkCid#KYgp1aJrVgHv&mC<2TukD4ZJToF+nvD>OlM1+YszQ_Y2xxJ= zh3+A;fyayc3gJ!|Zd8e|;IzP>8@RcnZ@dZ{*bN(4p#%Ap&qvm`-}EWJtdh7#U^(4u zTRp^(k}P7vm-|9yz}xD3lfrRz-2QoJ3jf$Y8H9e_6GFRMykpl0biyyGUcVmr7ZYGu zP2bX{$2>k-2F(}RYk!$_JrA$h+lb+T$ZzD%9Vu3vFIFsQ{%5nNLe1zYx=WTi1R9+LuZsbqSa@`P@sBXTL9((#~ z5dZOO#J5bz*z0x-@ng9^KKVxX>jtawGYBlp++476&QMPtnFIo+!R=K5F)-l%jqy|< z?#@cL^LxcSwi`p4r0cTE_cn%zwK?B0aGk~}%~BqBeWqI8E_{E@?-IyG2?AmurT)XF zNGzY}Sh&Z#18!{>@N;s70#U%`_&-wyhK6>m?9eD zgqD>-9mEd+H)1&5mDc90R-)AoVN~}GJ-4}h*_H*X(-RthVFMYkuE`!S z_P7coBU5HKkqYfkIE#6$kY(@kP~YoR+V>}Zs<%gJII0Vr-k`H&t4wDhj#N%q5Lq>&GIbTtXwTiw)X0rj%heU_J!hs!JhR1x3i2-ub@JbOM=E{; zdO;>WJtlQp$WJlpaofcWEYGP}m?7A$pK;=LjjDUdu(q1O&@SY=97y>-zcCH#TD4$G z9i@A0Bvn!t@f52;^ab&$Ve7T&LD!zxglnyOIfs9CRl=6e=W2#3&zIL zMWi-03osl;Y|8Tt7in1%%)8-sfF$vU;bXkqM>gf+>ezVB*X*vyPr)Q$q9OpH8TweC z>$SjtE5&TefnKcMd0H}!#we|F(A&F1DTQqIs_)mU*uuDPv$-`-S2yX$rj`RZ${U@+ zZLwO=9{L7{V3&nGKEEOD;XGtj((&1kfqwhjc*uCpyB*1Uv0*!zvG?78CejWdf}&SZj`_MNNY2*I*yd;>7C^;$QpdiPH|gYAp(p0uZ^-VY zGDBg2C@QgUsVuvXPStcuN2bNLCim)9?tAC{V__LjCDy*VopNp=Xl-;E8e)o@I?|JgHz{?S%^>Dcg`9wRAz5D>6E|di=_{(xfiMN-`PqZli_1?T>r)co7JRX0K$kHE zw1mgo$Abxq=F9i%T=$8;Xf`aGpczL-3}#Q-ub1uTH_#I&jJb*mK>l|`M@i_!4B`}< zK}}mjVvRC`=eK)LfV5K7U|#7x8b`p@7d^Fd5o2WY-d!?&QL^IN+%v4=EhGB)%kB&$ zEBr%?7KW8^o3lG-EcPVnRhtU#`*TCv+^HKn5-NI6F8s%ACYBOkqq=L#)X~gYL)UNZ z0fQo#Fsy3VnB*KJ(L1Bv$s|z`C10%N*BJ0X{o7CW;E#e|%5O$blV@md+o0pMcFfbd zqGG}O@UiQb=|`(fyQFp&Mk-|8C(EyqI(mg&z=YqpL7b8tskl)MASAM^UPi7x``R6@ zqMGx)7SWR---d;Aoki}~$MYjjC0JIht%9lOE>xRIi4K`os%7PDT?7x}#D&7P4Z)~w z-63|{)mDB#o~g!3frnWC^<#2;ZPbgpTaGzyebZ4d+G4UiV7u?QHu7VN|I|UyORr`5Y3&izc)Xc4Ym@xTFqo zWz@E#So!RU?VU3^`_sDi!@DVdG{@fnmn1eM*mREx3$AOGw&}kl|tkKEj^2eCgg>pCjIL z0lg=AMug5Zate7Zx>=POgMW3kghf5cmogg1(I-TTnb5gmfn}EWw5f>E%a-EtxSs`xIO%E>e?-Li&pY^5EyR3LG80S_eDoAW@U4+gK(t7jT%_GGR-+@u_ zJMAG};G$H%^JQ}hIvf;t{%RoVZ~7oOPV>zrr($;PWKrz~gcCQ1SUR0~-&h1X?@-JB z1U(ioo$^r5-s}bb4P~({!}nDY#nE3C2Og?-?Cw^xY%Dw$_UyT%Av0%DX%c!Dqe|Gn zGQP!i(RtB6_o#9u*e^mw=z+zexhR{jrJDt4A$KlD_ER5)bGI^OuXDKAhc#?zRg;Cb z-Bhx?;+Q~W!YsJyyq~@Qcw!j8=Epwh<{5YzE;> zM_sD_7kh6N6=%Aw3wKY-euik5|v-UY-U;Q`xrbmw+U3}m7zSHM3pLuI*5sl*L;=;8T^^Q0_Pe~24 z`7}utxD)f&J(Ti*8T)6SDc{|1Aa%MX@z;R+JK_5rys9f8zQx^f0Is#|!G-_)DK8gT z=)-CFUaA<(^aZUSJqs5((&02T?g}O0ZsTEQ+i5;FYV*oPa6*BNew@3W@>eGEbrf)H zG0}ZiP$a@%uoir&w{c(n4O8w9jX4h#D<`Xjl$RaF=E{34w!p+y7(pAn5#<90CfXm2 zHQJ|carCG50%+&AQN_%v#BGYU>ncIk4;Ag|R|q*--}s5~i&MRPAMtgknFbS$CH}#8 z0!({TOuMrWLoP~^^NMWcTAF7tW9a=+=Q`kJ+oAQ`Hffk~?o%yAoHv}a%YO5gTrcn9 zwU61cmIs3s&pm)4NZkb821Z_iAzWC`^2Cz=4=E28@UG} zK|9|N!-B_YXe20_%jnX%3XB1s`dfxvs5|EseGsWs1@;5+%O*j?N@X@bK+W!2AGamv+?jIR zrirl-vz_7)SWPthS_O8^cSFOS=&zp_XPkg&W7Dox=n;lu4h(@~C|(CUWga;*(E{H-H+z2A+L57l7MTQwFQm4y+T8~)b zl20xzEsJd8`Mfnd0%i8t*hZhvZXR@!D;ET+j{>qR<=4bAOj zV{j9xt3NXkbKTTgn;sPjQgSO$7BB=#KPx8}0BjGBS?i#To8|ipQ81hJJFTvt4!U#y z;dy_MGMEI-v+cS*{M_r)q$R5uZ%L1g;w1lXXHzFcV4f6^B7^sh%Dbw{A3?=*wF9beaqCBQ_eYPRgWhifRZ zkH1_G`~W}=s{`BEV1%Ev;(S+c3xhJc6xL;`(^BH zSeGQ0kRr2=!~XD9rqP#5ZCsOvZieqp%tT@v{ep9)9c5EEBH{q~b3vd>t<5CcgzZ3e z27I=kLybDwT9f$!YA^`-HCsoVs=<4U;`8B~0Qz(<$G%m>?3Ns1d5+@Cb(hr(L?^Iow=@d4ORcG1NFX*lpo7(LwwTOBsd9Zaa$8ypkS z`W$a9CG_cdB)R%)oEznLhjW4%rQE}%KxnnTR7&hR+=ilJz{QR1oGIq^;%~S0_f5`* z)UQR}8!gDsJp$VN{wd|G6D@K_z49&Vmgq$F1?56nXNKF(9A~f3_bp|fgC#HA8L3(^ z5JEf`_4Xocvv&nm9C7dT_ZY=JaX6~H2Mk?C21p%mC?)^TKRm(m>$^#%bY6W6 zm)a|90x@AufCyz9zjNN1k#ywi_vhVwCd@z=vmncVPo+@Zey4NXh9UR5|K(N0GxX?tZFy3O)>4S-2i zK|2((!nS$zeI4O-nCQ)OnEZqCoGXHQrmX1WHB8QB%`Cf4CpK`LVdy;no@HNla=^8o z%BQLs@#C163*7DyCS}~2{_+$k*$)h($c1ht-Cucr*xOnTSuDCHUd?PbiAJkHwx*vg z5f8Bs0KNW0osL}VjS90)X_iSa1&!ZfDo@9*HoWRjmSXYQ zs+lCzq0SL+#bH7k6Fa=u9zpV_w-So{~V|x)ddb>37PZ`uC->QyEKJ^8-Y%eiKMLy#Pkjx z!q5jnPZP}I1fF|#cv802P$Bm@C+uY+=kqZ2Z7_^zm}S| zeo~6MJwpp3zuAin^~l!gImq!TDarCNBhpM>H~zTK1XE-B2`WUaJ|enge`cQT5>$e> zR{-)Uq;Yorx-AYdN5-?vPLOsJjNICI&W^LON7xe&7==C=(t4;DOJG5i1$9S06YMnb zTCr-~bwtdby?mHuop3K`1jFC^j0T5qM7wy#JMW{Te48lTeqMB#>0A1WCN=-G7JPiV5N;!0KpILZCc0#M&Vsy)Ht+#u z;K#z4`uY%<+KeHc0yA7oq%qEtNq_SL{nVwJ5UGFw!oqg)W}=$<_&qV;! z9`Ou)Ck*rwy za1$zwV({Q&_xKtbS((`2g7UX5OBwD!iw4?=53QLM&)*YkRT;j*MOx15u-Jw{{e7Jz zKGri+mt&6iJg8P2bTc#_ViS*tKKH!7E7~=0yK{twg<r_{{{kZy z@vUjan8X+4MK7s`Kr9;gJ_sz3Yn!#hsdmI-e~DvOQ|_|cPDF1&H{r3U6vCDm##TLK zckAU1cB!36KB29C$&{psxcA>(`CE|^)j*u*&Ka^z0gExsk($12rQERJ2awt-H6+ga z5$1b3aZ#AXUn&j~3z>IF&zH?U z)i}b$oG+iZH7DFeP6;nrpo{UEPsL{mP~0Dm=g@!>Dri73`}p^@(sE2oO zLVS)`I6h_+G${hjpiCre1htRD|2;C=B`b+rWZq>~yz#p3YE)Op;NW|7|B+qx{A3r> zX>iaH@jEr0({_sQPO=iJU}Z{dp6bq-QlNa;MA=C`4`S#xKIO-2?5GylP(Wht3vD27npN<%2Jw;`Eb0O_MD=4*FN!yG7*yf*A=DSd()QH}xL^8_}N0i4#XvTLKY0VO&k$cG)W2gR&NtABoWG}k z3&GWb1XRv7Q{-iUoX85iC7W5tH=q);Z!-*mzvv?7@O${{JcT^9CVjFC)Q-d{LH#Fd z@ZKC|RtZDnv64<}^Jh|;F?HJj%u3_mkkpf{uo}+#gaCV)eqQZuzdI!ewh+;*G6TY< ze85R=-CRvIk@B9c`Zh2~=RX_qlqSJipU~S*BDrE`KYjl?Z$sb@@Y(eAx#K`JcveD~ zd?TGzj{~VBo*pyTRLLo7`t^e*V># z_qHD+hFi(OA{3X6F~$evQ(2QMpt2QEZQ(8UB6qFPPV%?;`DL28A$W%F4S6k_%Uqj~@2QBk$ME*<`egpJtIm!le0YYqYv6i5hzbS^=^BHDI* zBK?-36+Vz>p>;Rvfp9 zGzLss#l)#nUyt=t5a;2@aM%eb+0AVPA3f&eZ)iuOX^bv4bTqH8qYn@jr1dIpav07W41R@*1Ct8$gfM#8nlad2mmSNU0(Y+;YIfx z0ub*=T#w>nMFy8bOV-fFKIazA1;E~fl%EWO1z0B28H3$dNnSzU8xe_udA~?L9}4oW zPicZ%DfTUL4VuF@4A;}R#nVw9u+VMzDyDkY;3Mb@S0pq<7NPcYLEzJL!ijNNzhfVB z$=@d)WD9CfLfIfNlm0G=sm*God|a=3uSs{A!WiSZh+Heljt~`$D~=f;YumTTQsj04 zge5g^S<_IGHyS>(3=AI5e62sO*VE57ZghoYm3=(4^ftzN?|n2u9&)kOCH*;m^%M-q zeaO;(GP1t`N<~8v-113AG`#y%hVR+-yKWEW`Ej2BTmIg7MWXCG8DOpk%^o%56TpR<#L0ywy=bQ225I;^*qF<&xcBZY ziq(*$1`q;^0be{QIA@0XCmXU-?+u#W)LVPwFs-o#&@6lzmBahDy$-j%Var(VnysBF z;TO1+*|`i1o^tQJ;ctm1s8)!ypeU78BgsXlY|YwMrL32yDvlT zqVaXB7H10GdNgqTBCX)!a>>3s!7Hi^MsM>xniZ8`zMjC+y%(}f&loHb68I}hwtzw5 zIXp6!_TcocT30-6V_Df@h-!QmlDaH;Qmz1u*afRmWh&Ki^=V$gDRK*VX_RCw@| z#c35bzXpg{LqO4QTM^B66BovPIhdftuE)dJ$Y_j|;>kHJ^EqcugRUlV_u-2EGKsNR z*agJWTYFDFwHIh=8`f}mUo3*+ANPp}AV51|m`j&raqb5LHzWf5bM9vJ^}*ifu3+Pv z+bp75+0|m|Jr-0F4v3(IW?e8pZ#$a@3t(J82yAnexC^nOqU0(ff%Uo(d!fl+##N+t?Iqgs~h-+Yi&~g z=jbb%`9nZy#HPLK&C16SCN_A3f+r0)yP@$a+?UhZma%gT!jk}QzMFJm2UZRBXYZjO zHLw$Z5MAvI7bms7bM#Q#V7MkecUQqhlmEleac(_N{i<4m{^)Ui_%u{N;xJ07HZKLI z2&%ZML(@m9IN*zymB(8Nl6y%_A+GnI@V~krdbQosuMMINk-V9{n%4) zX2#@v^>|(fDs0U2=k4s?oZnu7^vzYCCU$_Q1l73RV3X@Lk|eZUmt7tT7S9+9&wK5= zwDUt~?8|eWCvQ+<-B^D7_t6vo@$T%Sj#H-hO?@BqX!_zqEgfp^fDt}Zt`BZF)M*bD zjg$t0E_Wk*oJmr;Vx~Yx08)7@$am;9t-xTsO>BF}H+6qMH{E6LkaUBDHNEs4a|sjW zVv}I3O(YG}O-DuTJ4h@yPeQG$iX7*j8xK|gz6&zjpdDSy)VS%~7fT5p*$sdf9A=-a zFls}gc>q`bPS?5FBustUMTZ!r+Q8g~>z}tljJb^kS*Cy7#uKV*g-zPI)2~ukgP5^s*rZmTdY53jHnM5Srvas zU!P)>HuJuln`oG^uA(!qZYe=z`DvTU9+sOj>2RRt!J`XAxLp)Gok!5ZF*p8}N66 z2%!O${C$qd51^>C&gyRd*Udk{+`RXvlCG5+EyMxx)&ns0iA-irg2sBE?E*?3jr*Kq zRbMk!+bA!724MAGrX4rYPjF`n6V8LIYIn!`xN%uV;}*HIYVpp27n^dkuogei<{~by zdc^)FuGf!ie$!KP8N9~>0c3V{)ZbnVlCXWzc3p{@JRG`7hmjTmKM(2NJR6^TUkulA zP)_Ie-uo%l6e@ zpR&po$Q!}bSJ*~AmIyJwJ1xUEopw_*uh@d5|Hp0c#Z-^3V8g#wJfZ#VCEk8ky&q{B z9%|huQ4bsYS{}-MfRzE{oqf)+m$h;6A>`QN8N(L2>r^I+A|@cT_P|nfEyB#YeEh?v zzXCys6&>VUo_nxj(sH~EyWU*&C3_(A1?cM8M{h!7IVV8F+8{A~Wa9BBXuV0V3E7oH z#WOMEWuk^n=gob9*DGZy_(el`BAZ!EM@~|fXL%U&T4A*+d~uSQXS(yC zCkFMWJp-Sd!FcsVphAS6NeDx+w1gpHuC&Tbdw7$Vej-B8yh*Dgd-52~%}>6;p{WOP-il7sQ1nOtYq*r3w5QO#vH5bB+7o3%%`LmlVjs zY#T&0Ij2Ur(K2G_;ZjjF#NJci3n<%DZ5fOa4!JvekQ~5W9*lpB_Z3-%#Br1oJWqU# z(MDIA`>Di#Q0lSk;h>9Hmmn@(CZ%Y&V_8m1#I}E0riic z{e&0;CU-I(!p44O6=YGr0MRn<<96ua?=m3Tur(%t!h>M~D?Uqb(*;tD4X;*h=%nz} zh;{)(&k^?ZEAig9Z&sSjYyT0!-fkYR`>LR=tyCM@=DFZU#3Y9&502TT<`T3mt75~@ z{n_DyOr{xr!YL6`M_5XSoacMXLVt=9uth`H-<>%ni_mYlhyu?|w_hUIp~oZ{n6M~s z8R_)0+3KRtQZy!s`)DzyHT+BbYg8Cs&o`~Kij(iXQ;PL#F3op*OMu_I@Z}Ww;32I* z(3kq*b&JNQc$Ai#Fuq;DZ-LjCs#1p`( z`U_?xke;Ik8j<3~(5F|5h^-^d;P|ZOl+)&(q#CJ}@fJM3G?=J^<2uLG-EUDEe+5i5 z;?MLa*C)-T5F682ibv3-FY#CQi;T~irtf`gsYM#-hm$+B;fwf~!bX+&EeMqjh-40* zv1_l=sX${LaWc*MPg1@1x(gmfuK}zSpYaWW*Y66t;u`m&uXKayI|?xXWJzk;Yke`U zl~gL;`XIqHq<``apA5+lr8Hpy(Y23GOsvXApk_d#Mb~`h08&V&hx{#IaQr32AyMVq z1uC5@E_|YMmys{!40|G)iN-?X}ta$L>f`wA>k%SHQqH`b2;r*9VM<8gTayl~bX z0=nm^TbK8hQ>BiPtoBfals57}mQ>dBtni{sWDtFtY+XJ(l9*bG{9CqFloVkQp`r8e za#_{GS7W-iNAZlm{o%%?9jIL*-C9qlgQkjLQ0Ww&U`V0b8qw%_PPnQ5*zSi& zZ#E$kxM*&%uov#%a^WBKnQE;KM9_+3)7~N*?sh>G0FY>&Hhof|wr7yF#@EkEuawLa zN*pDC_YM=UzVydwN7x*aN%;`@+E<@=-NE((mlUw|^4F|XP_LciEsLeATq-@3nWVw8r#}NP}&&)U&sOzj2vM_tTZ*` ziDMm{GVEs>z`RiXpX|GHOcSL)0L)G*8-_UAe9^gy$7G!;Z8TMaZkAvs>vLOl+ zZ<{;U02eEbfsh`Qx-~NcI@K52By9D|(a6#C3+DrXI<#yVt=WO?cqZ9+{h!YSk1&&a z%NtSgX>f8>XiY$%+0}K}-tx*WdcAgKyGrR@}v(!0s~hNdE=q z+J<;Qypl|(i2j#j`K*ec2*3;3trv%7HRf|BzBth(_#sUWU5TQ{wSg5%`A)zr+k%DcE-0mM35ZY((xVU1FmB}AVWU+Uq3(=ukK_uB^!X- z`7l=J0GS;@=L6OPcvN>i4tWkxqgK^ZFGHk&1%Xxr98=hHDC712I;p=uZOQi!8;Wf0 z!LfDZI3w-*Kdwus{Bcu1+psnE-hUFLf0g}zej_V<@S1uWB!O4|72 zcmHSa$uR?dN4ka1asI!2%s&M9?`r|ZDg-FXcvjD|2miD8G^xG=6l~^DVf{Y|*grks z-~RO-A^vBRBB{7{4F9wD{A@+=*~F$Al`tay|2)Hg`5#yxzx|>W!gNjTfB2rmbii&| zO|s|s{@WM)>wW#pvoN2e_Z+C}KXmusgy}z=|KEQ+TM7JbxYStw*8k%H|Mnf#fk2U1 z3$dSLl=%PlfPXvh|5d>MFRlxtoK>n`+{%0%qzaH>E8}k3ZJfPWw z=O>+F7x=RPzC0{}#rl91#Ms%YpQ^FTTF|d~Kp{k$d*G>=2jqdu;?r=DB<5Jbr(cD< z0!^Z?k1x)5d?G+Iqg4vj^(_~U4LW&lMnW&i^zvIA9VyiP_xg6(1Z5isx_ zfG2S#3qu{VKkyQM2UYap^oxT$D}dUGhzIjtX-m@C?<3ur@5t`h*Dd&4<-}N!$(fW+83$4z`EU zs8>+o8b^M;mP>ctwX3GLf1c@tExB(Hb*k$YS-o{E}^J zlZ=|%j9xCh=V2CksN=N6Pih>Da$`a-rYx?-$(H@po#z0Eilf!D6fVS;Z0b+)xVg^I z)bC-I3=&}^p>Yp^M#Op^p_H*^J1X0i268rVV3h?$R zVUKo5ltw}^UBF>>@7)k2NT3vqeqyL`_8R|M^ z8t_DJ(v=hZeHjdJNS0F;>*|*~XQ%U*%Gh|Nb&J7BOR-bkg8;EJYV^+lu}7%@y8dPV z@t2G1H#zw>#C2}cx1z_(qFW5iCcvwb0URRi+^^`QWKRI#OJanLL4Ls#Cq=0HWaQ(s z25I8->lC0nf&@iW#S5_Ip|I_bv&)N}%Paud^fdkA-Mhxuke)_Yxi907ms=!CU|$$#!}(&1tpGtLx*Z? z`nN?tVe-HX`gh^{gXJSIXKoitL(7F@LkP?b7=Ug)0&0#nepYJvBTPp*QN~sB=IumK(XOG98-!)*4Ayr ziwPgrYZ??i{dD~1>N~#sb)fgR6kcJW?YT}oT&?y!DxqM#Vi(+?cku=H{3I*bpBz?x zzOLeve6XXy-t7FH^LA(}C|y`|;2*}ZH~o~LfyP)h-YEvxVd%loya`em`Jb%tsVs$o z`qktjO)m89?4w#_RtOmR3*(*mDd%dnO-?9Me9d{xrS=}dHi_`N+%;Zbb~R|YZ<j_g+7=u&vSjt7dR+v4(qveyAFKbM^^1YuRzUn$I< zKk<~Vw>_!c``t>Fy{gvLCTml78_)odJ6QHM_F<)l2Ndi0ZtzYT#GH)w!a*v@5YHJN zY9NSM$vJL5+v}D4;&Y0a&z(GYzrCM+dG_YYNkp~B@c1rM9HYX8RNVdJ8Md3Zv>FH8yP`}8&kV~magkknm1gzad%B>T##UwB@Pd$_=A*Y{e`d2J`R z7uyA>j>P5h-4}#zO|}+`vhn?V2$pU4hOQ@<{r2A61Z7K6%oksYTJSJyaCULMfBOCc z>(~dp%AD_s{`#@((Yd7H$maV{e@!UuD;E?gsn&>B6rPt{T4(U~8QGmP@Y12|0Mzad z$jS$+?_k3_a^cAoWMC?$yKZThDSp_x^V&!(0+x;`zI^&W*a3|MXQXmPpd4H6<)kdtL6`?%iA#Q=o9U1S(HC3?3dORXNH{ z00L#%Gwtaf!?ngxBN}o;m)b!i$;y|4RJV|#*Eti?pkL$FX3zhQ>pbSbH+ix;N@LWi zgfAYdW9~RSYs%QG(<6|-)@fS6t}W21-ujf#!lfjj!d8fliz|Svmy|TM$)NZR4=R5ORsr+g)!vs_C)eGumRA zw9&T|)#o#D;2=y8%h8{G{YcH{8K4e$hv`I)ORg{J5ZkU>bjdT9Xgo3U*m6ogHDIzN z!-gA}EBm<#4{MF)su0`X)Q1d7cD~*S*2=|#jLw!`ePfz`Cw6^am5A-_Po;sHtAYHb zG0)t-Xo#zPB=&I6nUjw_)o*iQ*=LIm zu=ytUR+Pb@`3u)0g%|HXGvI+z#Dmwv+1Qw>CHk=pyK^D2t+i*H?yDr)35D-!clLN_ z?*U)8uKxtl8@RXw=m2sv}PU<0@i#gV;N zF)C}I+T7dL?K7mXextG*T$is(Y>8r=J^jR^Zz)K*a5Sf-x_uwUD zU-s!w2kM_1;n!yKY72#CuYOC#^!ei)^3Y+7WW^Bq*KVjAa9kXg_`j%k6h=gRN zaPor+Y(sq)bn2}|2`LP5;LiJiJAf3_InjRWzp6vNUKb)-3EBozi?Rp3rMDov43ag# z(af&TgRtkLEyBv4fbkluP?x(zh=}W>oYUqV*kE|P0Emk^&6I9x+R=P_0+`qn9(CPloObMoRHBdXH+)G8n_86G#~oGN_mG=8_!1l13jzXf@!Q&ak2UX#du zT04O4I2QlScx$Dz^!X{>nqKxmX~AA*qiHwa`PoyJLtYj~|B~~g96szrRVnG!H(R3> zrqTJq;2!G1Jt##~ox6uy%$+YUHZD+M?jh~3dx*u{gM5u{Hj4|kI!{KIzG~}Fz~a#v zA-pHs%8;~EZM*}X?BaW?4A)D^eHep zd}%Hdx}ynO(T(#H?=AMufDKT>_5*{06a23=eOarvG8dSxu@HQsDa`iH4E_?oq3WUc zV52%D%Q?98e9PYFH_)w`EmphiCm2$tH|lN!Q)^P${8%M>;SUZTapt2GwCAoTVnh>hDU=H@q>%oFJb zAxDJvGw5ARw*W9zw)DB2wnVPESkziXiq3=eC`sPVER-D}vsw9tL91dWU-kP&oH(^p z6En7~F(Unp7p3+lA zRk4f`y{(@Bkw*)YoPL^BA-=`n)0(PPw%;H)&)l3_n!=}PIk55~-OQpq2fCIO!j`;I z5b-5`^$~`&Nf%VF@;yp3#m(6 zfucT}&C{6|#xCf1AXI!bPIH7>(rJPX*4rhH&Rh1VjZ*Uh^~)2k4+fp25A++cGt(#y zEshJ=ySI`f45d%MyEN@aRVlYl!CmdRQEuBWCMt+iY?DxxHKRy3BTa2-$UUM$+~QF< z%(+NAbt3B9C(SjIf}W=unvSJrGa*7k{XvX9N!{xgr*_w#EFjb>#jbe>(zXp~#vvChp{9YKdnSi&# zRc)>2IRC7( zI-PPHZlMs)rbTAqmx%$PosV2`q0GhQ61s#*J4M8{7IuBG{82VXxr6gM&{oe~>GK@u zna{t|2ioZ5Ar@s+OLrRWh;&Tey`V`7YJg&^yYc-lH z%^;h2&@n7Uve<2+s-N$@fMtv%DH|Z-DtrpKzZ%i_-A@Jpl-SF(GTP8TFIol`zSx@~ zc^)Pl-p@TK+|6s4U}UYJtQ0Ki-%yF*%4bKf^0$%z78-#=CYq#`FboVg#FNB!T?p!m zI!xf#QbV8A0RTrntGpvyw($CUXIFocSF$99tUl`s#vAM7Dx0l9Q|S*GPAoKN%z{AJ z&#fexwq|>cfMgYz%bng>{f06deMpVw_rbuS0GOt3j!mgqc7#FU+aY#*z=9iGJqHGb zFRIxzWT3F80F|l^%kPopN5>nopMoVPNcT8RExBc$IcM|F4Ip*SsVrhgf4(J(hf#0k zmAHlA1Kqh>^Lz2NPaJqVdY5v0M%Xomp(&PW=`$5y`CE3w*x;@Ph^icTPfhD+J-o30 z)*%6iB5R}freG->YH3pAt>B8)PY@%6ny9Mu%uwv8`TewG=Wa;PaPL!rhq;~I>^>*G zimfG;1#C(Uf~zLQ; zynr}KZ2cYDWL;h@zwjDe7}M6b?`GjHiOHTW*aZQiOJS_)W&4Ef&XhU&9t+kWgu*Uf_W6dMM!<_Gh ztNXbh?9((!>^Hh}Ym9BpgnVMOF1ZsbnZkGU6jD7Rmql$)6PivDf?VNWAF*jr>f}KJ zhDyAYFq*3dGzVH`k+XU7v<0d?oXX?`Z~6$> zPHp*)C#{`IEl3ZNvqB6qU8?Q$GjX{{b-ap42n#DU!d+0T>?H?`ZQP-Qb-I35 zCc>DIOnA&OolA>XF)EL)`HxXPYdYl0!n<1(iMy{eq>cf~wId~N(c1K)izXtp6aJ=@Khxn{>{>yUOZ=XOA%}0}WP$f@H z=*x<@ozrKcuyWa>-EyB2@D_=vE#ts7T5U>dv{Z0k%3A?QilUB9wB`fnS)?L6h=%E} zk&^r|1$&>G*2FyB5hlM6KoRBHW1`wVPkdE!tl_Sh%?pcVuq~Sc{P>npzHnDnu!sr6m=hwIO zt-WV--y)l~k+cPH#MqO$dt4rzP)5V%Vh_L;u*Fc()C^!qUUDs5Uij>gZ0la?7IaP8 z9WJ`KJa|)h*U}=0G!yH!*FS>tOm_(voYTLhakElk@8vND1&{5oLqHUAV?mM3IDc*TIn8q}{e(6MkN_r&**R~7F zV=+-mf^WKM6WY?xmgyTy$yrn{OhMu-tRK7v-dW6bwGE|7(6_7qq`2xyPU(Tn)bT%(mvqVBiW*n3@`5+3 zHE%)eQORbSPCj#J~I=e z_fClDxbjDJvOGgBJ|UzsOD`s(>KQJ*CvAOMNqV+`EBCYDUKuAgAzPjtztXKy1DjgO z?;TU7iKRe?^23GC2Z}Z%7-r)XMGwcy6wg~?ZmE;JSJ)Xl&L51~ZAR0NrmqY2>mPVU z;)?o$x|U4^k1bQZE5f$EznVaOuPOGWNU?>&re@ab z(zJ&k#;lePE=U}{b3sR{Hdt&(bP75mTN(ysT{@|?4V@r)Oul!1t0t#oJq3yj^4p=> zoNT#^LbbdIS8+sn<$)Mm5$H`%lC10lZ3n5?Pa=P2|z-lJJ z@ReVX<@}zW@16Kpmx6#hT`GWM^(6Z+<|p(vzc(5HWO}RJiw%&E4ghIO&;C6D;4S(T zGJtk^MA;eLGXxQsb-YJZZ9Ad^G`xoNhr^L z+~VE^g=pjD5YowU=s8ypF`qnPx2`!}?$PVsnL)BFIh8$xIF|S;gV+F`ZrfWVtE3U; zJqqVlge6M(`swG`7P0W2$E!U~fCam#Ikg~aRMdN!hElFxbNaqoWj_0OI$DY(z58vO zEv45Z*rxm(1)X&a$_DT{_OEH4+3|o#;6vX}gf+F7?K|-SI1mqH0>7 zIG1Aa$~dpPAUcIvxRtQadwF$|5eXC>g+OfA?5$)@d?qXXw`&bI#79mmS?Py_{EI^6 zO%vDNM2kJA)TxC8Oq4V@21?FaKACsOSDZ9J6!c{LK-fu4c9Xr(JT*?RCa4S`wJgGS zr-9qgX*zdW4rsaAmX59(^ztBirL^lMP*$_>mna%oq|#E@iO=jYfdz|_GWCX%b=b#+Vy~H@g&GjGGw!NIWYf^-4P1+saC(&aThv8J68F!N4jhyQb zNTwdlYP%}oLOZ@ik4&(uY-V_E5p8ktbq8R?vcN!Ia;3jDG$GSJ%1{QvyhdQw-hkO6h0Be6xiWigu0pKDh9uK>J2*-moyYy~8c_Nwnmrbs zyhb-yNUFP*3bBW_`0{?a-X1UWOS}fRxc4xN<>h9f4;zROEg^+vsxSq0P?W5AagNgv z@pIkY(3$`Fd4OIgDUbdrg`}{Uf8=aVi^TGh&|F=Y^;82;6Pq>Z3nrP#%6lHRciZ82 zu?T8|OR@JKu|20G&ccL%c#ioOMZz?G!~q5_{WYonulcDr+N$%II`I@GdnjIhEP3HA zWS0+Wn?N^Kh4{3so%|ydk{-B4+64CuYL?;&l4h02zCu%}xpV)jzCje9xlw|%REt~0 zALMlN-7q~+4CJK4{QXrN_01c5-fMe-st>e42H_mlobV;SX(F+D{;<^TA#IFZOs4zZ z-QnCf027_FXY&T)IdmlFUn|g4*U8(33KVXe(vMAac8(nm4Lv*foPrAlC9azN*&T2G zlTif~sKbyJgR2LZD0)M?Rj=-byy*Gani}`iNc?LqItHu`6NTMv5EYDN2iFaN;Koo| zHh2w0jb@czv-xw&(lzpt_+RXShOlJ^GFdM#ZTM9+36PuwV|UonWMZJ3>CYESy1$n# z0emOop-d&hgEsXDr=?OQRgjmp5jzGw9)MO+?|AIX8rOai=eM|OJjNW3owK|vuV2`G znoJ%JavvVtZmkEK-p0`7+5};+*k_dIpc!t9dbqsRA1g;u7c4B&{f9X2-pP+%qjk-w z@nvH^KL1DsDDUBYHEV59KKja_F`cK9p0?q4AbD=7_7n`VbMIEuzEm6fWqzQj-#7C` zd(GmL3E9UU$(L#z{*lqy3H&Ny!)Q_a*w?~~AP20ftbNh9c6eCkBf?s=xK0ipcOmudJj|{{R>sY$6sHZDjFC4BaH6i&oIrBD{ehGn;c~|8SudRWIA}JH(1p zyIFFQ!Me6*w6YBAz4w=BGfhh(GY8$x_MJrB{u1p{i^`=`(2ce>9<>q8flh)2BWWE~ zI8~BIHhZDj7XxSGsn_79_Z}9ql%n$lSyLt%lo1=u8uKG<21Sr!4Ikfa8ZWdy(JYSI z<Mr<#C#(_KFcZ==9tBMj!MH_tBiB$7S!{HyCB{(_o^OF`0pYDG~)%+ zsr~`)V`Vj*GqC~VNOJJpVOPCX6#_!2U{nG@RgDq5ZwX*`;4u8PZBcH)?#Kq8dg;eC z!;Wjg5PM9j=05rd+eS`2G$@0}9c|%)@NJ^+vg&M#9OAtEI-G-zY0R*&E4T{oMdmhl zdipheiHF%=82IbYd{xm$j^n^h!$v4?;_A=5-v)GDDwkv1%bY6*qbe$Jroz|dw5~HF zJ$&Uco?10#LUqKppy{PxhzJcTn%M%g)=on8oC1@4fm~LqVp`_aW}YL{py1hP9&7nj zAJ=m|Wc~QTbEB ze09h{K4G=*aoR=#G;raBBpzok0O94DM^IK{VsEqCvNDmO$X2s1UJgL_TtOF;8T z(c_}-c?;WvI0fkRQc+?6wk9^bkn66R>tQO~=wMISlKnnoO9wnFqr^zb12ZT_Cx1IN z;rMw>3wGk3e`F8G&I!ZL9mTZkywX;olfF&lJSyDlMPUb6q?8zp1W!vSH{@Db;i0ZM z0}ZYz7h61jfx!Sj5I?GEc182E8RjnL0@DHqT1v0O+TgyEre0Ctyl42TwYw&hoaLR2 z2nvzU0*@AYH5}J^pO`HddLV`7h`mc?v<+`(Hd1eN*BH>H8Mc6S$QOfc!9uYZhmzGQ z^h(7Y>eCukr_X$SnG$jBrRkNd7KW?5km52tm;wQ?=9Q$*lnbNt4I8EQ=Lnabs&HN_ z_=edaVIY@0u;+w-=u;Fd8`lHjuf9?<+e16IPYRbBYV-1w_P;RH6 zTVodDLqj%+Hlua@aZi4rhn8L*#Hut7SZYsi8UJ|X_45m?$}w)%)z8TMtYTQ2j28Vw z#o9IUVrokny|Gsdii=a-&aBRd`=oUC#_%)Lb=oVM&p)l#wmKg%SbP# z(@&@vZmWsVTpocPN$RA4mKX8#$^>-0vXSloYwyhCp+ z&!5A`XJ#Jn>-xNx*Xw!Zw+xULnq65j9Kc`qNNOhbNUDR3NVD?AB-7&Cq2TlyJ2Rwi zYhp@z>kGO5py128dd9xm-+2^>DrQNHu;TJcsc&!hJ&MYPr(BN;zbF;y7}<3HWCh{3 zh*`QwpcdeXMkUJ|$}{cc@s!*hbv!%tASX8V+Nm*45pC4k#zOYKRI-0~tBj6u_Lls# z@u~3;!;J099N`U$btE-PByuyCYpi7`WrmKjJ$=Enp4sl$jXwJ+#e8+R<&;%N zPASuf0+(q^t!-`(v&vC~Uc6gdk!5X}@%EZAn$Z65;aZgaE+!)4Kv~$kK9EOGIuscN zttk$D8Q8jNwcPFZGVgd!G=?sf*m;#8PifvTXC-DAo*edU83&@eVp9X3jeV4@WmimS z?L_wb(N`J>osp^KbLyLz)Cg7DYTr?;d|~J;H){qYRqm> z7WIr^O4?z`3Ee8cC28xge)BNaJa5MV0@7Y1c_$xO840sbYYnq(}ImS`0^zNjt zULiS~#J=hOGZIfxNjWNCX&_gQUK7RDT=ZY)UtUQz>ZBK5$#TE%ovbjqQh;RE-O);l zX}2O9pp-7ou0g#QtSM7k*vFDs&+~nYi{MKU>kU6UyH<{H=r`5N{H~B|;`_jg@X3{) zy3KNDt(dml-t1H(YCxP2TWTvp)ekf|T2JKL&*|z!j=pTl_=pMFMuZ|9&@5Ar{d{e> zribt$XX~n%?i_0!rv;mumWSb>`0Oi4^0U5PhkIzh1p1?5K69x}gK)GB&!T6QiD@p} zoKE~&Kh|Ct%|?n(GtNp6GT?R~b!biD$bk##j3<3DS!Cw65hy+>eMn@}VpXonriA>z zwMP3yRl0PrWX>Y~3KcQn_N!}KLoSy-tbeLqg-;ErxgUaa24Jz11){LyH-LJq`F*T$K(_Ky&g=k52{z-km6u)flY~7s-cp zh{JQz2bb0BX;8~4a*@x#!YFPIT5K0aMS?pj(&twf4P|nPTEKH;Qj^x9S7kg}6 zi5}*rel)KUr8f-Culkfz%{|-t+91$m>Jmo@puN62QH7$b{3iX^?x;IhlhIC{94hxo zwkivc9x4kMm9Cs`Lp}x41I6q4c%y(vwpz>pdLECIS0v)gzn1?KpCxspF-dmwl(P ze!@U$rxBT{hSXqNmGd)Q(|axSLNcdtHLn~G4*zoF(D7rvbvXDC!pHmfGlgq!PHA z8iBq388j2l&pq87b1UcoPJYCH0Xp9Wa&p07EG~V(f~qI%w2~_97OBdik2Rb_7fuSs zPSEX~?26KFuJN4KjjNSMC~*^h2A*S+TT+)kwjt{=P-mQnW9jqe95HxVG2}IZpoxsd z=)-Q3MiUARco3>B!zRJa4yayQ8#`fISNpC|nRa|#&8z`?USha~~F>@jEdcEysr!WDRlWw70&Y1!PjGg&of0_tp54cOT4It}wgmv*J#rTdyx^ zWmF8uG#wc!@HN8Y>Sgt~-jUMW%+Nqb$S^K+hhW*w zP8v8JpBG+FC<1MQ@v|LfpL_ndN3}=uzi)&aBncXffg4IHRW}n_s#6vw&<;r@zHA9O zcnRKuyKx80GAvBHyA(mMAiKtWD6sn_*a*LTf;PhZ%L=4~WlX~cmS7YeT^Yu^ziA)v zfHf%ytzR0~1IoGcwQozx*SgoFn-1Spx&U%Yz2QaQ$0-jFY*8SI(imi>6=5lr?ke;H zyh{mjjHn10x{NPA`Qi4O$GC7ZbQY)qL%}p<dy$Z8HmR+ye^?=^;t&El4trcGg^8=DTHT;t#fDAHO5^_`Y zk1*9qM#zIiVRzzntVJ@D!vJ^g=GNhN+Qrvj`{$2`w0Ba65og?S*KbN!#=YGXHIZED{@t;C@Pv z2b_aAJ&|63vw6F57e&*&+^Gif^|{_0TImIvcut$DnT%GVFK_6LG%+og59)Dbw$j>g z(T7)>i|0wp=ywkU)n09s&`*E_@H8Yn@;w1UbuIxdz0v zgS$$GXwFGb(9JdL-u}K`pF$w52GHoVj_uf0^A9kZVqpWz;f9=tu;~Ixvfv@8*r*02 zVciUCF|jc6fNA8tlO44VYDye1Hc=e62wX9_0<#y5fdRl;^P1yJ1ZNfcY1XwUMyOw` z*=ei9iEVy(h--~6NuW614f8WJmo2|sNV}wAL<n9Rn)2o{ePzOaE**%9KBSwKOjqjGhJaD<0-9 z!Au|PuU^^Qth=HC=UxScxRPVP2>>*VyJ+EfJIfs(_x^Ewo_D`iD<@FLG_fb7%tCqO z&F`}*d-iacDBqORrdU4%5Brk28DMry1eM>sy zn)_8fmGC9|iGb5!jgl={2bBusGGFgwO~jc!eAJ%Ird6j>P*wB){{j>D6_eWZRRG)Z zRbPj%k%JWf5K$>VZSf4xQ#s>3M-Cc?W8b~{^d6>N8z{F~Kyq+Wjm|aP)TUB1S-~mT(@3Vuq}s4+-!K>gN7iUR zKcTPxJd>qXr50$xs?)AK$`_+3N%xb03wE61Q0E#MK zzc7>S^v_xDJO=CpvY@WK&k&nOp_3fCm8BKc;bb;GZ9S6^@ow1duwJtj zV@NbIUfTMAsOxBwYfLFjk(+@eeK7SD9p+U#(krV_SoZXpQP4+5FN8P0G;*avJPUHR zdKHE}9^o?meX!Frre+l))YCN^X##dnL z+!6*_1UxhKX{|K6h@%w1f+N2Ubl%>+D7&f5S4TFi{}$?0!y5u|e$CQ! zdN+;yV0TDuc`B>~sUPV5wi^#bT%)iDHY+S}k!n4Tmci2OitNhaFeB;0`8itTwPc9I_P@`NJdByo=2|=(Jrm z+)#wWJ?t##thIg+1C0oQ5c@v=0NbDvu zylqu3IFGmf)y=ATw_8~N$_jB>)%%ijT^YbBB zj&ed*P`~^0y}{j@NPfCN!EyG;^3Ym(D`2-OKR*g}Ad*|N^DK~pk)se0>V1Xl%ZO%C zm-mpAOP?i^qUe$$x=Go9=rNHWATsdM?R0qip?l2pV%Fdo5%;Kx5|@Cy3dNbzqok>{ zf;l^5E21I}-0+>cvMcOQJPxQ0f?GloVH*ofbBbbAW5?Zu1;64b;Uqp#^~sA)lNoSAP`cg!nz{Yv z1I^qr=+YVv>~?DFs1xdm`TP(eJ=;8EzO};WpqJy5H6rRe%m@tiA|!%?U#c7)EQqTT zxATeLM;@>3=KSz;O;L?wODz6-9^zX_=Tu_hbSBm@Cjja9?O zd_#7~;y_9K+lz;Nc!2@`MvOvigwcJW;ufAbUwfhWeg+z@j=8^me_E`$cY*t);G?sR zy+P`ef(4gB4vX9F3iA|;@#kSJw&;H3W(NwjG%8wF+RGOLB=bM+p``${u6?o%Vz8-fTw9Oq8c^F;DW@-mD_>w&}1vFQ9Vs{`ZdQYFu&3Kk|x(IV13Q$`tTIs>L zd@SOUhf0!Q+njEhPfz#3*2e%rQo2Me(w&u#8Jpq;ESQ;(CPTbD26dwmONLEN$L%hO zP!WDV0Fq08fRCv_wNUyFf0&V<>YeI49)1GVM)-u{S$@_)FZ#+kXG=jvZkxv#n-M1Y zsd*`Mloe5%)Gw&!5`1;Zps5_ls;>4tX;r_2j3CSTIek6TL>?{8nn%1*do9HKm^U*N zSaGtG&}ovejNiKFwgq(|I_(z}ZFy>{9iqz0s%)0|;#9|{& z4nyreK6`&gpc|pJ@f2jkG7LdYf65xRToN*@!u+ohVdbAA!U2Rt)t^tbOo2(5EjlXt z2fFN00gMuRUC8a25vkLc(jOncFSPOJqN^HTZYyxL(em)6Amih$$^xP()*pW+Xh3g8 zf(C=}H2S4&7J0{5(CEAP!Fik~b3ov>QLJYXc7B^-CTGVaz2tJyl;O7fWP`f**j7mwe%_ zr(`o^+7wjnrQ6)w7Lz_!Y1-x%`AEJldvb;el^mmu0u7NCk}rX~;fxT^S>QAcxPIQ{ zeha&E>y4Y7a^II@>mAVC`;OKg9|11EtB=?{VYxl)wNf4q7Y3%h2;3s(z!S^(a0p;| zUSs>ULqR{A&l99Lv{$DuQrCk}+dMI%0hMDiggq7jyciM-N*`x1z`GmVX^OFEF6s=D z5}i4t;$pIw_1!#Zk}m;ZEb9|UJpY1dA4gxgtaJsGBx)J-fCu*2?CwdIOSXd#wdcp2 zjVS0s2qI@r$N(NQl~E1T)r&46-?Qj}Y}i8S+6s65g>V)?Y*P3-OTL9Yz~@mGH#7w! zlfhZ7Rdu@3gjqi$^@76pN8=VJxqnZlkuoo}6sq7%G6k(6{LW`OZ2$X>7UAThu*=Um z$;FeM=yQ+Ue(za_>3!^bVJTVb6-)}Y%?Nfd@S@)vjWY7vHh0M`!f8)#d}e&Y0@!=Q zac+~osx%!_{zrV9caTa4Ez7}72@Mn0mh5$6JEdY658Eizt$xE}62%7IWF6p)GM<{*}HxSWH|($&J?a5DGKIi(5FHR@s^dse&0R@1EzhCtp1fg;Bv zUnD{DlZngpR7gJ7s7k{)Uk3BtBV3a0+0-{npTUXO&#)p95xPdz6OF`c4?Aq6bDiV4 zTK3&9SRN{-!gXs`+1P_`-JQwxL|~h)Oy<>t{)BMcR{R>zct(x6M5C58OM?k&2O(i# zx_}rho`u~PpX|{X6`qvSTH#|gB3R?KVTbNb>m-R^p1GA|{_6O+dR%@bUJKdmLB2N) zFPgNIST`nrsCxXD;@OJhEp;ThGcj*rz#y}|67T<~va;A?vy|y7V@yZaAv7{s4aslv zCQ-h3NH1(mAc!&NTD^(x;NicVnCFFDiUsbobfS7h_8G|6^|WQCce-A(@Zytq)z>>+ zFjls$W4XLx8mwxTXxsE^{JINCf`YDBE=W16I5yM&W%Ky`I(Hhk46))4a&(fRIFP_! zpaL_~G^C*Q3SQ=Y3|tVY>Jwz>pLI!3OOt9V1E!uzo8tWW_pfvvrGNte>SpVJg6n-p zRKX%O=$>RtIzq#sHcJL{Xy>wgr<%NDL^WG(brUbYhA6^PqMu5ns|Pj-yvf)P&(&@z zoy2=qVn$x5rT3e=G!@mBX3fFst|S+)T8WxCpN~U7O>JG6l3A~mcg!$=bi$E`5G$3_ z{EI#^srhq`$uJgmebW~fME>+rz@2Vh{?5lq>7US_1vc85A;mOGmYTkPb{$naBR`vO zy8Py1KWuXRk-H8`R}A$rQR84TI#snkL#%z9Z;ZKZ>bU*yk+&l4vw%B7?FXR=DO#Gc zIS*Kg8KH6@65zx$E4 zm;2$~zwP~PAMeLav<7L(^VGdK*aeF7{4;nmS6b*9@2r)Vr*V8(jpnU8q^0bLL?`;d zv<^pmjplAyN{#xR4y+s(uz+TbOJAZmYX-na#pVj`+m1SJVs1mAfCcc7%328u%rbcz z>E1i2Buv5NFyo{i-{i1S(`Y`|ROh?GeGyV;DuGZ%8`nBY?Z25MbTGXG|KQOjNu;?V zN0@j(sDo69Vp6Q7#+0Hn&7&X^)HFg>04tf^5mcFFa=J_Ke%>ra4KDH_EmSwr0w9w^ zUX?gbJBtUwMRL+Rh}0~TPmyQm7n_%*qUHqLnk&v}J{c4}9|TVpObcy}dS&q?-!+>o z>&Us94k0WkEH2tgq|GvQ2Ov{cN`$#;P%<7jyb#aS^Bo=i#WNPB{A zqV!Ap7k!(NurLbU&A=kJCquarPg~t*Y~KV znaw#`9+Y*(2$&fwB(S$HzPydc|@kg4QLP&|?qgX@so1=C1*P`E_3wStav& z4s%7#N=fs=ceEmx`k0ZJ6F5B2GgJ4jC1DL$#uI;o{`#cw6nB}+b(jvY4<+}~-WnIk zP548Ar$3f%KV5Q@>Vu;>%^={U{X9eJT=CcW3OkjW`WCAgDX9vdj%!E_^V!U-@r?cp zaNEDTgCe+ti2E=Al+#OqJ8&2L{^8F%*eZiN80bj)az2FaU^~f>Fm30SHP6Uon)P~~ z#{jQY4Nh-OgOHO@s+9&t8rB1WAvOO2D*Jg~1*NCBT<)AJAAI-h_d5BKkv=f;!_Qys z<9@p#eZ0-|w?AG&uw3v9+6iZn_NGI&osi`Yr@E`~$tbNf@jgA?TC)^LAlU`%SR5Qc z0o;1j{ndSGCej?mG+5D!Fl=}?gxFqH?6tx*JmYnzic zK&;jUxVWrB0CNzxwedFuw?Fs}7l!ukM|1=3j-T%yk57f9({>Om7QENd^KUnH_~<&$ zUAYV~0Au3WPDntIiD>|!aCZQC?=3blnlDJ}q~U<>o4yX*b~|ZHf5$=eI`x1<@P_6| z=tj@LjgBLj(|+FQyTa2YcEr=Sj{(BZs)Ax=`l=SNAy1{}K_k)bF<@!u5(24V7f18;o&avoA&nKc=7zd1&?|2+>-$~+^6qi zxMUX~%;w*GJ-;L^eNx%uEo82J6MT|?b{zoM3(0y8GyL+u{{1_68wX@-9a+yHeEF~0 za=(7{Z5X)DbGw55pAjaXKD`P8E>YveiGO+>6sX%9w%7mJ*Rp4?IatOL={)~+g2XQt z%CA16EVyoSY25mseJy)_>j2?wr=)oEpI+w)u3H{&9{Ke~^7pSM0;J_+aNx7Q|BGM8 z(KfKdPd0~DbN_v8{OW5td;=gYiL6W~{^@laVEqxpxFFESKYFW=0n#$&ssPW=<^1ap u^NUyiX950t2l<}`_&4$Q|GogXpF}>=e-$?3RJ{lMC@ZSo%$I-Q^}hf!%QbQU literal 0 HcmV?d00001 diff --git a/src/Gradio_UI_Files/images/professor.png b/src/Gradio_UI_Files/images/professor.png new file mode 100644 index 0000000000000000000000000000000000000000..19984b7f061b8108e8e33b0e559ac606f1487823 GIT binary patch literal 29489 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 literal 0 HcmV?d00001 diff --git a/src/UI.py b/src/UI.py new file mode 100644 index 00000000..abe3adb9 --- /dev/null +++ b/src/UI.py @@ -0,0 +1,319 @@ +import streamlit as st +import os +import zipfile +import run_auditor_user_defined +import run_critic_user_defined +import run_rank +import shutil +import time +import pre_process +from utils import dotdict, clean_folder +from streamlit_js_eval import streamlit_js_eval + +os.environ['DISPLAY'] = ':0' + +# Store the initial value of widgets in session state +if "visibility" not in st.session_state: + st.session_state.visibility = "visible" + st.session_state.disabled = False + +if "start_critic" not in st.session_state: + st.session_state.start_critic = False + +if "start_auditor" not in st.session_state: + st.session_state.start_auditor = False + +if "start_ranking" not in st.session_state: + st.session_state.start_ranking = False + +if "section_active_auditor" not in st.session_state: + st.session_state.section_active_auditor = True + +if "section_active_critic" not in st.session_state: + st.session_state.section_active_critic = False + +if "section_active_ranking" not in st.session_state: + st.session_state.section_active_ranking = False + +if "args" not in st.session_state: + st.session_state.args = None + +if "args_c" not in st.session_state: + st.session_state.args_c = None + +if "args_r" not in st.session_state: + st.session_state.args_r = None + +def start_auditor(): + st.session_state.start_auditor = True +def end_auditor(): + st.session_state.start_auditor = False + +def start_critic(): + st.session_state.start_critic = True +def end_critic(): + st.session_state.start_critic = False + +def start_ranking(): + st.session_state.start_ranking = True +def end_ranking(): + st.session_state.start_ranking = False + + + +with st.sidebar: + openai_api_key = st.text_input("OpenAI API Key", key="chatbot_api_key", type="password") + "[Get an OpenAI API key](https://platform.openai.com/account/api-keys)" + "[View the source code](https://github.com/sciencepal/GPTLens/blob/aditya-test/src/UI.py)" + "[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/sciencepal/GPTLens?quickstart=1)" + st.divider() + if st.button("Reset App"): + st.session_state.section_active_critic = False + st.session_state.section_active_ranking = False + end_critic() + end_ranking() + # streamlit_js_eval(js_expressions="parent.window.location.reload()") + + +st.title("💬 GPTLens") +st.caption("🚀 Smart Contract Vulnerability Detection powered by OpenAI LLM") + +if not openai_api_key: + st.warning("Please add your OpenAI API key to continue.") + st.stop() +else: + os.environ["OPENAI_API_KEY"] = openai_api_key + + +if st.session_state.section_active_auditor: + + st.header("Auditor Step", divider=True) + st.divider() + + col1, col2 = st.columns(2) + + with col1: + model = st.radio( + "Set the GPT model 👉", + key="model", + options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], + index=2 + ) + + uploaded_files = st.file_uploader('Upload smart contract files', accept_multiple_files=True, type=['sol']) + + with col2: + topk = st.number_input( + "Set the topk auditor responses 👉", + key="topk", + min_value=1, + max_value=10, + value=3, + format="%d" + ) + + temperature = st.number_input( + "Set the temperature 👉", + key="temperature", + min_value=0.0, + max_value=1.0, + value=0.7, + format="%f" + ) + + num_auditors = st.number_input( + "Set the num auditors 👉", + key="num_auditors", + min_value=1, + max_value=10, + value=1, + format="%d" + ) + + uploaded_prompt = st.file_uploader('Upload prompt file (optional)', accept_multiple_files=False, type=['py']) + + + audit_button = st.button("Start Auditor", key="auditor", on_click=start_auditor) + + if audit_button and st.session_state.start_auditor: + if uploaded_files: + os.environ["OPENAI_API_KEY"] = openai_api_key + args_dict = { + 'backend': model, + 'temperature': temperature, + 'data_dir': "data/CVE_clean", + 'topk': topk, + 'num_auditor': num_auditors, + 'openai_api_key': openai_api_key + } + args = dotdict(args_dict) + st.session_state.args = args + if os.path.exists("data/CVE"): + clean_folder("data/CVE") + if os.path.exists("data/CVE_clean"): + clean_folder("data/CVE_clean") + if os.path.exists(f"src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}"): + clean_folder(f"src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}") + for uploaded_file in uploaded_files: + name = uploaded_file.name + bytes_data = uploaded_file.read() + with open(f"data/CVE/{name}", "wb") as f: + f.write(bytes_data) + pre_process.mainfnc(args.data_dir) + if uploaded_prompt: + bytes_data = uploaded_prompt.read() + with open(f"src/prompt.py", "wb") as f: + f.write(bytes_data) + st.write("Starting auditor code!") + run_auditor_user_defined.mainfnc(args) + st.write(f"Audit files processed successfully to folder ./src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}!") + end_auditor() + time.sleep(2) + # st.session_state.section_active_auditor = False + st.session_state.section_active_critic= True + uploaded_file = False + else: + st.warning("Please upload data zip.") + st.stop() + # else: + # st.stop() + + + +if st.session_state.section_active_critic: + + st.header("Critic Step", divider=True) + st.divider() + + col1, col2 = st.columns(2) + + args = st.session_state.args + + with col1: + model_c = st.radio( + "Set the GPT model 👉", + key="model_c", + options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], + index=2 + ) + + auditor_dir_c = st.text_input( + "Auditor Directory location", + value=f"auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}" + ) + + with col2: + + temperature_c = st.number_input( + "Set the temperature 👉", + key="temperature_c", + min_value=0.0, + max_value=1.0, + value=0.0, + format="%f" + ) + + num_critic_c = st.number_input( + "Set the num critics 👉", + key="num_critic_c", + min_value=1, + max_value=10, + value=1, + format="%d" + ) + + shot_c = st.radio( + "Set the num shots (few/one) 👉", + key="shot_c", + options=["one", "few"], + index=1 + ) + + os.environ["OPENAI_API_KEY"] = openai_api_key + + + critic_button = st.button("Start Critics", key="critic", on_click=start_critic) + + if critic_button and st.session_state.start_critic: + args_c_dict = { + 'backend': model_c, + 'temperature': temperature_c, + 'dataset': "CVE", + 'auditor_dir': auditor_dir_c, + 'num_critic': num_critic_c, + 'shot': shot_c, + 'openai_api_key': openai_api_key + } + args_c = dotdict(args_c_dict) + st.session_state.args_c = args_c + st.write("Starting critic code!") + run_critic_user_defined.mainfnc(args_c) + st.write(f"Critic files processed successfully to folder ./src/logs/{args_c.auditor_dir}/critic_{args_c.backend}_{args_c.temperature}_{args_c.num_critic}_{args_c.shot}!") + end_critic() + time.sleep(2) + # st.session_state.section_active_critic = False + st.session_state.section_active_ranking = True + # else: + # st.stop() + + + +if st.session_state.section_active_ranking: + st.header("Ranking Step", divider=True) + st.divider() + + col1, col2 = st.columns(2) + + args = st.session_state.args + args_c = st.session_state.args_c + + with col1: + + auditor_dir_r = st.text_input( + "Auditor Dir location", + value=f"auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}" + ) + + critic_dir_r = st.text_input( + "Critic Directory location", + value=f"critic_{args_c.backend}_{args_c.temperature}_{args_c.num_critic}_{args_c.shot}" + ) + + with col2: + + strategy_r = st.radio( + "Set the strategy (default/custom) 👉", + key="strategy_r", + options=["default", "custom"], + index=0 + ) + + + rank_button = st.button("Start Ranking", key="ranking", on_click=start_ranking) + + if rank_button and st.session_state.start_ranking: + args_r_dict = { + 'auditor_dir': auditor_dir_r, + 'critic_dir': critic_dir_r, + 'strategy': strategy_r + } + args_r = dotdict(args_r_dict) + st.session_state.args_r = args_r + st.write(f"Starting ranking code!") + run_rank.mainfnc(args_r) + st.write(f"Ranking files processed successfully to folder ./src/logs/{args_c.auditor_dir}/critic_{args_c.backend}_{args_c.temperature}_{args_c.num_critic}_{args_c.shot}/ranker_{args_r.strategy}!") + end_critic() + else: + st.stop() + + shutil.make_archive('results', 'zip', "src/logs") + + st.divider() + + with open("results.zip", "rb") as fp: + download_btn = st.download_button( + label="Download Results zip", + data=fp, + file_name="results.zip", + mime="application/zip" + ) diff --git a/src/UI_demo.py b/src/UI_demo.py new file mode 100644 index 00000000..b83446f9 --- /dev/null +++ b/src/UI_demo.py @@ -0,0 +1,411 @@ +import streamlit as st +import os +import zipfile +import run_auditor_user_defined +import run_critic_user_defined +import run_rank +import shutil +import time +import pre_process +from utils import dotdict, clean_folder +from streamlit_js_eval import streamlit_js_eval +import base64 +from pathlib import Path + +os.environ['DISPLAY'] = ':0' + +# Store the initial value of widgets in session state +if "visibility" not in st.session_state: + st.session_state.visibility = "visible" + st.session_state.disabled = False + +if "start_preprocess" not in st.session_state: + st.session_state.start_preprocess = False + +if "start_critic" not in st.session_state: + st.session_state.start_critic = False + +if "start_auditor" not in st.session_state: + st.session_state.start_auditor = False + +if "start_ranking" not in st.session_state: + st.session_state.start_ranking = False + +if "section_active_preprocess" not in st.session_state: + st.session_state.section_active_preprocess = True + +if "section_active_auditor" not in st.session_state: + st.session_state.section_active_auditor = False + +if "section_active_critic" not in st.session_state: + st.session_state.section_active_critic = False + +if "section_active_ranking" not in st.session_state: + st.session_state.section_active_ranking = False + +if "args" not in st.session_state: + st.session_state.args = None + +if "args_c" not in st.session_state: + st.session_state.args_c = None + +if "args_r" not in st.session_state: + st.session_state.args_r = None + +def start_preprocess(): + st.session_state.start_preprocess = True +def end_preprocess(): + st.session_state.end_preprocess = False + + +def start_auditor(): + st.session_state.start_auditor = True +def end_auditor(): + st.session_state.start_auditor = False + +def start_critic(): + st.session_state.start_critic = True +def end_critic(): + st.session_state.start_critic = False + +def start_ranking(): + st.session_state.start_ranking = True +def end_ranking(): + st.session_state.start_ranking = False + +openai_api_key = "xyz" + +with st.sidebar: + # openai_api_key = st.text_input("OpenAI API Key", key="chatbot_api_key", type="password") + # "[Get an OpenAI API key (not needed for demo)](https://platform.openai.com/account/api-keys)" + # "[View the source code](https://github.com/sciencepal/GPTLens/blob/aditya-test/src/UI.py)" + # "[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/sciencepal/GPTLens?quickstart=1)" + # st.divider() + # if st.button("Reset App"): + # st.session_state.section_active_critic = False + # st.session_state.section_active_ranking = False + # st.session_state.section_active_auditor = False + # end_critic() + # end_ranking() + # end_auditor() + bin_file = "src/CS8903_Aditya_PAL_GPTLens_Demo.pdf" + with open(bin_file, 'rb') as f: + data = f.read() + st.download_button(label="Download GPTLens Demo PPT", data=data, file_name=bin_file, mime='application/pdf',) + + + # st.link_button("Demo of GPTLens", "file:///CS8903_Aditya_PAL_GPTLens_Demo.pdf") + # return href + # streamlit_js_eval(js_expressions="parent.window.location.reload()") + + +st.title("💬 GPTLens Demo") +st.caption("🚀 Smart Contract Vulnerability Detection powered by OpenAI LLM") + + +if not openai_api_key: + st.warning("In GPTlens, you must enter OpenAI API key to continue. Not needed for this demo") + # st.stop() +else: + os.environ["OPENAI_API_KEY"] = openai_api_key + +st.info("Note that this demo uses only dummy data") + + +with open("data_sample/CVE/2018-13071.sol") as f: + raw1 = f.read() +with open("data_sample/CVE/2018-13072.sol") as f: + raw2 = f.read() +with open("data_sample/CVE/2018-13073.sol") as f: + raw3 = f.read() +with open("data_sample/CVE/2018-13074.sol") as f: + raw4 = f.read() + +with open("data_sample/CVE_clean/2018-13071.sol") as f: + clean1 = f.read() +with open("data_sample/CVE_clean/2018-13072.sol") as f: + clean2 = f.read() +with open("data_sample/CVE_clean/2018-13073.sol") as f: + clean3 = f.read() +with open("data_sample/CVE_clean/2018-13074.sol") as f: + clean4 = f.read() + +with open("data_sample/prompts.py") as f: + prompt = f.read() + + +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13071.json") as f: + audit1 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13072.json") as f: + audit2 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13073.json") as f: + audit3 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-13074.json") as f: + audit4 = f.read() + + +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13071.json") as f: + critic1 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13072.json") as f: + critic2 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13073.json") as f: + critic3 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-13074.json") as f: + critic4 = f.read() + + +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13071.json") as f: + ranker1 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13072.json") as f: + ranker2 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13073.json") as f: + ranker3 = f.read() +with open("results/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-13074.json") as f: + ranker4 = f.read() + + +# if st.session_state.section_active_preprocess: + +st.header("1. Preprocessing Step", divider=True) + +tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) + +with tab1: + with st.container(height=400): + st.code(raw1, language='solidity') + +with tab2: + with st.container(height=400): + st.code(raw2, language='solidity') + +with tab3: + with st.container(height=400): + st.code(raw3, language='solidity') + +with tab4: + with st.container(height=400): + st.code(raw4, language='solidity') + +# preprocess_button = st.button("Start Preprocessing", key="preprocess", on_click=start_auditor) + + +# if st.session_state.start_auditor: + +st.subheader("Result 1.1 - Processed Files", divider=True) + +tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) + +with tab1: + with st.container(height=400): + st.code(clean1, language='solidity') + +with tab2: + with st.container(height=400): + st.code(clean2, language='solidity') + +with tab3: + with st.container(height=400): + st.code(clean3, language='solidity') + +with tab4: + with st.container(height=400): + st.code(clean4, language='solidity') + +st.divider() + +st.header("2. Auditor Step", divider=True) + +col1, col2 = st.columns(2) + +with col1: + model = st.radio( + "Set the GPT model 👉", + key="model", + options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], + index=2 + ) + + topk = st.number_input( + "Set the topk auditor responses 👉", + key="topk", + min_value=1, + max_value=10, + value=3, + format="%d" + ) + +with col2: + + temperature = st.number_input( + "Set the temperature 👉", + key="temperature", + min_value=0.0, + max_value=1.0, + value=0.7, + format="%f" + ) + + num_auditors = st.number_input( + "Set the num auditors 👉", + key="num_auditors", + min_value=1, + max_value=10, + value=1, + format="%d" + ) + +st.subheader("Prompt File") +with st.container(height=400): + st.code(prompt, language='python') + + +st.subheader("Result 2.1 - Auditor Results", divider=True) + +tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) + +with tab1: + with st.container(height=400): + st.code(audit1, language='json') + +with tab2: + with st.container(height=400): + st.code(audit2, language='json') + +with tab3: + with st.container(height=400): + st.code(audit3, language='json') + +with tab4: + with st.container(height=400): + st.code(audit4, language='json') + +st.divider() + + + +st.header("3. Critic Step", divider=True) + +col1, col2 = st.columns(2) + +args = st.session_state.args + +with col1: + model_c = st.radio( + "Set the GPT model 👉", + key="model_c", + options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], + index=2 + ) + + auditor_dir_c = st.text_input( + "Auditor Directory location", + value=f"temporary_dir/path/to/data" + ) + +with col2: + + temperature_c = st.number_input( + "Set the temperature 👉", + key="temperature_c", + min_value=0.0, + max_value=1.0, + value=0.0, + format="%f" + ) + + num_critic_c = st.number_input( + "Set the num critics 👉", + key="num_critic_c", + min_value=1, + max_value=10, + value=1, + format="%d" + ) + + shot_c = st.radio( + "Set the num shots (few/one) 👉", + key="shot_c", + options=["one", "few"], + index=1 + ) + + +st.subheader("Result 3.1 - Critic Results", divider=True) + +tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) + +with tab1: + with st.container(height=400): + st.code(critic1, language='json') + +with tab2: + with st.container(height=400): + st.code(critic2, language='json') + +with tab3: + with st.container(height=400): + st.code(critic3, language='json') + +with tab4: + with st.container(height=400): + st.code(critic4, language='json') + +st.divider() + + + + + + + + +st.header("4. Ranking Step", divider=True) + +col1, col2 = st.columns(2) + +args = st.session_state.args +args_c = st.session_state.args_c + +with col1: + + auditor_dir_r = st.text_input( + "Auditor Dir location", + value=f"temporary_dir/path/to/data" + ) + + critic_dir_r = st.text_input( + "Critic Directory location", + value=f"temporary_dir/path/to/data" + ) + +with col2: + + strategy_r = st.radio( + "Set the strategy (default/custom) 👉", + key="strategy_r", + options=["default", "custom"], + index=0 + ) + + +st.subheader("Result 4.1 - Ranking Results", divider=True) + +tab4, tab3, tab2, tab1 = st.tabs(["File 1", "File 2", "File 3", "File 4"]) + +with tab1: + with st.container(height=400): + st.code(ranker1, language='json') + +with tab2: + with st.container(height=400): + st.code(ranker2, language='json') + +with tab3: + with st.container(height=400): + st.code(ranker3, language='json') + +with tab4: + with st.container(height=400): + st.code(ranker4, language='json') + +st.divider() \ No newline at end of file diff --git a/src/environment_old.yml b/src/environment_old.yml new file mode 100644 index 00000000..c703177f --- /dev/null +++ b/src/environment_old.yml @@ -0,0 +1,83 @@ +# name: GPTLens +# channels: +# - defaults +# dependencies: +# - bzip2=1.0.8=he774522_0 +# - ca-certificates=2023.12.12=haa95532_0 +# - libffi=3.4.4=hd77b12b_0 +# - openssl=3.0.13=h2bbff1b_0 +# - pip=23.3.1=py311haa95532_0 +# - python=3.11.7=he1021f5_0 +# - setuptools=68.2.2=py311haa95532_0 +# - sqlite=3.41.2=h2bbff1b_0 +# - tk=8.6.12=h2bbff1b_0 +# - vc=14.2=h21ff451_1 +# - vs2015_runtime=14.27.29016=h5e58377_2 +# # - wheel=0.41.2=py311haa95532_0 +# - xz=5.4.5=h8cc25b3_0 +# - zlib=1.2.13=h8cc25b3_0 +# - pip: +# - aiohttp==3.9.3 +# - aiosignal==1.3.1 +# - altair==5.2.0 +# - annotated-types==0.6.0 +# - anyio==4.2.0 +# - attrs==23.2.0 +# - blinker==1.7.0 +# - cachetools==5.3.2 +# - certifi==2024.2.2 +# - charset-normalizer==3.3.2 +# - click==8.1.7 +# - colorama==0.4.6 +# - distro==1.9.0 +# - frozenlist==1.4.1 +# - gitdb==4.0.11 +# - gitpython==3.1.41 +# - h11==0.14.0 +# - httpcore==1.0.2 +# - httpx==0.26.0 +# - idna==3.6 +# - importlib-metadata==7.0.1 +# - inflection==0.5.1 +# - jinja2==3.1.3 +# - jsonschema==4.21.1 +# - jsonschema-specifications==2023.12.1 +# - markdown-it-py==3.0.0 +# - markupsafe==2.1.5 +# - mdurl==0.1.2 +# - multidict==6.0.5 +# - numpy==1.26.3 +# - openai==1.11.1 +# - openapi==1.1.0 +# - packaging==23.2 +# - pandas==2.2.0 +# - pillow==10.2.0 +# - protobuf==4.25.2 +# - pyarrow==15.0.0 +# - pydantic==2.6.0 +# - pydantic-core==2.16.1 +# - pydeck==0.8.1b0 +# - pygments==2.17.2 +# - python-dateutil==2.8.2 +# - pytz==2024.1 +# - referencing==0.33.0 +# - requests==2.31.0 +# - rich==13.7.0 +# - rpds-py==0.17.1 +# - six==1.16.0 +# - smmap==5.0.1 +# - sniffio==1.3.0 +# - streamlit==1.31.0 +# - tenacity==8.2.3 +# - toml==0.10.2 +# - toolz==0.12.1 +# - tornado==6.4 +# - tqdm==4.66.1 +# - typing-extensions==4.9.0 +# - tzdata==2023.4 +# - tzlocal==5.2 +# - urllib3==2.2.0 +# - validators==0.22.0 +# - watchdog==3.0.0 +# - yarl==1.9.4 +# - zipp==3.17.0 diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10299.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10299.json new file mode 100644 index 00000000..af244012 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10299.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "batchTransfer", + "code": "function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; }", + "vulnerability": "Integer Overflow Leading to Arbitrary Token Minting", + "reason": "The multiplication `uint256 amount = uint256(cnt) * _value` does not use SafeMath, allowing integer overflow. If `cnt * _value` exceeds 2^256-1, `amount` wraps around to a small value. The subsequent `balances[msg.sender].sub(amount)` deducts an incorrect small amount, while each receiver gains the original large `_value`, enabling attackers to mint vast amounts of tokens from nothing.", + "file_name": "2018-10299.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "vulnerability": "Allowance Race Condition (Front-Running)", + "reason": "The approve function does not mitigate the ERC20 allowance front-running attack. If a user reduces an existing allowance, a spender can front-run the transaction to use the old higher allowance before the reduction takes effect. This violates the intended allowance update and allows unauthorized token transfers.", + "file_name": "2018-10299.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + }, + { + "function_name": "batchTransfer", + "code": "function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; }", + "vulnerability": "Unauthorized Token Burning via Zero Address", + "reason": "The batchTransfer function lacks a check for zero addresses in the `_receivers` array. Unlike the transfer function, which blocks sending to `address(0)`, this allows users to send tokens to the zero address via batchTransfer, enabling unauthorized token burning and violating the contract's consistency.", + "file_name": "2018-10299.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10376.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10376.json new file mode 100644 index 00000000..911f9f96 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10376.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "transferProxy", + "code": "function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ if(balances[_from] < _feeSmt + _value) revert(); uint256 nonce = nonces[_from]; bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); if(_from != ecrecover(h,_v,_r,_s)) revert(); if(balances[_to] + _value < balances[_to] || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); balances[_to] += _value; Transfer(_from, _to, _value); balances[msg.sender] += _feeSmt; Transfer(_from, msg.sender, _feeSmt); balances[_from] -= _value + _feeSmt; nonces[_from] = nonce + 1; return true; }", + "vulnerability": "Integer overflow in fee and value sum", + "reason": "The function checks if `_from` has sufficient balance using `balances[_from] < _feeSmt + _value`, but does not account for integer overflow. An attacker can craft `_feeSmt` and `_value` such that their sum overflows to a lower value (e.g., `_feeSmt = 2^256 - 200`, `_value = 200`), causing the check to pass even if `_from` has insufficient balance. This allows the attacker to transfer large amounts of tokens they don't own and mint arbitrary tokens for `msg.sender` via overflow in `balances[msg.sender] += _feeSmt`.", + "file_name": "2018-10376.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + }, + { + "function_name": "allocateTokens", + "code": "function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { if(allocateEndTime < now) revert(); if(_owners.length != _values.length) revert(); for(uint256 i = 0; i < _owners.length ; i++){ address to = _owners[i]; uint256 value = _values[i]; if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); totalSupply += value; balances[to] += value; } }", + "vulnerability": "Unrestricted token minting by owner", + "reason": "The `allocateTokens` function allows the owner to mint unlimited tokens within 1 day of deployment. There is no cap on `totalSupply`, so a malicious/compromised owner can inflate the supply indefinitely, devaluing existing tokens. Even though the function is time-limited, the 1-day window is sufficient to cause significant harm if exploited.", + "file_name": "2018-10376.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + }, + { + "function_name": "approveAndCallcode", + "code": "function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(_extraData)) { revert(); } return true; }", + "vulnerability": "Reentrancy via arbitrary external call", + "reason": "The function performs an external call (`_spender.call(_extraData)`) after setting an allowance. A malicious `_spender` can re-enter the contract (e.g., by calling `transferFrom` or `approveAndCallcode` again) before the allowance is consumed. This allows repeated draining of the allowance, as each reentrant call resets `allowed[msg.sender][_spender]` to `_value`.", + "file_name": "2018-10376.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10666.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10666.json new file mode 100644 index 00000000..b597a36d --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10666.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "setOwner", + "code": "function setOwner(address _owner) returns (bool success) { owner = _owner; return true; }", + "vulnerability": "Missing access control allows anyone to become owner", + "reason": "The setOwner function lacks the onlyOwner modifier, allowing any caller to arbitrarily change the contract owner. This enables an attacker to take full control of the contract, including privileged functions like uploadBalances, setExportFee, or unlockToken. Once ownership is hijacked, the attacker can drain funds, manipulate fees, or disrupt the contract's operation.", + "file_name": "2018-10666.sol", + "label": "Access Control", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables." + }, + { + "function_name": "transfer", + "code": "function transfer(address _to, uint256 _amount) returns (bool success) { require(!locked); require(balanceOf[msg.sender] >= _amount); require(balanceOf[_to] + _amount >= balanceOf[_to]); balanceOf[msg.sender] -= _amount; uint256 preBalance = balanceOf[_to]; balanceOf[_to] += _amount; bool alreadyMax = preBalance >= singleIDXMQty; if (!alreadyMax) { if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; validAfter[_to].ts = now; } if (validAfter[msg.sender].last > balanceOf[msg.sender]) validAfter[msg.sender].last = balanceOf[msg.sender]; Transfer(msg.sender, _to, _amount); return true; }", + "vulnerability": "Integer overflow/underflow due to unsafe arithmetic", + "reason": "The transfer and transferFrom functions use raw arithmetic operations (e.g., balanceOf[msg.sender] -= _amount) without leveraging the inherited SafeMath library. In Solidity <0.8.0, this allows integer underflows/overflows. An attacker can send tokens they don\u2019t own (underflow to max uint256) or overflow a recipient\u2019s balance to near-zero. This directly compromises the token\u2019s integrity and enables theft or denial of service.", + "file_name": "2018-10666.sol", + "label": "Access Control", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _amount) returns (bool success) { require(!locked); allowance[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "vulnerability": "Allowance front-running vulnerability", + "reason": "The approve function does not enforce the check-effects-interaction pattern or require resetting allowances to zero before updating. Attackers can front-run a user\u2019s approval change (e.g., from 100 to 50) by first using the old allowance (100) before it\u2019s reduced. This allows double-spending of allowances, enabling unauthorized token transfers from the victim\u2019s balance.", + "file_name": "2018-10666.sol", + "label": "Access Control", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10705.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10705.json new file mode 100644 index 00000000..5dcaff7c --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-10705.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "setOwner", + "code": "function setOwner(address _owner) returns (bool success) { owner = _owner; return true; }", + "vulnerability": "Unrestricted Ownership Transfer", + "reason": "The setOwner function lacks the onlyOwner modifier, allowing any address to arbitrarily change the contract owner. This enables an attacker to immediately take full control of the contract, including privileged functions like unlockToken and uploadBalances, leading to fund theft or contract destruction.", + "file_name": "2018-10705.sol", + "label": "Access Control", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack." + }, + { + "function_name": "uploadBalances", + "code": "function uploadBalances(address[] recipients, uint256[] balances) onlyOwner { require(!balancesUploaded); uint256 sum = 0; for (uint256 i = 0; i < recipients.length; i++) { balanceOf[recipients[i]] = safeAdd(balanceOf[recipients[i]], balances[i]); sum = safeAdd(sum, balances[i]); } balanceOf[owner] = safeSub(balanceOf[owner], sum); }", + "vulnerability": "Array Length Mismatch Token Loss", + "reason": "The uploadBalances function does not enforce equal lengths for recipients and balances arrays. If recipients.length > balances.length, balances[i] returns 0 beyond the balances array's end, causing the owner's balance to be reduced by the sum of the valid balances while recipients receive incorrect (often zero) amounts. This permanently burns the sum from the owner's balance, leading to irreversible token loss.", + "file_name": "2018-10705.sol", + "label": "Access Control", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(!locked); allowance[msg.sender][_spender] = _value; return true; }", + "vulnerability": "Allowance Race Condition", + "reason": "The approve function does not mitigate the ERC20 allowance front-running attack. If a user reduces their approval for a spender, the spender can front-run the transaction to use the old allowance before the reduction. This allows attackers to drain funds up to the previous higher allowance, especially impactful once the contract is unlocked.", + "file_name": "2018-10705.sol", + "label": "Access Control", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-11335.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-11335.json new file mode 100644 index 00000000..c615b6f9 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-11335.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "mint", + "code": "function mint(address holder, uint value) public {\n require(msg.sender == ico);\n require(value > 0);\n require(totalSupply + value <= TOKEN_LIMIT);\n balances[holder] += value;\n totalSupply += value;\n Transfer(0x0, holder, value);\n}", + "vulnerability": "Integer overflow in minting", + "reason": "The mint function does not use SafeMath for addition, allowing integer overflows. The require statement 'totalSupply + value <= TOKEN_LIMIT' can be bypassed if totalSupply + value overflows, resulting in a wrapped value that is within the limit. Additionally, 'balances[holder] += value' and 'totalSupply += value' can overflow, leading to incorrect token balances and total supply. An attacker with control over the ico address could exploit this to mint tokens beyond the intended TOKEN_LIMIT or corrupt balances.", + "file_name": "2018-11335.sol", + "label": "Integer Overflow", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner." + }, + { + "function_name": "setMigrationAgent", + "code": "function setMigrationAgent(address _agent) external {\n require(migrationAgent == 0);\n require(msg.sender == migrationMaster);\n migrationAgent = _agent;\n}", + "vulnerability": "Privilege escalation via migration agent", + "reason": "The setMigrationAgent function allows the migrationMaster to set a malicious migration agent contract once. If the migrationMaster's account is compromised, an attacker can set a malicious agent. Users who call migrate() will have their tokens transferred to the attacker's contract via MigrationAgent.migrateFrom, resulting in loss of funds. This centralizes trust in migrationMaster, creating a single point of failure.", + "file_name": "2018-11335.sol", + "label": "Integer Overflow", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint _value) public returns (bool) {\n require(!isFrozen);\n return super.approve(_spender, _value);\n}", + "vulnerability": "ERC20 approve front-running", + "reason": "The approve function is vulnerable to the ERC20 race condition. If a user changes the approval amount from a non-zero value to another non-zero value, a malicious spender can front-run the transaction, using the old allowance before it's reduced. This can lead to unintended allowance usage. Although increaseApproval/decreaseApproval exist, the standard approve remains risky, especially when users are unaware of the race condition.", + "file_name": "2018-11335.sol", + "label": "Integer Overflow", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-12025.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-12025.json new file mode 100644 index 00000000..56210bb2 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-12025.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "transferFrom", + "code": "function transferFrom(address from, address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[from] < value) return false; if( allowed[from][msg.sender] >= value ) return false; if(balances[to] + value < balances[to]) return false; balances[from] -= value; allowed[from][msg.sender] -= value; balances[to] += value; Transfer(from, to, value); return true; }", + "vulnerability": "Inverted Allowance Check & Underflow", + "reason": "The condition `if( allowed[from][msg.sender] >= value ) return false;` is inverted. This allows transfers when the allowance is **insufficient** (allowed < value) instead of enforcing it. Furthermore, when `allowed[from][msg.sender]` is less than `value`, the line `allowed[from][msg.sender] -= value;` underflows (due to Solidity 0.4.2's lack of overflow checks), setting the allowance to a massive value (2^256 - X). Attackers can exploit this to gain infinite approval after one underflow, enabling unlimited token transfers from the victim's account.", + "file_name": "2018-12025.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address from, address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[from] < value) return false; if( allowed[from][msg.sender] >= value ) return false; if(balances[to] + value < balances[to]) return false; balances[from] -= value; allowed[from][msg.sender] -= value; balances[to] += value; Transfer(from, to, value); return true; }", + "vulnerability": "Incorrect Frozen Account Check", + "reason": "The function checks `frozenAccount[msg.sender]` (spender's status) instead of `frozenAccount[from]` (token owner's status). A frozen account (from) can still have its tokens transferred via an approved spender (msg.sender) as long as the spender is not frozen. This violates the intended freezing logic, allowing attackers to bypass account freezes by using approved addresses.", + "file_name": "2018-12025.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _amount) returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "vulnerability": "Unsafe ERC20 Approve", + "reason": "The `approve` function does not include a check for the front-running race condition. If a user changes their approval from a non-zero value to another non-zero value, an attacker can front-run the transaction to use the old approval before it is reset. While this is a known ERC20 design flaw, its presence here allows attackers to steal funds if users naively adjust approvals without first setting them to zero.", + "file_name": "2018-12025.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-13836.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-13836.json new file mode 100644 index 00000000..7ac02733 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-13836.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "multiTransfer", + "code": "function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { require(_addresses.length <= 100 && _addresses.length == _amounts.length); uint totalAmount; for (uint a = 0; a < _amounts.length; a++) { totalAmount += _amounts[a]; } require(totalAmount > 0 && balances[msg.sender] >= totalAmount); balances[msg.sender] -= totalAmount; for (uint b = 0; b < _addresses.length; b++) { if (_amounts[b] > 0) { balances[_addresses[b]] += _amounts[b]; Transfer(msg.sender, _addresses[b], _amounts[b]); } } return true; }", + "vulnerability": "Integer Overflow in Token Transfer", + "reason": "The `multiTransfer` function calculates `totalAmount` by summing all `_amounts` without overflow checks. Using Solidity 0.4.18 (which lacks automatic overflow protection), an attacker can craft `_amounts` values that overflow `totalAmount`, bypassing the `balances[msg.sender] >= totalAmount` check. For example, if the sum overflows to a small value, the attacker's balance is reduced minimally, but recipients receive large amounts, effectively stealing tokens from the contract.", + "file_name": "2018-13836.sol", + "label": "Integer Overflow", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _amount) public returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "vulnerability": "Front-Runnable Approval", + "reason": "The `approve` function allows a user to set a new allowance without first resetting it to zero. An attacker can front-run a user's approval reduction (e.g., from 5 to 3) by observing the transaction in the mempool and executing a `transferFrom` with the old allowance (5) before it is reduced. This enables double-spending of the originally approved amount, violating the user's intended authorization limits.", + "file_name": "2018-13836.sol", + "label": "Integer Overflow", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + }, + { + "function_name": "fallback function", + "code": "function() public payable { require(airDropStatus && balances[owner] >= airDropAmount && !participants[msg.sender] && tx.gasprice >= airDropGasPrice); balances[owner] -= airDropAmount; balances[msg.sender] += airDropAmount; Transfer(owner, msg.sender, airDropAmount); participants[msg.sender] = true; }", + "vulnerability": "Trapped ETH with No Handling", + "reason": "The fallback function is `payable` but does not process incoming ETH. Users may mistakenly send ETH (e.g., assuming it's required for the airdrop), which becomes permanently locked in the contract. While the airdrop itself does not require ETH, the contract's design misleads users into sending funds that are never used or returned, resulting in accidental financial loss.", + "file_name": "2018-13836.sol", + "label": "Integer Overflow", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-15552.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-15552.json new file mode 100644 index 00000000..949a532f --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-15552.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "withdraw", + "code": "function withdraw() public { require(worldOwner == msg.sender); lottoIndex += 1; numtickets = 0; totalBounty = 0; worldOwner.transfer(this.balance); }", + "vulnerability": "Owner can steal funds mid-lottery", + "reason": "The withdraw() function allows the owner to reset the lottery state (numtickets, totalBounty) and transfer the entire contract balance to themselves at any time, including during an active round. This enables the owner to steal all accumulated ticket funds from participants before the lottery completes. Participants who already bought tickets would lose their ETH without any reward distribution.", + "file_name": "2018-15552.sol", + "label": "Bad Randomness", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "PayWinner", + "code": "function PayWinner( address winner ) private { require(numtickets == maxTickets); uint ownerTax = 6 * totalBounty / 100; uint winnerPrice = totalBounty - ownerTax; LottoComplete(msg.sender, lottoIndex, winnerPrice); lottoIndex += 1; numtickets = 0; totalBounty = 0; if(_direction == 0 && maxTickets < 20) maxTickets += 1; if(_direction == 1 && maxTickets > 10) maxTickets -= 1; if(_direction == 0 && maxTickets == 20) _direction = 1; if(_direction == 1 && maxTickets == 10) _direction = 0; worldOwner.transfer(ownerTax); winner.transfer(winnerPrice); }", + "vulnerability": "DoS via failed winner transfer", + "reason": "PayWinner uses transfer() to send funds to the winner. If the winner is a contract without a payable fallback function, the transfer will fail, reverting the entire transaction. This leaves the contract state (numtickets == maxTickets) unchanged, permanently blocking the AddTicket function (due to its numtickets < maxTickets check). Attackers can exploit this by purchasing the last ticket with a non-payable address to intentionally brick the contract.", + "file_name": "2018-15552.sol", + "label": "Bad Randomness", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "AddTicket", + "code": "function AddTicket() public payable { require(msg.value == ticketPrice); require(numtickets < maxTickets); lastTicketTime = now; numtickets += 1; totalBounty += ticketPrice; bool success = numtickets == maxTickets; NewTicket(msg.sender, success); if(success) { PayWinner(msg.sender); } }", + "vulnerability": "Predictable last-ticket winner selection", + "reason": "The winner is deterministically set to the last address that submits a ticket when maxTickets is reached. Attackers can monitor the blockchain for pending transactions and front-run the final ticket purchase to guarantee they become the winner. This violates fair lottery mechanics and allows centralized exploitation by bots/MEV searchers.", + "file_name": "2018-15552.sol", + "label": "Bad Randomness", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-17877.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-17877.json new file mode 100644 index 00000000..ab914c85 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-17877.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "luckyBuy", + "code": "function luckyBuy() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < luckybuyTracker_) return(true); else return(false); }", + "vulnerability": "Insecure Pseudo-Randomness", + "reason": "The 'luckyBuy' function uses block.timestamp, block.difficulty, block.coinbase, and other predictable on-chain data to generate randomness. Miners can manipulate these values to influence the outcome, allowing attackers to increase their chances of winning the Luckybuy prize. This makes the randomness exploitable and not truly random.", + "file_name": "2018-17877.sol", + "label": "Bad Randomness", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "win", + "code": "function win() public { require(now > RoundTime[Round] && RoundTime[Round] != 0); RoundLastGreedyMan[Round].transfer(RoundETH[Round]); emit winnerEvent(RoundLastGreedyMan[Round], RoundETH[Round], Round); Round++; }", + "vulnerability": "DoS via Failed Transfer", + "reason": "The 'win' function uses transfer() to send ETH to RoundLastGreedyMan without handling potential failures. If the winner is a contract with a fallback function that reverts (e.g., due to gas limits or intentional sabotage), the transfer will fail, causing the entire transaction to revert. This prevents the round from incrementing, halting the contract indefinitely.", + "file_name": "2018-17877.sol", + "label": "Bad Randomness", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "buyHeart", + "code": "function buyHeart(address referred) public payable { ... address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, \"sorry humans only\"); ... }", + "vulnerability": "Contract Call Bypass", + "reason": "The 'buyHeart' function checks if the sender is a contract by checking extcodesize. However, during contract construction (constructor), extcodesize returns 0, allowing malicious contracts to bypass this check. Attackers can exploit this to automate purchases or manipulate the game logic, violating the 'humans only' requirement.", + "file_name": "2018-17877.sol", + "label": "Bad Randomness", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-17882.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-17882.json new file mode 100644 index 00000000..2351c4be --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-17882.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {\n balances[_to] = safeAdd(balances[_to], _value);\n balances[_from] = safeSub(balances[_from], _value);\n if (_to != fights) {\n allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);\n }\n Transfer(_from, _to, _value);\n return true;\n}", + "vulnerability": "Unauthorized transfers to 'fights' address", + "reason": "The transferFrom function does not check or deduct the allowance when transferring to the 'fights' address. This allows any user to transfer tokens from any account to the 'fights' address without requiring approval. An attacker can exploit this by setting 'fights' to a controlled address (if owner is compromised) or leveraging existing 'fights' access to drain funds from arbitrary accounts.", + "file_name": "2018-17882.sol", + "label": "Integer Overflow", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + }, + { + "function_name": "batchTransfer", + "code": "function batchTransfer(address[] _to, uint _value) public {\n balances[msg.sender] = safeSub(\n balances[msg.sender],\n _to.length * _value\n );\n for (uint i = 0; i < _to.length; i++) {\n balances[_to[i]] = safeAdd(balances[_to[i]], _value);\n Transfer(msg.sender, _to[i], _value);\n }\n}", + "vulnerability": "Integer overflow in multiplication", + "reason": "The multiplication '_to.length * _value' in batchTransfer is vulnerable to integer overflow. An attacker can craft a large '_to.length' and '_value' such that the product overflows to a small value (e.g., 0). This allows them to bypass balance checks, deduct little/no tokens from their balance, while still crediting all recipients with '_value' tokens. This effectively mints tokens out of thin air.", + "file_name": "2018-17882.sol", + "label": "Integer Overflow", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {\n balances[_to] = safeAdd(balances[_to], _value);\n balances[_from] = safeSub(balances[_from], _value);\n if (_to != fights) {\n allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);\n }\n Transfer(_from, _to], _value);\n return true;\n}", + "vulnerability": "Incorrect allowance handling order", + "reason": "The transferFrom function updates balances before modifying allowances. While safe for non-fights addresses (due to revert on underflow), this violates the checks-effects-interactions pattern. If external calls were present, this could enable reentrancy. Though not directly exploitable here, it reflects poor security practices and increases risk if contract logic evolves.", + "file_name": "2018-17882.sol", + "label": "Integer Overflow", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-18425.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-18425.json new file mode 100644 index 00000000..42ffb1f4 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-18425.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; }", + "vulnerability": "Non-standard ERC20 approve behavior leading to allowance freeze", + "reason": "The approve function prevents updating an existing non-zero allowance to another non-zero value. This violates ERC20 standards and forces users to reset their allowance to zero first, creating a race condition vulnerable to front-running attacks. Contracts/DEXs expecting standard behavior will fail when users try to adjust allowances, breaking compatibility and potentially locking funds.", + "file_name": "2018-18425.sol", + "label": "Token Devalue", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)" + }, + { + "function_name": "withdraw", + "code": "function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); }", + "vulnerability": "Owner can steal all contributed ETH immediately", + "reason": "The withdraw function allows the owner to drain all ETH from the contract at any time. Users sending ETH during token distribution have no guarantee their funds will be used as intended. This creates a direct financial scam vector where the owner can collect ETH and disappear without distributing proper token value.", + "file_name": "2018-18425.sol", + "label": "Token Devalue", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)" + }, + { + "function_name": "doAirdrop", + "code": "function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); }", + "vulnerability": "Unlimited token minting beyond totalSupply cap", + "reason": "The doAirdrop function only checks if totalDistributed < totalSupply BEFORE adding new tokens. If totalDistributed is 1 unit less than totalSupply, the owner can airdrop any amount (e.g., 1B tokens), causing totalDistributed to exceed totalSupply. This breaks the token's supply cap, enabling infinite inflation and total devaluation of the token.", + "file_name": "2018-18425.sol", + "label": "Token Devalue", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)" + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-19830.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-19830.json new file mode 100644 index 00000000..173f26cc --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2018-19830.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "UBSexToken", + "code": "function UBSexToken() { owner = msg.sender; totalSupply = 1.9 * 10 ** 26; balances[owner] = totalSupply; }", + "vulnerability": "Insecure Initialization via Public Function", + "reason": "The function UBSexToken() is not a constructor (mismatched contract name) and is publicly callable. Attackers can invoke it post-deployment to reset the owner, totalSupply, and balances, effectively hijacking the contract. This allows an attacker to mint the entire token supply to themselves and gain ownership, leading to total control over the contract.", + "file_name": "2018-19830.sol", + "label": "Access Control", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity." + }, + { + "function_name": "transfer", + "code": "function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) unFrozenAccount onlyTransferable { if (frozenAccount[_to]) { InvalidAccount(_to, \"The receiver account is frozen\"); } else { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); } }", + "vulnerability": "Missing ERC20 Return Value", + "reason": "The transfer function does not return a boolean as required by the ERC20 standard. Contracts/Wallets expecting ERC20 compliance will treat the missing return value as a failure, causing transactions to revert. This breaks interoperability with exchanges, DeFi protocols, and other ERC20-reliant systems.", + "file_name": "2018-19830.sol", + "label": "Access Control", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint _value) unFrozenAccount { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); }", + "vulnerability": "Unsafe Allowance Update", + "reason": "The approve function throws when updating a non-zero allowance to another non-zero value. This forces users to reset allowance to zero first, creating a race condition where a spender can use the old allowance before it is updated. Attackers can front-run the second approval transaction to drain funds using the outdated allowance.", + "file_name": "2018-19830.sol", + "label": "Access Control", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15078.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15078.json new file mode 100644 index 00000000..639bf0ac --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15078.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) {\n if (_value != 0 && allowed[msg.sender][_spender] != 0) {\n return false;\n }\n allowed[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n}", + "vulnerability": "Non-standard ERC20 approve implementation", + "reason": "The approve function returns false if attempting to update a non-zero allowance to another non-zero value, violating ERC20 standards. This prevents users from adjusting existing allowances without first resetting them to zero. Attackers can exploit this by front-running approval changes, causing transactions to fail or funds to be locked. Contracts expecting standard ERC20 behavior will misinterpret the false return value, leading to operational failures.", + "file_name": "2019-15078.sol", + "label": "Typo Constructor", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free." + }, + { + "function_name": "modifier onlyPayloadSize", + "code": "modifier onlyPayloadSize(uint size) {\n assert(msg.data.length >= size + 4);\n _;\n}", + "vulnerability": "Assertion-based gas exhaustion", + "reason": "The onlyPayloadSize modifier uses assert() to validate transaction payload size. Unlike require(), assert() consumes all gas on failure. Attackers can craft malformed transactions (e.g., short-address attacks) to trigger this assertion, forcing victims to waste all gas. This enables gas-draining attacks and disrupts user transactions, directly benefiting attackers by increasing operational costs.", + "file_name": "2019-15078.sol", + "label": "Typo Constructor", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free." + }, + { + "function_name": "getTokens", + "code": "function getTokens() payable canDistr onlyWhitelist public {\n if (value > totalRemaining) {\n value = totalRemaining;\n }\n require(value <= totalRemaining);\n address investor = msg.sender;\n uint256 toGive = value;\n distr(investor, toGive);\n if (toGive > 0) {\n blacklist[investor] = true;\n }\n if (totalDistributed >= totalSupply) {\n distributionFinished = true;\n }\n value = value.div(100000).mul(99999);\n}", + "vulnerability": "Unchecked ETH deposits with owner withdrawal", + "reason": "The getTokens function is payable but does not process or validate msg.value. Users can accidentally send ETH, which remains trapped in the contract. The owner can withdraw these funds via withdraw(), creating a risk of financial loss for users. Attackers can also social-engineer victims into sending ETH, effectively stealing funds through the owner's withdrawal capability.", + "file_name": "2019-15078.sol", + "label": "Typo Constructor", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15079.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15079.json new file mode 100644 index 00000000..72422ba9 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15079.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "EAI_TokenERC20", + "code": "function EAI_TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; }", + "vulnerability": "Reinitialization Attack", + "reason": "The constructor is incorrectly named (EAI_TokenERC20 vs. contract name EAI_TokenERC), making it a public function callable by anyone. Attackers can reinitialize the contract, resetting totalSupply, name, symbol, and assigning themselves the entire token supply. This allows them to mint unlimited tokens, overwrite the contract's state, and effectively hijack control.", + "file_name": "2019-15079.sol", + "label": "Typo Constructor", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free." + }, + { + "function_name": "_transfer", + "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", + "vulnerability": "Arithmetic Over/Underflow Risk", + "reason": "While manual overflow checks exist, the contract uses Solidity 0.4.16, which lacks native overflow protection. If edge cases bypass the require(balanceOf[_to] + _value >= balanceOf[_to]) check (e.g., via unexpected overflow wrapping), token balances could be corrupted. The assert may fail to detect overflow in previousBalances if the initial sum exceeds uint256 max, leading to inconsistent states.", + "file_name": "2019-15079.sol", + "label": "Typo Constructor", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free." + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; }", + "vulnerability": "Front-Running Allowance Race", + "reason": "The transferFrom function decrements the allowance before performing the transfer. If the transfer fails (e.g., due to a later revert in _transfer), the allowance is permanently reduced. Attackers could exploit this by front-running transactions to cause intentional failures, effectively locking users' allowances and disrupting expected behavior.", + "file_name": "2019-15079.sol", + "label": "Typo Constructor", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15080.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15080.json new file mode 100644 index 00000000..6aedffa0 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2019-15080.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "owned", + "code": "function owned() public { owner = msg.sender; }", + "vulnerability": "Publicly callable ownership takeover", + "reason": "The function 'owned()' is public and lacks access control, allowing any caller to set themselves as the owner. This is due to the incorrect naming of the constructor (should be 'Owned()' in Solidity <0.4.22). Since the MorphToken constructor sets the owner, this function should not exist, but it remains callable post-deployment, enabling anyone to reset ownership.", + "file_name": "2019-15080.sol", + "label": "Typo Constructor", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack." + }, + { + "function_name": "transferOwnership", + "code": "function transferOwnership(address _newOwner) onlyOwner public { owner = _newOwner; }", + "vulnerability": "Unchecked zero-address ownership transfer", + "reason": "The function does not validate if '_newOwner' is a non-zero address. If the owner accidentally transfers ownership to address(0), the contract becomes permanently ownerless, locking all onlyOwner functions (e.g., mintTokens, blacklistAccount) and disrupting protocol governance.", + "file_name": "2019-15080.sol", + "label": "Typo Constructor", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _amount) public returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "vulnerability": "Front-runnable allowance approval", + "reason": "The approve() function does not implement checks for changing allowances (e.g., requiring allowance to be zero first). Attackers can front-run a user's approval change transaction to drain funds using the old allowance before it's updated, leading to double-spending of allowances.", + "file_name": "2019-15080.sol", + "label": "Typo Constructor", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2021-3004.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2021-3004.json new file mode 100644 index 00000000..89cd665a --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/CVE-2021-3004.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "_deposit", + "code": "function _deposit(IERC20 token, uint amount) internal {\n uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals();\n require(_value > 0, \"!value\");\n (address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value);\n token.safeTransferFrom(msg.sender, _pair, amountA);\n _mint(_pair, _value);\n uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this));\n collateral[msg.sender][address(token)] += _liquidity;\n collateralCredit[msg.sender][address(token)] += _value;\n uint _fee = _value * FEE / BASE;\n _mint(msg.sender, _value - _fee);\n _mint(address(this), _fee);\n notifyFeeAmount(_fee);\n emit Deposit(msg.sender, address(token), _value, amount, _value);\n}", + "vulnerability": "Oracle Price Manipulation", + "reason": "The _deposit function calculates the deposited collateral value using a single oracle (LINK.getPriceUSD) without cross-verifying with the actual AMM pool price. If the oracle is manipulated or provides incorrect prices (e.g., due to stale data or centralized control), attackers can deposit undervalued assets to mint inflated yCREDIT tokens. This allows them to steal protocol funds by redeeming overvalued yCREDIT for legitimate collateral. This is a critical vulnerability as it directly affects the protocol's solvency.", + "file_name": "2021-3004.sol", + "label": "Wrong Logic", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should." + }, + { + "function_name": "_addLiquidity", + "code": "function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired ) internal virtual returns (address pair, uint amountA, uint amountB) {\n pair = FACTORY.getPair(tokenA, tokenB);\n if (pair == address(0)) {\n pair = FACTORY.createPair(tokenA, tokenB);\n pairs[pair] = true;\n _markets.push(tokenA);\n } else if (!pairs[pair]) {\n pairs[pair] = true;\n _markets.push(tokenA);\n }\n (uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB);\n if (reserveA == 0 && reserveB == 0) {\n (amountA, amountB) = (amountADesired, amountBDesired);\n } else {\n uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB);\n if (amountBOptimal <= amountBDesired) {\n (amountA, amountB) = (amountADesired, amountBOptimal);\n } else {\n uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA);\n assert(amountAOptimal <= amountADesired);\n (amountA, amountB) = (amountAOptimal, amountBDesired);\n }\n }\n}", + "vulnerability": "Unrestricted Malicious Market Creation", + "reason": "The _addLiquidity function automatically adds any token to the _markets list when a new Sushiswap pair is created. Attackers can exploit this by creating pairs with malicious tokens (e.g., tokens with manipulated supply or fake collateral). Combined with oracle manipulation, this allows attackers to deposit worthless tokens as collateral, mint yCREDIT, and drain the protocol. The system should restrict which tokens can be used as collateral instead of auto-adding all pairs.", + "file_name": "2021-3004.sol", + "label": "Wrong Logic", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should." + }, + { + "function_name": "_transferTokens", + "code": "function _transferTokens(address src, address dst, uint amount) internal {\n balances[src] -= amount;\n balances[dst] += amount;\n emit Transfer(src, dst, amount);\n if (pairs[src]) {\n uint _fee = amount * FEE / BASE;\n _transferTokens(dst, address(this), _fee);\n notifyFeeAmount(_fee);\n }\n}", + "vulnerability": "Incorrect Fee Application Leading to Reward Distortion", + "reason": "The fee mechanism applies a transfer tax when tokens are sent from a pair (e.g., during a buy). However, the fee is deducted from the recipient's (buyer's) balance after the initial transfer, which could lead to underflow if the fee rounds to zero or exceeds the received amount. Additionally, notifyFeeAmount recalculates rewardRate without proper validation, allowing attackers to manipulate reward distribution by making small transfers to trigger fee updates, potentially disrupting reward calculations or causing integer overflows/underflows.", + "file_name": "2021-3004.sol", + "label": "Wrong Logic", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10299.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10299.json new file mode 100644 index 00000000..e37237e0 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10299.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "batchTransfer", + "vulnerability": "Integer Overflow Leading to Arbitrary Token Minting", + "criticism": "The reasoning is correct. The multiplication `cnt * _value` lacks SafeMath checks, enabling integer overflow. If `_value` is crafted such that `cnt * _value` overflows, `amount` becomes a small value, allowing an attacker to bypass the balance check and mint large `_value` tokens for all receivers. The severity is extremely high (9) as this directly enables token supply manipulation. Profitability is also 9, as attackers can mint and sell tokens for profit. The correctness is 9 because the exploit is technically valid if SafeMath is not applied to the multiplication operation.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The multiplication `uint256 amount = uint256(cnt) * _value` does not use SafeMath, allowing integer overflow. If `cnt * _value` exceeds 2^256-1, `amount` wraps around to a small value. The subsequent `balances[msg.sender].sub(amount)` deducts an incorrect small amount, while each receiver gains the original large `_value`, enabling attackers to mint vast amounts of tokens from nothing.", + "code": "function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; }", + "label": "Integer Overflow", + "file_name": "2018-10299.sol", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + }, + { + "function_name": "approve", + "vulnerability": "Allowance Race Condition (Front-Running)", + "criticism": "The reasoning is partially correct but mischaracterizes the severity. The code follows the ERC20 standard, which inherently has this race condition. The function does not include mitigation (e.g., `increaseAllowance`/`decreaseAllowance`), but this is a protocol-level limitation, not a code vulnerability. Severity is low (2) as it relies on user error (not resetting to zero first). Profitability is moderate (4) only if exploited, but it is not a direct exploit vector. Correctness is 5 because the issue exists but is a known ERC20 design trade-off, not a code flaw.", + "correctness": 5, + "severity": 2, + "profitability": 4, + "reason": "The approve function does not mitigate the ERC20 allowance front-running attack. If a user reduces an existing allowance, a spender can front-run the transaction to use the old higher allowance before the reduction takes effect. This violates the intended allowance update and allows unauthorized token transfers.", + "code": "function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "label": "Integer Overflow", + "file_name": "2018-10299.sol", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + }, + { + "function_name": "batchTransfer", + "vulnerability": "Unauthorized Token Burning via Zero Address", + "criticism": "The reasoning is context-dependent. Sending tokens to `address(0)` is a common way to burn tokens, and ERC20 does not prohibit it. If the contract explicitly forbids burning (e.g., in its `transfer` function), this would be a vulnerability. However, the reasoning assumes unauthorized burning without evidence of such a policy. Severity (1) and profitability (0) are negligible unless burning is disallowed. Correctness is 3 due to insufficient context.", + "correctness": 3, + "severity": 1, + "profitability": 0, + "reason": "The batchTransfer function lacks a check for zero addresses in the `_receivers` array. Unlike the transfer function, which blocks sending to `address(0)`, this allows users to send tokens to the zero address via batchTransfer, enabling unauthorized token burning and violating the contract's consistency.", + "code": "function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; }", + "label": "Integer Overflow", + "file_name": "2018-10299.sol", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10376.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10376.json new file mode 100644 index 00000000..8f1aa136 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10376.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "transferProxy", + "vulnerability": "Integer Overflow in Fee/Value Sum", + "criticism": "The reasoning is correct. The function does not account for integer overflow in `_feeSmt + _value`, allowing an attacker to bypass balance checks. This leads to underflow in `balances[_from]`, effectively minting tokens for `_to` and `msg.sender`. The vulnerability is critical because it enables unauthorized token creation and transfer. The severity and profitability are both high due to direct exploitation potential.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The function checks if `_from` has sufficient balance using `balances[_from] < _feeSmt + _value`, but does not account for integer overflow. An attacker can craft `_feeSmt` and `_value` such that their sum overflows to a lower value (e.g., `_feeSmt = 2^256 - 200`, `_value = 200`), causing the check to pass even if `_from` has insufficient balance. This allows the attacker to transfer large amounts of tokens they don't own and mint arbitrary tokens for `msg.sender` via overflow in `balances[msg.sender] += _feeSmt`.", + "code": "function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ if(balances[_from] < _feeSmt + _value) revert(); uint256 nonce = nonces[_from]; bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); if(_from != ecrecover(h,_v,_r,_s)) revert(); if(balances[_to] + _value < balances[_to] || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); balances[_to] += _value; Transfer(_from, _to, _value); balances[msg.sender] += _feeSmt; Transfer(_from, msg.sender, _feeSmt); balances[_from] -= _value + _feeSmt; nonces[_from] = nonce + 1; return true; }", + "label": "Integer Overflow", + "file_name": "2018-10376.sol", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + }, + { + "function_name": "allocateTokens", + "vulnerability": "Unrestricted Owner Minting", + "criticism": "The reasoning is partially correct. While the owner can mint tokens without a cap within the time window, this is a design choice (centralization risk) rather than a technical vulnerability. The overflow checks in the code prevent unintended supply inflation. Severity is moderate (7) as it depends on the owner's intent, and profitability is low (0) for external attackers unless the owner is compromised.", + "correctness": 7, + "severity": 7, + "profitability": 0, + "reason": "The `allocateTokens` function allows the owner to mint unlimited tokens within 1 day of deployment. There is no cap on `totalSupply`, so a malicious/compromised owner can inflate the supply indefinitely, devaluing existing tokens. Even though the function is time-limited, the 1-day window is sufficient to cause significant harm if exploited.", + "code": "function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { if(allocateEndTime < now) revert(); if(_owners.length != _values.length) revert(); for(uint256 i = 0; i < _owners.length ; i++){ address to = _owners[i]; uint256 value = _values[i]; if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); totalSupply += value; balances[to] += value; } }", + "label": "Integer Overflow", + "file_name": "2018-10376.sol", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + }, + { + "function_name": "approveAndCallcode", + "vulnerability": "Reentrancy via External Call", + "criticism": "The reasoning is accurate. The external call `_spender.call(_extraData)` occurs after setting the allowance, enabling reentrancy. A malicious spender can repeatedly reset the allowance and drain funds. This is a high-severity vulnerability with direct profitability for attackers, akin to classic reentrancy exploits like the DAO hack.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The function performs an external call (`_spender.call(_extraData)`) after setting an allowance. A malicious `_spender` can re-enter the contract (e.g., by calling `transferFrom` or `approveAndCallcode` again) before the allowance is consumed. This allows repeated draining of the allowance, as each reentrant call resets `allowed[msg.sender][_spender]` to `_value`.", + "code": "function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(_extraData)) { revert(); } return true; }", + "label": "Integer Overflow", + "file_name": "2018-10376.sol", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10666.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10666.json new file mode 100644 index 00000000..c349d3a7 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10666.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "setOwner", + "vulnerability": "Missing access control", + "criticism": "The reasoning is entirely correct. The absence of an access control modifier (e.g., onlyOwner) allows any caller to arbitrarily set the contract owner. This is a critical vulnerability because ownership control grants access to privileged functions, enabling fund drainage, parameter manipulation, and full contract takeover. The severity and profitability are both maximal, as an attacker can immediately exploit this to steal assets or disrupt operations.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The setOwner function lacks the onlyOwner modifier, allowing any caller to arbitrarily change the contract owner. This enables an attacker to take full control of the contract, including privileged functions like uploadBalances, setExportFee, or unlockToken. Once ownership is hijacked, the attacker can drain funds, manipulate fees, or disrupt the contract's operation.", + "code": "function setOwner(address _owner) returns (bool success) { owner = _owner; return true; }", + "label": "Access Control", + "file_name": "2018-10666.sol", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables." + }, + { + "function_name": "transfer", + "vulnerability": "Integer overflow/underflow", + "criticism": "The reasoning is incorrect. While the code uses raw arithmetic, the function includes require(balanceOf[msg.sender] >= _amount) and require(balanceOf[_to] + _amount >= balanceOf[_to]), which explicitly prevent underflow (sender balance) and overflow (recipient balance). These checks render the SafeMath argument moot. The vulnerability claim is invalid, as the code already enforces overflow/underflow safety through conditionals. No exploit path exists here.", + "correctness": 1, + "severity": 0, + "profitability": 0, + "reason": "The transfer and transferFrom functions use raw arithmetic operations (e.g., balanceOf[msg.sender] -= _amount) without leveraging the inherited SafeMath library. In Solidity <0.8.0, this allows integer underflows/overflows. An attacker can send tokens they don\u2019t own (underflow to max uint256) or overflow a recipient\u2019s balance to near-zero. This directly compromises the token\u2019s integrity and enables theft or denial of service.", + "code": "function transfer(address _to, uint256 _amount) returns (bool success) { require(!locked); require(balanceOf[msg.sender] >= _amount); require(balanceOf[_to] + _amount >= balanceOf[_to]); balanceOf[msg.sender] -= _amount; uint256 preBalance = balanceOf[_to]; balanceOf[_to] += _amount; bool alreadyMax = preBalance >= singleIDXMQty; if (!alreadyMax) { if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; validAfter[_to].ts = now; } if (validAfter[msg.sender].last > balanceOf[msg.sender]) validAfter[msg.sender].last = balanceOf[msg.sender]; Transfer(msg.sender, _to, _amount); return true; }", + "label": "Access Control", + "file_name": "2018-10666.sol", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables." + }, + { + "function_name": "approve", + "vulnerability": "Allowance front-running", + "criticism": "The reasoning is valid. The approve function lacks a mitigation for the front-running race condition (e.g., requiring allowance reset to zero before non-zero updates). Attackers can exploit this to double-spend allowances if users adjust approvals. However, severity is moderate (7) as exploitation requires specific user behavior (changing existing non-zero allowances) and mempool monitoring. Profitability is high (7) if successful, but contingent on victim actions.", + "correctness": 9, + "severity": 7, + "profitability": 7, + "reason": "The approve function does not enforce the check-effects-interaction pattern or require resetting allowances to zero before updating. Attackers can front-run a user\u2019s approval change (e.g., from 100 to 50) by first using the old allowance (100) before it\u2019s reduced. This allows double-spending of allowances, enabling unauthorized token transfers from the victim\u2019s balance.", + "code": "function approve(address _spender, uint256 _amount) returns (bool success) { require(!locked); allowance[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "label": "Access Control", + "file_name": "2018-10666.sol", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10705.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10705.json new file mode 100644 index 00000000..fab023d3 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-10705.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "setOwner", + "vulnerability": "Unrestricted Ownership Transfer", + "criticism": "The reasoning is entirely correct. The absence of an onlyOwner modifier allows any address to change the owner, leading to full contract control. This is a critical vulnerability because ownership privileges often include fund control and administrative functions. The severity and profitability are maximized since an attacker can immediately drain funds or disrupt the contract. The exploit requires no preconditions and is trivially executable.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The setOwner function lacks the onlyOwner modifier, allowing any address to arbitrarily change the contract owner. This enables an attacker to immediately take full control of the contract, including privileged functions like unlockToken and uploadBalances, leading to fund theft or contract destruction.", + "code": "function setOwner(address _owner) returns (bool success) { owner = _owner; return true; }", + "label": "Access Control", + "file_name": "2018-10705.sol", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack." + }, + { + "function_name": "uploadBalances", + "vulnerability": "Array Length Mismatch Token Loss", + "criticism": "The reasoning is partially correct but misses critical context. While unequal array lengths can cause out-of-bounds reads (returning 0 in legacy Solidity versions), the actual token loss occurs only if recipients.length > balances.length. In such cases, the owner's balance is reduced by the sum of the valid balances array, but excess recipients receive 0 tokens, effectively burning the sum. However, this requires the owner to mistakenly call the function with mismatched arrays. Since the function is onlyOwner, external attackers cannot trigger this. Severity is moderate (owner-induced error), and profitability is negligible for attackers.", + "correctness": 6, + "severity": 5, + "profitability": 0, + "reason": "The uploadBalances function does not enforce equal lengths for recipients and balances arrays. If recipients.length > balances.length, balances[i] returns 0 beyond the balances array's end, causing the owner's balance to be reduced by the sum of the valid balances while recipients receive incorrect (often zero) amounts. This permanently burns the sum from the owner's balance, leading to irreversible token loss.", + "code": "function uploadBalances(address[] recipients, uint256[] balances) onlyOwner { require(!balancesUploaded); uint256 sum = 0; for (uint256 i = 0; i < recipients.length; i++) { balanceOf[recipients[i]] = safeAdd(balanceOf[recipients[i]], balances[i]); sum = safeAdd(sum, balances[i]); } balanceOf[owner] = safeSub(balanceOf[owner], sum); }", + "label": "Access Control", + "file_name": "2018-10705.sol", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack." + }, + { + "function_name": "approve", + "vulnerability": "Allowance Race Condition", + "criticism": "The reasoning correctly identifies the ERC20 front-running risk, but this is a protocol-level limitation, not a code flaw. The function follows the ERC20 standard, which does not mandate allowance resetting. The severity is moderate because exploitation depends on user behavior (e.g., not resetting allowances). Profitability is context-dependent: if high-value allowances exist, attackers could profit by front-running reduction attempts. However, this is a known ERC20 trade-off, not a unique contract vulnerability.", + "correctness": 5, + "severity": 4, + "profitability": 6, + "reason": "The approve function does not mitigate the ERC20 allowance front-running attack. If a user reduces their approval for a spender, the spender can front-run the transaction to use the old allowance before the reduction. This allows attackers to drain funds up to the previous higher allowance, especially impactful once the contract is unlocked.", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(!locked); allowance[msg.sender][_spender] = _value; return true; }", + "label": "Access Control", + "file_name": "2018-10705.sol", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-11335.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-11335.json new file mode 100644 index 00000000..ca5dcbd5 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-11335.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "mint", + "vulnerability": "Integer overflow in minting", + "criticism": "The reasoning is partially correct. While the absence of SafeMath could theoretically allow overflows, Solidity \u22650.8.0 automatically checks for overflows. If the contract uses an older compiler, the require(totalSupply + value <= TOKEN_LIMIT) check is vulnerable to overflow bypass (e.g., wrapping to 0). However, the attacker must control the `ico` address to exploit this, which limits exploitability. Severity is high only if `ico` is compromised. Profitability depends on the attacker's ability to mint beyond TOKEN_LIMIT and dump tokens.", + "correctness": 8, + "severity": 7, + "profitability": 6, + "reason": "The mint function does not use SafeMath for addition, allowing integer overflows. The require statement 'totalSupply + value <= TOKEN_LIMIT' can be bypassed if totalSupply + value overflows, resulting in a wrapped value that is within the limit. Additionally, 'balances[holder] += value' and 'totalSupply += value' can overflow, leading to incorrect token balances and total supply. An attacker with control over the ico address could exploit this to mint tokens beyond the intended TOKEN_LIMIT or corrupt balances.", + "code": "function mint(address holder, uint value) public {\n require(msg.sender == ico);\n require(value > 0);\n require(totalSupply + value <= TOKEN_LIMIT);\n balances[holder] += value;\n totalSupply += value;\n Transfer(0x0, holder, value);\n}", + "label": "Integer Overflow", + "file_name": "2018-11335.sol", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner." + }, + { + "function_name": "setMigrationAgent", + "vulnerability": "Privilege escalation via migration agent", + "criticism": "The reasoning is accurate. The function centralizes trust in `migrationMaster`, creating a single point of failure. If compromised, an attacker can set a malicious agent to drain user funds during migration. This is a critical vulnerability if `migrationMaster` is an EOA or poorly secured contract. Severity is high due to the potential for total fund loss. Profitability is extreme if the agent steals migrating tokens.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The setMigrationAgent function allows the migrationMaster to set a malicious migration agent contract once. If the migrationMaster's account is compromised, an attacker can set a malicious agent. Users who call migrate() will have their tokens transferred to the attacker's contract via MigrationAgent.migrateFrom, resulting in loss of funds. This centralizes trust in migrationMaster, creating a single point of failure.", + "code": "function setMigrationAgent(address _agent) external {\n require(migrationAgent == 0);\n require(msg.sender == migrationMaster);\n migrationAgent = _agent;\n}", + "label": "Integer Overflow", + "file_name": "2018-11335.sol", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner." + }, + { + "function_name": "approve", + "vulnerability": "ERC20 approve front-running", + "criticism": "The reasoning is correct but overstates the risk. The function inherits the standard ERC20 front-running issue, where changing a non-zero allowance requires first resetting to zero. However, this is a well-known limitation of ERC20, not a code flaw. Severity is moderate since it relies on user error (not resetting allowances). Profitability is low unless users recklessly adjust allowances for untrusted spenders.", + "correctness": 7, + "severity": 3, + "profitability": 2, + "reason": "The approve function is vulnerable to the ERC20 race condition. If a user changes the approval amount from a non-zero value to another non-zero value, a malicious spender can front-run the transaction, using the old allowance before it's reduced. This can lead to unintended allowance usage. Although increaseApproval/decreaseApproval exist, the standard approve remains risky, especially when users are unaware of the race condition.", + "code": "function approve(address _spender, uint _value) public returns (bool) {\n require(!isFrozen);\n return super.approve(_spender, _value);\n}", + "label": "Integer Overflow", + "file_name": "2018-11335.sol", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-12025.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-12025.json new file mode 100644 index 00000000..78e9ded5 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-12025.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "transferFrom", + "vulnerability": "Inverted Allowance Check & Underflow", + "criticism": "The reasoning is correct. The inverted check allows transfers when allowance is insufficient, and the underflow (due to Solidity 0.4.2) sets the allowance to a massive value. This allows attackers to drain the victim's balance after one underflow. The severity is critical (direct theft) and profitability is extremely high. The code flaw is unambiguous and exploitable.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The condition `if( allowed[from][msg.sender] >= value ) return false;` is inverted. This allows transfers when the allowance is **insufficient** (allowed < value) instead of enforcing it. Furthermore, when `allowed[from][msg.sender]` is less than `value`, the line `allowed[from][msg.sender] -= value;` underflows (due to Solidity 0.4.2's lack of overflow checks), setting the allowance to a massive value (2^256 - X). Attackers can exploit this to gain infinite approval after one underflow, enabling unlimited token transfers from the victim's account.", + "code": "function transferFrom(address from, address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[from] < value) return false; if( allowed[from][msg.sender] >= value ) return false; if(balances[to] + value < balances[to]) return false; balances[from] -= value; allowed[from][msg.sender] -= value; balances[to] += value; Transfer(from, to, value); return true; }", + "label": "Wrong Logic", + "file_name": "2018-12025.sol", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + }, + { + "function_name": "transferFrom", + "vulnerability": "Incorrect Frozen Account Check", + "criticism": "The reasoning is accurate. The check on `msg.sender` (spender) instead of `from` (token owner) allows transfers from frozen accounts via approved spenders. Severity is high if freezing is meant to block all transfers. Profitability depends on attackers having prior approval, but it violates core security assumptions.", + "correctness": 9, + "severity": 8, + "profitability": 7, + "reason": "The function checks `frozenAccount[msg.sender]` (spender's status) instead of `frozenAccount[from]` (token owner's status). A frozen account (from) can still have its tokens transferred via an approved spender (msg.sender) as long as the spender is not frozen. This violates the intended freezing logic, allowing attackers to bypass account freezes by using approved addresses.", + "code": "function transferFrom(address from, address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[from] < value) return false; if( allowed[from][msg.sender] >= value ) return false; if(balances[to] + value < balances[to]) return false; balances[from] -= value; allowed[from][msg.sender] -= value; balances[to] += value; Transfer(from, to, value); return true; }", + "label": "Wrong Logic", + "file_name": "2018-12025.sol", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + }, + { + "function_name": "approve", + "vulnerability": "Unsafe ERC20 Approve", + "criticism": "The reasoning is valid but overstates severity. The lack of a zero-reset check enables front-running, but this is a known ERC20 design flaw, not a code-specific bug. Severity is moderate (requires user error) and profitability is medium (depends on user behavior).", + "correctness": 7, + "severity": 5, + "profitability": 5, + "reason": "The `approve` function does not include a check for the front-running race condition. If a user changes their approval from a non-zero value to another non-zero value, an attacker can front-run the transaction to use the old approval before it is reset. While this is a known ERC20 design flaw, its presence here allows attackers to steal funds if users naively adjust approvals without first setting them to zero.", + "code": "function approve(address _spender, uint256 _amount) returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "label": "Wrong Logic", + "file_name": "2018-12025.sol", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-13836.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-13836.json new file mode 100644 index 00000000..2dcedde3 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-13836.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "multiTransfer", + "vulnerability": "Integer Overflow in Token Transfer", + "criticism": "The reasoning is correct. In Solidity <0.8.0, integer overflow is not automatically checked. The summation of `_amounts` in a loop can overflow, allowing an attacker to bypass the balance check and mint tokens. This directly violates the token's integrity, enabling theft. Severity is critical as it breaks the core token economics. Profitability is high because attackers can create tokens arbitrarily and drain value.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The `multiTransfer` function calculates `totalAmount` by summing all `_amounts` without overflow checks. Using Solidity 0.4.18 (which lacks automatic overflow protection), an attacker can craft `_amounts` values that overflow `totalAmount`, bypassing the `balances[msg.sender] >= totalAmount` check. For example, if the sum overflows to a small value, the attacker's balance is reduced minimally, but recipients receive large amounts, effectively stealing tokens from the contract.", + "code": "function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { require(_addresses.length <= 100 && _addresses.length == _amounts.length); uint totalAmount; for (uint a = 0; a < _amounts.length; a++) { totalAmount += _amounts[a]; } require(totalAmount > 0 && balances[msg.sender] >= totalAmount); balances[msg.sender] -= totalAmount; for (uint b = 0; b < _addresses.length; b++) { if (_amounts[b] > 0) { balances[_addresses[b]] += _amounts[b]; Transfer(msg.sender, _addresses[b], _amounts[b]); } } return true; }", + "label": "Integer Overflow", + "file_name": "2018-13836.sol", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + }, + { + "function_name": "approve", + "vulnerability": "Front-Runnable Approval", + "criticism": "The reasoning is valid. The absence of a zero-reset in `approve` allows front-running when reducing allowances. However, this is a known ERC-20 design limitation, not a code flaw. Severity is moderate as it depends on user behavior (e.g., reducing allowances). Profitability is context-dependent but possible if allowances are large. The vulnerability is real but inherent to the standard pattern.", + "correctness": 8, + "severity": 6, + "profitability": 7, + "reason": "The `approve` function allows a user to set a new allowance without first resetting it to zero. An attacker can front-run a user's approval reduction (e.g., from 5 to 3) by observing the transaction in the mempool and executing a `transferFrom` with the old allowance (5) before it is reduced. This enables double-spending of the originally approved amount, violating the user's intended authorization limits.", + "code": "function approve(address _spender, uint256 _amount) public returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "label": "Integer Overflow", + "file_name": "2018-13836.sol", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + }, + { + "function_name": "fallback function", + "vulnerability": "Trapped ETH with No Handling", + "criticism": "The reasoning is accurate. The `payable` fallback function does not handle incoming ETH, leading to permanent loss. Severity is high for users but low for the contract itself. Profitability is zero for attackers, but user funds are irrecoverable. The flaw is a design oversight, making it critical for user experience but not directly exploitable for profit.", + "correctness": 9, + "severity": 7, + "profitability": 0, + "reason": "The fallback function is `payable` but does not process incoming ETH. Users may mistakenly send ETH (e.g., assuming it's required for the airdrop), which becomes permanently locked in the contract. While the airdrop itself does not require ETH, the contract's design misleads users into sending funds that are never used or returned, resulting in accidental financial loss.", + "code": "function() public payable { require(airDropStatus && balances[owner] >= airDropAmount && !participants[msg.sender] && tx.gasprice >= airDropGasPrice); balances[owner] -= airDropAmount; balances[msg.sender] += airDropAmount; Transfer(owner, msg.sender, airDropAmount); participants[msg.sender] = true; }", + "label": "Integer Overflow", + "file_name": "2018-13836.sol", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-15552.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-15552.json new file mode 100644 index 00000000..491a2d09 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-15552.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "withdraw", + "vulnerability": "Owner can steal funds mid-lottery", + "criticism": "The reasoning is accurate. The withdraw() function allows the owner to drain the contract balance and reset state variables at any time, even mid-lottery. This is a critical centralization risk. Correctness is 9 because the code explicitly enables this. Severity is 9 because it directly enables fund theft. Profitability is 9 for the owner (though not an external attacker), but since the vulnerability centers on owner abuse, the exploit potential is maximal.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The withdraw() function allows the owner to reset the lottery state (numtickets, totalBounty) and transfer the entire contract balance to themselves at any time, including during an active round. This enables the owner to steal all accumulated ticket funds from participants before the lottery completes. Participants who already bought tickets would lose their ETH without any reward distribution.", + "code": "function withdraw() public { require(worldOwner == msg.sender); lottoIndex += 1; numtickets = 0; totalBounty = 0; worldOwner.transfer(this.balance); }", + "label": "Bad Randomness", + "file_name": "2018-15552.sol", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "PayWinner", + "vulnerability": "DoS via failed winner transfer", + "criticism": "The analysis is correct. Using transfer() without handling failures can permanently brick the contract. If the winner is a non-payable contract, the transfer reverts, leaving numtickets == maxTickets and blocking AddTicket() indefinitely. Correctness is 9 (code uses unsafe transfer). Severity is 8 (permanent DoS), but profitability is 2: attackers can disrupt the contract but gain little unless they sabotage for ideological reasons. The vulnerability is severe for system availability but offers limited direct profit.", + "correctness": 9, + "severity": 8, + "profitability": 2, + "reason": "PayWinner uses transfer() to send funds to the winner. If the winner is a contract without a payable fallback function, the transfer will fail, reverting the entire transaction. This leaves the contract state (numtickets == maxTickets) unchanged, permanently blocking the AddTicket function (due to its numtickets < maxTickets check). Attackers can exploit this by purchasing the last ticket with a non-payable address to intentionally brick the contract.", + "code": "function PayWinner( address winner ) private { require(numtickets == maxTickets); uint ownerTax = 6 * totalBounty / 100; uint winnerPrice = totalBounty - ownerTax; LottoComplete(msg.sender, lottoIndex, winnerPrice); lottoIndex += 1; numtickets = 0; totalBounty = 0; if(_direction == 0 && maxTickets < 20) maxTickets += 1; if(_direction == 1 && maxTickets > 10) maxTickets -= 1; if(_direction == 0 && maxTickets == 20) _direction = 1; if(_direction == 1 && maxTickets == 10) _direction = 0; worldOwner.transfer(ownerTax); winner.transfer(winnerPrice); }", + "label": "Bad Randomness", + "file_name": "2018-15552.sol", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "AddTicket", + "vulnerability": "Predictable last-ticket winner selection", + "criticism": "The reasoning is valid. The winner is deterministically the last ticket purchaser, enabling MEV bots to front-run the final transaction. Correctness is 9 (code enforces this logic). Severity is 7 (violates fairness but doesn\u2019t directly drain funds). Profitability is 8 for attackers with MEV capabilities, as they can guarantee wins. However, this is more a design flaw than a traditional vulnerability; it assumes malicious actors can manipulate transaction ordering, which is inherent to Ethereum\u2019s mechanics.", + "correctness": 9, + "severity": 7, + "profitability": 8, + "reason": "The winner is deterministically set to the last address that submits a ticket when maxTickets is reached. Attackers can monitor the blockchain for pending transactions and front-run the final ticket purchase to guarantee they become the winner. This violates fair lottery mechanics and allows centralized exploitation by bots/MEV searchers.", + "code": "function AddTicket() public payable { require(msg.value == ticketPrice); require(numtickets < maxTickets); lastTicketTime = now; numtickets += 1; totalBounty += ticketPrice; bool success = numtickets == maxTickets; NewTicket(msg.sender, success); if(success) { PayWinner(msg.sender); } }", + "label": "Bad Randomness", + "file_name": "2018-15552.sol", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-17877.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-17877.json new file mode 100644 index 00000000..7751f68f --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-17877.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "luckyBuy", + "vulnerability": "Insecure Pseudo-Randomness", + "criticism": "The reasoning is correct. The function relies entirely on predictable/miner-manipulable variables (block.timestamp, block.difficulty, etc.) to generate randomness. This allows miners or attackers to precompute favorable seeds and game the system. The severity is high as it directly undermines the fairness of the 'lucky' mechanism. Profitability is also high since attackers could systematically exploit this to win prizes. However, the impact depends on the value of the prize pool, which is not specified here.", + "correctness": 9, + "severity": 8, + "profitability": 8, + "reason": "The 'luckyBuy' function uses block.timestamp, block.difficulty, block.coinbase, and other predictable on-chain data to generate randomness. Miners can manipulate these values to influence the outcome, allowing attackers to increase their chances of winning the Luckybuy prize. This makes the randomness exploitable and not truly random.", + "code": "function luckyBuy() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < luckybuyTracker_) return(true); else return(false); }", + "label": "Bad Randomness", + "file_name": "2018-17877.sol", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "win", + "vulnerability": "DoS via Failed Transfer", + "criticism": "The reasoning is accurate. The use of transfer() without handling revert scenarios creates a critical DoS risk. If RoundLastGreedyMan[Round] is a contract with a non-payable fallback (e.g., gas-intensive or intentionally malicious), the transfer fails, blocking Round++ and freezing contract progression. Severity is extreme (9) since the entire protocol halts. Profitability is moderate (5) only if attackers can intentionally become RoundLastGreedyMan and trigger this to block competitors, but this requires specific preconditions.", + "correctness": 9, + "severity": 9, + "profitability": 5, + "reason": "The 'win' function uses transfer() to send ETH to RoundLastGreedyMan without handling potential failures. If the winner is a contract with a fallback function that reverts (e.g., due to gas limits or intentional sabotage), the transfer will fail, causing the entire transaction to revert. This prevents the round from incrementing, halting the contract indefinitely.", + "code": "function win() public { require(now > RoundTime[Round] && RoundTime[Round] != 0); RoundLastGreedyMan[Round].transfer(RoundETH[Round]); emit winnerEvent(RoundLastGreedyMan[Round], RoundETH[Round], Round); Round++; }", + "label": "Bad Randomness", + "file_name": "2018-17877.sol", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "buyHeart", + "vulnerability": "Contract Call Bypass", + "criticism": "The reasoning is correct. The extcodesize check is ineffective during contract construction (constructor phase), allowing malicious contracts to bypass the 'humans only' restriction. Severity is high (7) if the contract relies on human exclusivity for anti-botting or fairness. Profitability is high (8) if automated contract interactions provide unfair advantages (e.g., sniping limited resources). The vulnerability is well-known but remains critical in contexts requiring human participation.", + "correctness": 9, + "severity": 7, + "profitability": 8, + "reason": "The 'buyHeart' function checks if the sender is a contract by checking extcodesize. However, during contract construction (constructor), extcodesize returns 0, allowing malicious contracts to bypass this check. Attackers can exploit this to automate purchases or manipulate the game logic, violating the 'humans only' requirement.", + "code": "function buyHeart(address referred) public payable { ... address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, \"sorry humans only\"); ... }", + "label": "Bad Randomness", + "file_name": "2018-17877.sol", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-17882.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-17882.json new file mode 100644 index 00000000..5a02b3aa --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-17882.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "transferFrom", + "vulnerability": "Unauthorized transfers to 'fights' address", + "criticism": "The reasoning correctly identifies that transfers to the 'fights' address bypass allowance checks. However, the severity depends on whether 'fights' is attacker-controlled. If 'fights' is immutable or non-malicious, the impact is limited to forced token burns or disruptions. If 'fights' can be set by the attacker (e.g., via compromised owner), severity increases. Profitability is moderate only if the attacker can extract value from 'fights'.", + "correctness": 9, + "severity": 7, + "profitability": 5, + "reason": "The transferFrom function does not check or deduct the allowance when transferring to the 'fights' address. This allows any user to transfer tokens from any account to the 'fights' address without requiring approval. An attacker can exploit this by setting 'fights' to a controlled address (if owner is compromised) or leveraging existing 'fights' access to drain funds from arbitrary accounts.", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {\n balances[_to] = safeAdd(balances[_to], _value);\n balances[_from] = safeSub(balances[_from], _value);\n if (_to != fights) {\n allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);\n }\n Transfer(_from, _to, _value);\n return true;\n}", + "label": "Integer Overflow", + "file_name": "2018-17882.sol", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + }, + { + "function_name": "batchTransfer", + "vulnerability": "Integer overflow in multiplication", + "criticism": "The reasoning is accurate. The lack of a safeMul check allows an attacker to force an overflow, deduct negligible tokens from their balance, and credit recipients with large amounts. This directly enables token inflation, making severity and profitability extremely high. The use of safeSub does not mitigate the unchecked multiplication.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The multiplication '_to.length * _value' in batchTransfer is vulnerable to integer overflow. An attacker can craft a large '_to.length' and '_value' such that the product overflows to a small value (e.g., 0). This allows them to bypass balance checks, deduct little/no tokens from their balance, while still crediting all recipients with '_value' tokens. This effectively mints tokens out of thin air.", + "code": "function batchTransfer(address[] _to, uint _value) public {\n balances[msg.sender] = safeSub(\n balances[msg.sender],\n _to.length * _value\n );\n for (uint i = 0; i < _to.length; i++) {\n balances[_to[i]] = safeAdd(balances[_to[i]], _value);\n Transfer(msg.sender, _to[i], _value);\n }\n}", + "label": "Integer Overflow", + "file_name": "2018-17882.sol", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + }, + { + "function_name": "transferFrom", + "vulnerability": "Incorrect allowance handling order", + "criticism": "The code does update balances before allowances, but safeSub ensures allowance underflow reverts the transaction, preventing direct exploitation. While violating checks-effects-interactions, there are no external calls to enable reentrancy. The reasoning overstates the risk; this is a code-style issue, not an active vulnerability. Severity and profitability are negligible.", + "correctness": 3, + "severity": 1, + "profitability": 0, + "reason": "The transferFrom function updates balances before modifying allowances. While safe for non-fights addresses (due to revert on underflow), this violates the checks-effects-interactions pattern. If external calls were present, this could enable reentrancy. Though not directly exploitable here, it reflects poor security practices and increases risk if contract logic evolves.", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {\n balances[_to] = safeAdd(balances[_to], _value);\n balances[_from] = safeSub(balances[_from], _value);\n if (_to != fights) {\n allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);\n }\n Transfer(_from, _to], _value);\n return true;\n}", + "label": "Integer Overflow", + "file_name": "2018-17882.sol", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-18425.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-18425.json new file mode 100644 index 00000000..79be611a --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-18425.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "approve", + "vulnerability": "Non-standard ERC20 allowance freeze", + "criticism": "The reasoning is correct. The function enforces a non-standard ERC20 behavior by blocking non-zero allowance updates, requiring users to reset to zero first. This creates a front-running risk during allowance adjustments. However, the severity is moderate because it primarily affects compatibility with standard contracts rather than enabling direct theft. Profitability for attackers is low, as exploitation requires specific user actions (allowance changes) and only allows stealing up to the original allowance amount.", + "correctness": 9, + "severity": 6, + "profitability": 3, + "reason": "The approve function prevents updating an existing non-zero allowance to another non-zero value. This violates ERC20 standards and forces users to reset their allowance to zero first, creating a race condition vulnerable to front-running attacks. Contracts/DEXs expecting standard behavior will fail when users try to adjust allowances, breaking compatibility and potentially locking funds.", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; }", + "label": "Token Devalue", + "file_name": "2018-18425.sol", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)" + }, + { + "function_name": "withdraw", + "vulnerability": "Owner ETH drain", + "criticism": "The reasoning is accurate. The function allows immediate full ETH extraction by the owner with no safeguards. This is a critical centralization risk and direct scam vector. Severity is extreme (9) as it enables total fund loss. However, profitability scores 0 under the assumption that scoring reflects external attacker profit potential - this is strictly owner abuse. From a system impact perspective, this is a 9/9 vulnerability, but following prior example conventions for privileged roles, external attackers cannot exploit it.", + "correctness": 9, + "severity": 9, + "profitability": 0, + "reason": "The withdraw function allows the owner to drain all ETH from the contract at any time. Users sending ETH during token distribution have no guarantee their funds will be used as intended. This creates a direct financial scam vector where the owner can collect ETH and disappear without distributing proper token value.", + "code": "function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); }", + "label": "Token Devalue", + "file_name": "2018-18425.sol", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)" + }, + { + "function_name": "doAirdrop", + "vulnerability": "Supply cap bypass", + "criticism": "The analysis is fully correct. The pre-addition check allows minting beyond totalSupply when totalDistributed is near the cap. This completely breaks the token's supply guarantee, enabling hyperinflation. Severity is catastrophic (9) as it undermines the token's fundamental economics. Profitability scores 0 for external attackers (assuming internal/owner-only access), but the owner could theoretically profit by minting unlimited tokens. Following example conventions for owner privileges, we score profitability 0 despite massive owner abuse potential.", + "correctness": 9, + "severity": 9, + "profitability": 0, + "reason": "The doAirdrop function only checks if totalDistributed < totalSupply BEFORE adding new tokens. If totalDistributed is 1 unit less than totalSupply, the owner can airdrop any amount (e.g., 1B tokens), causing totalDistributed to exceed totalSupply. This breaks the token's supply cap, enabling infinite inflation and total devaluation of the token.", + "code": "function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); }", + "label": "Token Devalue", + "file_name": "2018-18425.sol", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)" + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-19830.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-19830.json new file mode 100644 index 00000000..b0cbb5df --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2018-19830.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "UBSexToken", + "vulnerability": "Insecure Initialization via Public Function", + "criticism": "The reasoning assumes the function is public due to a mismatched constructor name. However, if the contract is named 'UBSexToken', this is a valid constructor (pre-Solidity 0.4.22) and cannot be called post-deployment. The vulnerability only exists if the contract name differs, which is not confirmed here. Thus, the analysis is contextually flawed. If correct (contract name mismatch), severity would be catastrophic, but the assumption is unverified.", + "correctness": 2, + "severity": 0, + "profitability": 0, + "reason": "The function UBSexToken() is not a constructor (mismatched contract name) and is publicly callable. Attackers can invoke it post-deployment to reset the owner, totalSupply, and balances, effectively hijacking the contract. This allows an attacker to mint the entire token supply to themselves and gain ownership, leading to total control over the contract.", + "code": "function UBSexToken() { owner = msg.sender; totalSupply = 1.9 * 10 ** 26; balances[owner] = totalSupply; }", + "label": "Access Control", + "file_name": "2018-19830.sol", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity." + }, + { + "function_name": "transfer", + "vulnerability": "Missing ERC20 Return Value", + "criticism": "The reasoning is accurate: the function lacks a boolean return value, violating ERC20 standards. This breaks interoperability with ERC20-reliant systems, causing transactions to fail. However, the severity is high for contract usability but low for direct exploitation. Attackers cannot profit from this flaw, but it critically impacts the token's functionality.", + "correctness": 9, + "severity": 8, + "profitability": 2, + "reason": "The transfer function does not return a boolean as required by the ERC20 standard. Contracts/Wallets expecting ERC20 compliance will treat the missing return value as a failure, causing transactions to revert. This breaks interoperability with exchanges, DeFi protocols, and other ERC20-reliant systems.", + "code": "function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) unFrozenAccount onlyTransferable { if (frozenAccount[_to]) { InvalidAccount(_to, \"The receiver account is frozen\"); } else { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); } }", + "label": "Access Control", + "file_name": "2018-19830.sol", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity." + }, + { + "function_name": "approve", + "vulnerability": "Unsafe Allowance Update", + "criticism": "The reasoning is correct. By enforcing a zero-reset before updating allowances, the function introduces a race condition. Attackers can front-run the reset transaction to exploit the old allowance. This is a well-documented ERC20 flaw with high severity and profitability, as malicious spenders can drain funds during the approval window.", + "correctness": 9, + "severity": 8, + "profitability": 8, + "reason": "The approve function throws when updating a non-zero allowance to another non-zero value. This forces users to reset allowance to zero first, creating a race condition where a spender can use the old allowance before it is updated. Attackers can front-run the second approval transaction to drain funds using the outdated allowance.", + "code": "function approve(address _spender, uint _value) unFrozenAccount { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); }", + "label": "Access Control", + "file_name": "2018-19830.sol", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15078.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15078.json new file mode 100644 index 00000000..c8a4b515 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15078.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "approve", + "vulnerability": "Non-standard ERC20 approve", + "criticism": "The reasoning correctly identifies the ERC20 standard violation. By returning false when attempting to update a non-zero allowance, the function deviates from the ERC20 specification, which allows adjusting allowances from any value. This creates compatibility issues with contracts expecting standard behavior, enabling front-running attacks to lock approvals. However, the severity is reduced because modern UIs often handle allowance resets, and profitability depends on attacker ability to exploit front-running, which is situational. The direct financial impact is limited unless combined with other attack vectors.", + "correctness": 8, + "severity": 6, + "profitability": 4, + "reason": "The approve function returns false if attempting to update a non-zero allowance to another non-zero value, violating ERC20 standards. This prevents users from adjusting existing allowances without first resetting them to zero. Attackers can exploit this by front-running approval changes, causing transactions to fail or funds to be locked. Contracts expecting standard ERC20 behavior will misinterpret the false return value, leading to operational failures.", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) {\n if (_value != 0 && allowed[msg.sender][_spender] != 0) {\n return false;\n }\n allowed[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n}", + "label": "Typo Constructor", + "file_name": "2019-15078.sol", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free." + }, + { + "function_name": "onlyPayloadSize", + "vulnerability": "Gas exhaustion via assert()", + "criticism": "The analysis is accurate. Using assert() instead of require() creates gas-draining potential, as failed assertions consume all transaction gas. This could be weaponized in short-address attacks or malformed payloads. Severity is high due to the irreversible gas loss, but profitability requires attackers to trick users into initiating the transactions (e.g., via phishing). While dangerous, real-world exploitation requires social engineering, making direct profitability moderate. The correctness score is high as the code flaw is unambiguous.", + "correctness": 9, + "severity": 8, + "profitability": 6, + "reason": "The onlyPayloadSize modifier uses assert() to validate transaction payload size. Unlike require(), assert() consumes all gas on failure. Attackers can craft malformed transactions (e.g., short-address attacks) to trigger this assertion, forcing victims to waste all gas. This enables gas-draining attacks and disrupts user transactions, directly benefiting attackers by increasing operational costs.", + "code": "modifier onlyPayloadSize(uint size) {\n assert(msg.data.length >= size + 4);\n _;\n}", + "label": "Typo Constructor", + "file_name": "2019-15078.sol", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free." + }, + { + "function_name": "getTokens", + "vulnerability": "ETH trapping with owner withdrawal", + "criticism": "The reasoning is partially correct. While the function accepts ETH without processing it, the vulnerability assumes the existence of a withdraw() function (not shown). If withdrawal logic exists, trapped ETH could be stolen by the owner. Severity depends on the contract's ETH balance size and user awareness. Profitability requires active social engineering to trick users into sending ETH. The code flaw itself (payable without value handling) is severe, but exploitation requires external factors, lowering immediate risk.", + "correctness": 7, + "severity": 7, + "profitability": 5, + "reason": "The getTokens function is payable but does not process or validate msg.value. Users can accidentally send ETH, which remains trapped in the contract. The owner can withdraw these funds via withdraw(), creating a risk of financial loss for users. Attackers can also social-engineer victims into sending ETH, effectively stealing funds through the owner's withdrawal capability.", + "code": "function getTokens() payable canDistr onlyWhitelist public {\n if (value > totalRemaining) {\n value = totalRemaining;\n }\n require(value <= totalRemaining);\n address investor = msg.sender;\n uint256 toGive = value;\n distr(investor, toGive);\n if (toGive > 0) {\n blacklist[investor] = true;\n }\n if (totalDistributed >= totalSupply) {\n distributionFinished = true;\n }\n value = value.div(100000).mul(99999);\n}", + "label": "Typo Constructor", + "file_name": "2019-15078.sol", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15079.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15079.json new file mode 100644 index 00000000..92caaa97 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15079.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "EAI_TokenERC20", + "vulnerability": "Reinitialization Attack", + "criticism": "The reasoning is correct. The constructor name mismatch (EAI_TokenERC20 vs. contract EAI_TokenERC) makes it a public function. In Solidity versions <0.4.22, this allows anyone to reinitialize the contract, resetting critical state variables (totalSupply, name, symbol) and granting the attacker all tokens. This is a critical vulnerability: correctness is maximized because the exploit is unambiguous, severity is extreme (total contract hijack), and profitability is maximal (attacker gains full token control).", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The constructor is incorrectly named (EAI_TokenERC20 vs. contract name EAI_TokenERC), making it a public function callable by anyone. Attackers can reinitialize the contract, resetting totalSupply, name, symbol, and assigning themselves the entire token supply. This allows them to mint unlimited tokens, overwrite the contract's state, and effectively hijack control.", + "code": "function EAI_TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; }", + "label": "Typo Constructor", + "file_name": "2019-15079.sol", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free." + }, + { + "function_name": "_transfer", + "vulnerability": "Arithmetic Over/Underflow Risk", + "criticism": "The reasoning is partially flawed. While Solidity 0.4.16 lacks native overflow checks, the manual require(balanceOf[_to] + _value >= balanceOf[_to]) effectively prevents overflow by reverting if addition exceeds uint256. The asserted risk of previousBalances overflow is negligible (sum of two balances exceeding 2^256 is practically impossible). The actual vulnerability is minor: correctness is low because manual checks are sufficient, severity is minimal (no realistic exploit path), and profitability is nonexistent.", + "correctness": 2, + "severity": 1, + "profitability": 0, + "reason": "While manual overflow checks exist, the contract uses Solidity 0.4.16, which lacks native overflow protection. If edge cases bypass the require(balanceOf[_to] + _value >= balanceOf[_to]) check (e.g., via unexpected overflow wrapping), token balances could be corrupted. The assert may fail to detect overflow in previousBalances if the initial sum exceeds uint256 max, leading to inconsistent states.", + "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", + "label": "Typo Constructor", + "file_name": "2019-15079.sol", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free." + }, + { + "function_name": "transferFrom", + "vulnerability": "Front-Running Allowance Race", + "criticism": "The reasoning is incorrect. In Solidity, state changes (allowance decrement) are atomic with the entire transaction. If _transfer reverts (e.g., due to insufficient balance), the allowance reduction is rolled back. There is no scenario where allowance is permanently reduced without a successful transfer. The alleged front-running exploit is invalid. Correctness is 0, as the vulnerability does not exist; severity and profitability are irrelevant.", + "correctness": 0, + "severity": 0, + "profitability": 0, + "reason": "The transferFrom function decrements the allowance before performing the transfer. If the transfer fails (e.g., due to a later revert in _transfer), the allowance is permanently reduced. Attackers could exploit this by front-running transactions to cause intentional failures, effectively locking users' allowances and disrupting expected behavior.", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; }", + "label": "Typo Constructor", + "file_name": "2019-15079.sol", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15080.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15080.json new file mode 100644 index 00000000..12222dae --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2019-15080.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "owned", + "vulnerability": "Publicly callable ownership takeover", + "criticism": "The reasoning is correct. The function 'owned()' is not a constructor (due to Solidity <0.4.22 naming rules) and remains publicly callable post-deployment, allowing anyone to reset ownership. This is a critical vulnerability as it grants full contract control. Severity is extreme (9) since ownership takeover enables all privileged functions. Profitability is high (9) for attackers exploiting this. However, correctness depends on deployment context; if the contract's actual constructor already initialized ownership, this function's existence is a catastrophic oversight.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The function 'owned()' is public and lacks access control, allowing any caller to set themselves as the owner. This is due to the incorrect naming of the constructor (should be 'Owned()' in Solidity <0.4.22). Since the MorphToken constructor sets the owner, this function should not exist, but it remains callable post-deployment, enabling anyone to reset ownership.", + "code": "function owned() public { owner = msg.sender; }", + "label": "Typo Constructor", + "file_name": "2019-15080.sol", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack." + }, + { + "function_name": "transferOwnership", + "vulnerability": "Unchecked zero-address ownership transfer", + "criticism": "The reasoning is correct. The lack of a zero-address check allows accidental or malicious ownership loss, permanently locking privileged functions. Severity is high (8) because it irreversibly disrupts governance, but profitability is lower (3) since it primarily enables denial-of-service rather than direct profit. Correctness is 9 as the code clearly omits the check.", + "correctness": 9, + "severity": 8, + "profitability": 3, + "reason": "The function does not validate if '_newOwner' is a non-zero address. If the owner accidentally transfers ownership to address(0), the contract becomes permanently ownerless, locking all onlyOwner functions (e.g., mintTokens, blacklistAccount) and disrupting protocol governance.", + "code": "function transferOwnership(address _newOwner) onlyOwner public { owner = _newOwner; }", + "label": "Typo Constructor", + "file_name": "2019-15080.sol", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack." + }, + { + "function_name": "approve", + "vulnerability": "Front-runnable allowance approval", + "criticism": "The reasoning is partially correct. The approve function lacks the standard mitigation (e.g., requiring allowance reset to zero first), making it vulnerable to front-running. However, this is a well-known design flaw in ERC-20, not a code-level bug. Severity is moderate (6) as it depends on user behavior. Profitability is high (7) if attackers exploit users adjusting allowances. Correctness is 8 since the code does not implement safeguards.", + "correctness": 8, + "severity": 6, + "profitability": 7, + "reason": "The approve() function does not implement checks for changing allowances (e.g., requiring allowance to be zero first). Attackers can front-run a user's approval change transaction to drain funds using the old allowance before it's updated, leading to double-spending of allowances.", + "code": "function approve(address _spender, uint256 _amount) public returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "label": "Typo Constructor", + "file_name": "2019-15080.sol", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack." + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2021-3004.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2021-3004.json new file mode 100644 index 00000000..deffa814 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/CVE-2021-3004.json @@ -0,0 +1,41 @@ +[ + { + "function_name": "_deposit", + "vulnerability": "Oracle Price Manipulation", + "criticism": "The reasoning is correct. The _deposit function relies solely on the LINK oracle to calculate collateral value, ignoring the AMM pool's actual price. If the oracle is manipulated (e.g., stale data or centralized control), attackers can deposit undervalued assets and mint overvalued yCREDIT tokens. The severity is critical (9) as this directly compromises the protocol's solvency. Profitability is high (9) because attackers can drain funds by redeeming inflated yCREDIT. However, the code does interact with the AMM pool via _addLiquidity, which uses the pool's reserves to compute liquidity. This partially mitigates the impact, but the collateralCredit is still based on the manipulated oracle value, making the exploit viable.", + "correctness": 8, + "severity": 9, + "profitability": 9, + "reason": "The _deposit function calculates the deposited collateral value using a single oracle (LINK.getPriceUSD) without cross-verifying with the actual AMM pool price. If the oracle is manipulated or provides incorrect prices (e.g., due to stale data or centralized control), attackers can deposit undervalued assets to mint inflated yCREDIT tokens. This allows them to steal protocol funds by redeeming overvalued yCREDIT for legitimate collateral. This is a critical vulnerability as it directly affects the protocol's solvency.", + "code": "function _deposit(IERC20 token, uint amount) internal {\n uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals();\n require(_value > 0, \"!value\");\n (address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value);\n token.safeTransferFrom(msg.sender, _pair, amountA);\n _mint(_pair, _value);\n uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this));\n collateral[msg.sender][address(token)] += _liquidity;\n collateralCredit[msg.sender][address(token)] += _value;\n uint _fee = _value * FEE / BASE;\n _mint(msg.sender, _value - _fee);\n _mint(address(this), _fee);\n notifyFeeAmount(_fee);\n emit Deposit(msg.sender, address(token), _value, amount, _value);\n}", + "label": "Wrong Logic", + "file_name": "2021-3004.sol", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should." + }, + { + "function_name": "_addLiquidity", + "vulnerability": "Unrestricted Market Creation", + "criticism": "The function auto-adds any new Sushiswap pair to the _markets list, enabling attackers to create pairs with malicious tokens (e.g., fake collateral). Combined with oracle manipulation, this allows minting yCREDIT against worthless assets. The severity is high (8) as it undermines collateral integrity. Profitability is high (8) if exploited with oracle flaws. However, the vulnerability\u2019s impact depends on other factors (e.g., oracle trustworthiness), which slightly reduces its standalone severity. The system\u2019s lack of allowlist/denylist for collateral tokens is a critical oversight.", + "correctness": 8, + "severity": 8, + "profitability": 8, + "reason": "The _addLiquidity function automatically adds any token to the _markets list when a new Sushiswap pair is created. Attackers can exploit this by creating pairs with malicious tokens (e.g., tokens with manipulated supply or fake collateral). Combined with oracle manipulation, this allows attackers to deposit worthless tokens as collateral, mint yCREDIT, and drain the protocol. The system should restrict which tokens can be used as collateral instead of auto-adding all pairs.", + "code": "function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired ) internal virtual returns (address pair, uint amountA, uint amountB) {\n pair = FACTORY.getPair(tokenA, tokenB);\n if (pair == address(0)) {\n pair = FACTORY.createPair(tokenA, tokenB);\n pairs[pair] = true;\n _markets.push(tokenA);\n } else if (!pairs[pair]) {\n pairs[pair] = true;\n _markets.push(tokenA);\n }\n (uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB);\n if (reserveA == 0 && reserveB == 0) {\n (amountA, amountB) = (amountADesired, amountBDesired);\n } else {\n uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB);\n if (amountBOptimal <= amountBDesired) {\n (amountA, amountB) = (amountADesired, amountBOptimal);\n } else {\n uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA);\n assert(amountAOptimal <= amountADesired);\n (amountA, amountB) = (amountAOptimal, amountBDesired);\n }\n }\n}", + "label": "Wrong Logic", + "file_name": "2021-3004.sol", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should." + }, + { + "function_name": "_transferTokens", + "vulnerability": "Fee Handling Flaws", + "criticism": "The reasoning contains inaccuracies. First, the fee is calculated as a percentage of the transferred amount, so underflow is impossible unless FEE exceeds 100% (unlikely). Second, the rewardRate manipulation via notifyFeeAmount is speculative since the function\u2019s implementation is not shown. While small fees could distort rewards, the severity is low (2) without evidence of exploitable logic. Profitability is negligible (1) as no direct theft vector is demonstrated. The primary issue is design ambiguity, not a clear vulnerability.", + "correctness": 3, + "severity": 2, + "profitability": 1, + "reason": "The fee mechanism applies a transfer tax when tokens are sent from a pair (e.g., during a buy). However, the fee is deducted from the recipient's (buyer's) balance after the initial transfer, which could lead to underflow if the fee rounds to zero or exceeds the received amount. Additionally, notifyFeeAmount recalculates rewardRate without proper validation, allowing attackers to manipulate reward distribution by making small transfers to trigger fee updates, potentially disrupting reward calculations or causing integer overflows/underflows.", + "code": "function _transferTokens(address src, address dst, uint amount) internal {\n balances[src] -= amount;\n balances[dst] += amount;\n emit Transfer(src, dst, amount);\n if (pairs[src]) {\n uint _fee = amount * FEE / BASE;\n _transferTokens(dst, address(this), _fee);\n notifyFeeAmount(_fee);\n }\n}", + "label": "Wrong Logic", + "file_name": "2021-3004.sol", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10706.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10706.json new file mode 100644 index 00000000..6a6ce56b --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10706.json @@ -0,0 +1,23 @@ +[ + { + "function_name": "approveAndCall", + "code": "function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallReceiver(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; }", + "vulnerability": "Reentrancy", + "reason": "This function approves tokens for a spender and then calls an external contract (ApproveAndCallReceiver). If the external contract is malicious, it can call back into this contract and exploit its state before the initial operation is complete, potentially leading to unexpected behavior or loss of funds.", + "file_name": "2018-10706.sol" + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] = balanceOf[_from] - _value; balanceOf[_to] = balanceOf[_to] + _value; allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; emit Transfer(_from, _to, _value); return true; }", + "vulnerability": "Integer Overflow", + "reason": "The line 'allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value;' can potentially overflow if '_value' is chosen such that the sum exceeds the maximum representable uint256 value. This could allow an attacker to wrap the allowance around and exploit the contract by transferring more tokens than intended.", + "file_name": "2018-10706.sol" + }, + { + "function_name": "generateTokens", + "code": "function generateTokens(address _user, uint _amount) onlyController public returns (bool) { _amount=_amount*10**uint256(decimals); return _generateTokens(_user,_amount); }", + "vulnerability": "Unchecked Math", + "reason": "The function multiplies '_amount' by '10**uint256(decimals)' without checking for overflow. In Solidity versions before 0.8.0, arithmetic operations do not automatically check for overflows. If '_amount' is large enough, this multiplication could overflow, allowing an attacker to mint an arbitrary number of tokens.", + "file_name": "2018-10706.sol" + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10944.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10944.json new file mode 100644 index 00000000..ce540530 --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-10944.json @@ -0,0 +1,23 @@ +[ + { + "function_name": "transferFrom", + "code": "function transferFrom( address _from, address _to, uint256 _amount ) returns (bool success) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else { return false; } }", + "vulnerability": "Reentrancy", + "reason": "The 'transferFrom' function transfers tokens on behalf of another address after allowance is given, but does not implement reentrancy guards. This could allow an attacker to perform a reentrancy attack if the recipient contract is malicious and has a fallback function designed to call back into this contract.", + "file_name": "2018-10944.sol" + }, + { + "function_name": "request_dividend", + "code": "function request_dividend(address token_holder) payable { holder_token_balance = balanceOf(token_holder)/10000000000; Message(holder_token_balance); holder_profit = holder_token_balance * profit_per_token; Message(holder_profit); Transfer(owner, token_holder , (holder_profit/10**18)); token_holder.send(holder_profit); }", + "vulnerability": "Reentrancy", + "reason": "In the 'request_dividend' function, ether is sent using 'send' without a reentrancy guard. This could allow an attacker to re-enter the contract if the caller is a contract with a fallback function.", + "file_name": "2018-10944.sol" + }, + { + "function_name": "drain", + "code": "function drain() onlyOwner { if (!owner.send(this.balance)) throw; }", + "vulnerability": "Unchecked CALL return value", + "reason": "The 'drain' function uses '.send()' to transfer ether and checks the return value with a 'throw', which is deprecated and should be replaced with 'require()' for better error handling. It's also susceptible to gas limitations of '.send()', potentially leading to failed transactions without proper notification or handling.", + "file_name": "2018-10944.sol" + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-11239.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-11239.json new file mode 100644 index 00000000..60d389aa --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/2018-11239.json @@ -0,0 +1,23 @@ +[ + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(_value == 0 || allowance[msg.sender][_spender] == 0); allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "vulnerability": "ERC20 Approve/Allowance Race Condition", + "reason": "This vulnerability occurs because the function does not handle the case where changing an allowance from a non-zero value to another non-zero value could be exploited by an attacker who is able to call transferFrom multiple times. The require condition only checks for changes from zero to non-zero or vice versa, which means an attacker can exploit the race condition by requesting a change in allowance while executing transferFrom, potentially draining the owner's funds.", + "file_name": "2018-11239.sol" + }, + { + "function_name": "_transfer", + "code": "function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balanceOf[_from] >= _value + burnPerTransaction); require (balanceOf[_to] + _value > balanceOf[_to]); balanceOf[_from] -= _value + burnPerTransaction; balanceOf[_to] += _value; balanceOf[0x0] += burnPerTransaction; currentSupply -= burnPerTransaction; Burn(_from, burnPerTransaction); Transfer(_from, _to, _value); }", + "vulnerability": "Integer Overflow and Underflow", + "reason": "The function does not adequately check for integer overflows or underflows when calculating balances after a transfer and burn operation. Solidity versions prior to 0.8.0 do not automatically check for arithmetic overflows/underflows. An attacker might exploit this by sending a value that, when added to the recipient's balance, overflows the balance, potentially allowing for theft of tokens.", + "file_name": "2018-11239.sol" + }, + { + "function_name": "burn", + "code": "function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; balanceOf[0x0] += _value; currentSupply -= _value; Burn(msg.sender, _value); return true; }", + "vulnerability": "Burning Tokens to 0x0 Address", + "reason": "Directly burning tokens by sending them to the 0x0 address can lead to a permanent loss of those tokens, decreasing the total supply potentially in an undesirable manner. While this is somewhat intentional as described by the function, it can be problematic if there's a mistake in the amount to be burned. It also does not follow the best practice of burning tokens, which is to reduce the total supply without transferring to the 0x0 address.", + "file_name": "2018-11239.sol" + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10706.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10706.json new file mode 100644 index 00000000..12b6cacd --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10706.json @@ -0,0 +1,35 @@ +[ + { + "function_name": "approveAndCall", + "vulnerability": "Reentrancy", + "criticism": "The reasoning identifies a legitimate concern with calling external contracts, which could potentially exploit reentrancy vulnerabilities. However, the severity and profitability of this vulnerability depend on the implementation of the external contract and the state of this contract. If proper reentrancy guards are in place or if the state changes are managed correctly, the risk could be mitigated. The criticism lacks a detailed analysis of how the external contract's behavior could specifically exploit the state of this contract, making the assessment somewhat superficial.", + "correctness": 6, + "severity": 5, + "profitability": 4, + "reason": "This function approves tokens for a spender and then calls an external contract (ApproveAndCallReceiver). If the external contract is malicious, it can call back into this contract and exploit its state before the initial operation is complete, potentially leading to unexpected behavior or loss of funds.", + "code": "function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallReceiver(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; }", + "file_name": "2018-10706.sol" + }, + { + "function_name": "transferFrom", + "vulnerability": "Integer Overflow", + "criticism": "The criticism correctly identifies a potential integer overflow vulnerability in the allowance update line. However, it fails to consider the context of the Solidity version and the presence of SafeMath library or similar overflow protections. Modern Solidity versions (0.8.0 and above) and the use of SafeMath in older versions inherently protect against such overflows. Therefore, without specifying the Solidity version or the absence of overflow protection, the assessment might overstate the risk. Additionally, the practical exploitation of this vulnerability requires specific conditions that are not detailed, affecting the accuracy of the severity and profitability ratings.", + "correctness": 5, + "severity": 3, + "profitability": 2, + "reason": "The line 'allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value;' can potentially overflow if '_value' is chosen such that the sum exceeds the maximum representable uint256 value. This could allow an attacker to wrap the allowance around and exploit the contract by transferring more tokens than intended.", + "code": "function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] = balanceOf[_from] - _value; balanceOf[_to] = balanceOf[_to] + _value; allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; emit Transfer(_from, _to, _value); return true; }", + "file_name": "2018-10706.sol" + }, + { + "function_name": "generateTokens", + "vulnerability": "Unchecked Math", + "criticism": "The reasoning correctly points out the risk of unchecked arithmetic operations leading to overflow vulnerabilities, particularly in Solidity versions before 0.8.0. However, the criticism lacks depth in evaluating the context, such as the contract's Solidity version or the use of libraries like SafeMath to mitigate such risks. Moreover, the practical implications of exploiting this vulnerability, such as the ability to mint an arbitrary number of tokens, depend on additional factors like the contract's overall logic and security measures. The assessment could benefit from a more nuanced analysis of these aspects to accurately determine the severity and profitability.", + "correctness": 6, + "severity": 6, + "profitability": 5, + "reason": "The function multiplies '_amount' by '10**uint256(decimals)' without checking for overflow. In Solidity versions before 0.8.0, arithmetic operations do not automatically check for overflows. If '_amount' is large enough, this multiplication could overflow, allowing an attacker to mint an arbitrary number of tokens.", + "code": "function generateTokens(address _user, uint _amount) onlyController public returns (bool) { _amount=_amount*10**uint256(decimals); return _generateTokens(_user,_amount); }", + "file_name": "2018-10706.sol" + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10944.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10944.json new file mode 100644 index 00000000..a2d34115 --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-10944.json @@ -0,0 +1,35 @@ +[ + { + "function_name": "transferFrom", + "vulnerability": "Reentrancy", + "criticism": "The criticism of the 'transferFrom' function for reentrancy vulnerability is misplaced. Reentrancy is a concern when a contract makes an external call to an untrusted contract before it resolves its internal state. However, 'transferFrom' primarily deals with token transfers and updates balances and allowances before making any external calls. There are no external calls within 'transferFrom' that would allow for reentrancy in the provided code snippet. Therefore, the identification of reentrancy as a vulnerability in this context is incorrect, leading to a low correctness score. The severity and profitability are also rated low because the described vulnerability does not exist in this scenario.", + "correctness": 1, + "severity": 0, + "profitability": 0, + "reason": "The 'transferFrom' function transfers tokens on behalf of another address after allowance is given, but does not implement reentrancy guards. This could allow an attacker to perform a reentrancy attack if the recipient contract is malicious and has a fallback function designed to call back into this contract.", + "code": "function transferFrom( address _from, address _to, uint256 _amount ) returns (bool success) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else { return false; } }", + "file_name": "2018-10944.sol" + }, + { + "function_name": "request_dividend", + "vulnerability": "Reentrancy", + "criticism": "The identification of reentrancy vulnerability in the 'request_dividend' function is accurate due to the use of 'send' without a reentrancy guard. However, the severity and profitability might not be as high as implied. While 'send' is indeed susceptible to reentrancy attacks, it only forwards 2300 gas, limiting the actions an attacker can perform in a fallback function. Nonetheless, the risk of reentrancy should not be underestimated, especially in functions involving financial transactions. The criticism could have been more nuanced by acknowledging the gas limit but still emphasizing the importance of reentrancy guards. The correctness is rated moderately high due to accurate identification, but severity and profitability are adjusted to reflect the nuanced risk.", + "correctness": 7, + "severity": 5, + "profitability": 4, + "reason": "In the 'request_dividend' function, ether is sent using 'send' without a reentrancy guard. This could allow an attacker to re-enter the contract if the caller is a contract with a fallback function.", + "code": "function request_dividend(address token_holder) payable { holder_token_balance = balanceOf(token_holder)/10000000000; Message(holder_token_balance); holder_profit = holder_token_balance * profit_per_token; Message(holder_profit); Transfer(owner, token_holder , (holder_profit/10**18)); token_holder.send(holder_profit); }", + "file_name": "2018-10944.sol" + }, + { + "function_name": "drain", + "vulnerability": "Unchecked CALL return value", + "criticism": "The criticism correctly identifies the use of '.send()' and the deprecated 'throw' for error handling in the 'drain' function as problematic. However, it conflates two separate issues: the deprecated error handling and the potential for gas-related failures with '.send()'. The severity of using 'throw' is relatively high due to the potential for unexpected contract behavior and the inefficiency of gas usage. The profitability of exploiting this vulnerability is low, as it primarily affects the contract owner's ability to withdraw funds. A more accurate critique would separate these concerns, emphasizing the need for updated error handling practices and the limitations of '.send()' for transferring ether. Correctness is rated moderately for identifying relevant issues, but the explanation lacks clarity in distinguishing between them.", + "correctness": 6, + "severity": 4, + "profitability": 1, + "reason": "The 'drain' function uses '.send()' to transfer ether and checks the return value with a 'throw', which is deprecated and should be replaced with 'require()' for better error handling. It's also susceptible to gas limitations of '.send()', potentially leading to failed transactions without proper notification or handling.", + "code": "function drain() onlyOwner { if (!owner.send(this.balance)) throw; }", + "file_name": "2018-10944.sol" + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-11239.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-11239.json new file mode 100644 index 00000000..a7c5980c --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/2018-11239.json @@ -0,0 +1,35 @@ +[ + { + "function_name": "approve", + "vulnerability": "ERC20 Approve/Allowance Race Condition", + "criticism": "The criticism of the approve function's vulnerability to a race condition is somewhat overstated. The function's requirement that either the current allowance is zero or the new value is zero mitigates the risk of an attacker exploiting the race condition to a significant extent. However, the scenario described does indeed represent a potential vulnerability in cases where allowances are being changed from one non-zero value to another without first setting them to zero. This could lead to unexpected behavior if not properly managed by the user or the interface interacting with the contract. The correctness of identifying a vulnerability is there, but the severity is overestimated due to the mitigating conditions in the code. Profitability for an attacker is also limited, as it requires specific conditions and timing to exploit successfully.", + "correctness": 6, + "severity": 3, + "profitability": 2, + "reason": "This vulnerability occurs because the function does not handle the case where changing an allowance from a non-zero value to another non-zero value could be exploited by an attacker who is able to call transferFrom multiple times. The require condition only checks for changes from zero to non-zero or vice versa, which means an attacker can exploit the race condition by requesting a change in allowance while executing transferFrom, potentially draining the owner's funds.", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(_value == 0 || allowance[msg.sender][_spender] == 0); allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "file_name": "2018-11239.sol" + }, + { + "function_name": "_transfer", + "vulnerability": "Integer Overflow and Underflow", + "criticism": "The criticism regarding the potential for integer overflow and underflow in the _transfer function is valid, especially for Solidity versions prior to 0.8.0 which do not automatically handle these issues. The function's arithmetic operations without explicit checks for overflows or underflows could indeed lead to vulnerabilities where token balances are manipulated in unintended ways. This could potentially allow an attacker to exploit the contract by creating conditions under which these arithmetic errors occur, leading to the theft of tokens or other unintended outcomes. The severity of this vulnerability is high due to the potential impact on token balances and the integrity of the contract. Profitability for an attacker is also high, as exploiting these vulnerabilities could lead to significant gains at the expense of other users.", + "correctness": 8, + "severity": 7, + "profitability": 7, + "reason": "The function does not adequately check for integer overflows or underflows when calculating balances after a transfer and burn operation. Solidity versions prior to 0.8.0 do not automatically check for arithmetic overflows/underflows. An attacker might exploit this by sending a value that, when added to the recipient's balance, overflows the balance, potentially allowing for theft of tokens.", + "code": "function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balanceOf[_from] >= _value + burnPerTransaction); require (balanceOf[_to] + _value > balanceOf[_to]); balanceOf[_from] -= _value + burnPerTransaction; balanceOf[_to] += _value; balanceOf[0x0] += burnPerTransaction; currentSupply -= burnPerTransaction; Burn(_from, burnPerTransaction); Transfer(_from, _to, _value); }", + "file_name": "2018-11239.sol" + }, + { + "function_name": "burn", + "vulnerability": "Burning Tokens to 0x0 Address", + "criticism": "The criticism of burning tokens by sending them to the 0x0 address overlooks the intentional design choice behind such a mechanism. While it is true that burning tokens in this manner permanently removes them from circulation, thereby reducing the total supply, this is often a desired outcome in token economics to create scarcity or to fulfill specific tokenomics models. The criticism fails to acknowledge the potential benefits of such a design decision. However, caution should indeed be exercised to avoid burning tokens unintentionally. The practice of burning tokens is not inherently problematic but requires clear documentation and user understanding to prevent mistakes. The severity of this issue is low, as it aligns with the intended functionality, and profitability for an attacker is non-existent, as this action does not inherently provide a means for profit.", + "correctness": 5, + "severity": 1, + "profitability": 0, + "reason": "Directly burning tokens by sending them to the 0x0 address can lead to a permanent loss of those tokens, decreasing the total supply potentially in an undesirable manner. While this is somewhat intentional as described by the function, it can be problematic if there's a mistake in the amount to be burned. It also does not follow the best practice of burning tokens, which is to reduce the total supply without transferring to the 0x0 address.", + "code": "function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; balanceOf[0x0] += _value; currentSupply -= _value; Burn(msg.sender, _value); return true; }", + "file_name": "2018-11239.sol" + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10706.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10706.json new file mode 100644 index 00000000..15e433ce --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10706.json @@ -0,0 +1,38 @@ +[ + { + "function_name": "generateTokens", + "vulnerability": "Unchecked Math", + "criticism": "The reasoning correctly points out the risk of unchecked arithmetic operations leading to overflow vulnerabilities, particularly in Solidity versions before 0.8.0. However, the criticism lacks depth in evaluating the context, such as the contract's Solidity version or the use of libraries like SafeMath to mitigate such risks. Moreover, the practical implications of exploiting this vulnerability, such as the ability to mint an arbitrary number of tokens, depend on additional factors like the contract's overall logic and security measures. The assessment could benefit from a more nuanced analysis of these aspects to accurately determine the severity and profitability.", + "correctness": 6, + "severity": 6, + "profitability": 5, + "reason": "The function multiplies '_amount' by '10**uint256(decimals)' without checking for overflow. In Solidity versions before 0.8.0, arithmetic operations do not automatically check for overflows. If '_amount' is large enough, this multiplication could overflow, allowing an attacker to mint an arbitrary number of tokens.", + "code": "function generateTokens(address _user, uint _amount) onlyController public returns (bool) { _amount=_amount*10**uint256(decimals); return _generateTokens(_user,_amount); }", + "file_name": "2018-10706.sol", + "final_score": 5.75 + }, + { + "function_name": "approveAndCall", + "vulnerability": "Reentrancy", + "criticism": "The reasoning identifies a legitimate concern with calling external contracts, which could potentially exploit reentrancy vulnerabilities. However, the severity and profitability of this vulnerability depend on the implementation of the external contract and the state of this contract. If proper reentrancy guards are in place or if the state changes are managed correctly, the risk could be mitigated. The criticism lacks a detailed analysis of how the external contract's behavior could specifically exploit the state of this contract, making the assessment somewhat superficial.", + "correctness": 6, + "severity": 5, + "profitability": 4, + "reason": "This function approves tokens for a spender and then calls an external contract (ApproveAndCallReceiver). If the external contract is malicious, it can call back into this contract and exploit its state before the initial operation is complete, potentially leading to unexpected behavior or loss of funds.", + "code": "function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallReceiver(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; }", + "file_name": "2018-10706.sol", + "final_score": 5.25 + }, + { + "function_name": "transferFrom", + "vulnerability": "Integer Overflow", + "criticism": "The criticism correctly identifies a potential integer overflow vulnerability in the allowance update line. However, it fails to consider the context of the Solidity version and the presence of SafeMath library or similar overflow protections. Modern Solidity versions (0.8.0 and above) and the use of SafeMath in older versions inherently protect against such overflows. Therefore, without specifying the Solidity version or the absence of overflow protection, the assessment might overstate the risk. Additionally, the practical exploitation of this vulnerability requires specific conditions that are not detailed, affecting the accuracy of the severity and profitability ratings.", + "correctness": 5, + "severity": 3, + "profitability": 2, + "reason": "The line 'allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value;' can potentially overflow if '_value' is chosen such that the sum exceeds the maximum representable uint256 value. This could allow an attacker to wrap the allowance around and exploit the contract by transferring more tokens than intended.", + "code": "function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] = balanceOf[_from] - _value; balanceOf[_to] = balanceOf[_to] + _value; allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; emit Transfer(_from, _to, _value); return true; }", + "file_name": "2018-10706.sol", + "final_score": 3.75 + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10944.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10944.json new file mode 100644 index 00000000..14450d77 --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-10944.json @@ -0,0 +1,38 @@ +[ + { + "function_name": "request_dividend", + "vulnerability": "Reentrancy", + "criticism": "The identification of reentrancy vulnerability in the 'request_dividend' function is accurate due to the use of 'send' without a reentrancy guard. However, the severity and profitability might not be as high as implied. While 'send' is indeed susceptible to reentrancy attacks, it only forwards 2300 gas, limiting the actions an attacker can perform in a fallback function. Nonetheless, the risk of reentrancy should not be underestimated, especially in functions involving financial transactions. The criticism could have been more nuanced by acknowledging the gas limit but still emphasizing the importance of reentrancy guards. The correctness is rated moderately high due to accurate identification, but severity and profitability are adjusted to reflect the nuanced risk.", + "correctness": 7, + "severity": 5, + "profitability": 4, + "reason": "In the 'request_dividend' function, ether is sent using 'send' without a reentrancy guard. This could allow an attacker to re-enter the contract if the caller is a contract with a fallback function.", + "code": "function request_dividend(address token_holder) payable { holder_token_balance = balanceOf(token_holder)/10000000000; Message(holder_token_balance); holder_profit = holder_token_balance * profit_per_token; Message(holder_profit); Transfer(owner, token_holder , (holder_profit/10**18)); token_holder.send(holder_profit); }", + "file_name": "2018-10944.sol", + "final_score": 5.75 + }, + { + "function_name": "drain", + "vulnerability": "Unchecked CALL return value", + "criticism": "The criticism correctly identifies the use of '.send()' and the deprecated 'throw' for error handling in the 'drain' function as problematic. However, it conflates two separate issues: the deprecated error handling and the potential for gas-related failures with '.send()'. The severity of using 'throw' is relatively high due to the potential for unexpected contract behavior and the inefficiency of gas usage. The profitability of exploiting this vulnerability is low, as it primarily affects the contract owner's ability to withdraw funds. A more accurate critique would separate these concerns, emphasizing the need for updated error handling practices and the limitations of '.send()' for transferring ether. Correctness is rated moderately for identifying relevant issues, but the explanation lacks clarity in distinguishing between them.", + "correctness": 6, + "severity": 4, + "profitability": 1, + "reason": "The 'drain' function uses '.send()' to transfer ether and checks the return value with a 'throw', which is deprecated and should be replaced with 'require()' for better error handling. It's also susceptible to gas limitations of '.send()', potentially leading to failed transactions without proper notification or handling.", + "code": "function drain() onlyOwner { if (!owner.send(this.balance)) throw; }", + "file_name": "2018-10944.sol", + "final_score": 4.25 + }, + { + "function_name": "transferFrom", + "vulnerability": "Reentrancy", + "criticism": "The criticism of the 'transferFrom' function for reentrancy vulnerability is misplaced. Reentrancy is a concern when a contract makes an external call to an untrusted contract before it resolves its internal state. However, 'transferFrom' primarily deals with token transfers and updates balances and allowances before making any external calls. There are no external calls within 'transferFrom' that would allow for reentrancy in the provided code snippet. Therefore, the identification of reentrancy as a vulnerability in this context is incorrect, leading to a low correctness score. The severity and profitability are also rated low because the described vulnerability does not exist in this scenario.", + "correctness": 1, + "severity": 0, + "profitability": 0, + "reason": "The 'transferFrom' function transfers tokens on behalf of another address after allowance is given, but does not implement reentrancy guards. This could allow an attacker to perform a reentrancy attack if the recipient contract is malicious and has a fallback function designed to call back into this contract.", + "code": "function transferFrom( address _from, address _to, uint256 _amount ) returns (bool success) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else { return false; } }", + "file_name": "2018-10944.sol", + "final_score": 0.5 + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-11239.json b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-11239.json new file mode 100644 index 00000000..2f80da1d --- /dev/null +++ b/src/logs/auditor_gpt-4-turbo-preview_0.7_top3_1/critic_gpt-4-turbo-preview_0.0_1_few/ranker_default/2018-11239.json @@ -0,0 +1,38 @@ +[ + { + "function_name": "_transfer", + "vulnerability": "Integer Overflow and Underflow", + "criticism": "The criticism regarding the potential for integer overflow and underflow in the _transfer function is valid, especially for Solidity versions prior to 0.8.0 which do not automatically handle these issues. The function's arithmetic operations without explicit checks for overflows or underflows could indeed lead to vulnerabilities where token balances are manipulated in unintended ways. This could potentially allow an attacker to exploit the contract by creating conditions under which these arithmetic errors occur, leading to the theft of tokens or other unintended outcomes. The severity of this vulnerability is high due to the potential impact on token balances and the integrity of the contract. Profitability for an attacker is also high, as exploiting these vulnerabilities could lead to significant gains at the expense of other users.", + "correctness": 8, + "severity": 7, + "profitability": 7, + "reason": "The function does not adequately check for integer overflows or underflows when calculating balances after a transfer and burn operation. Solidity versions prior to 0.8.0 do not automatically check for arithmetic overflows/underflows. An attacker might exploit this by sending a value that, when added to the recipient's balance, overflows the balance, potentially allowing for theft of tokens.", + "code": "function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balanceOf[_from] >= _value + burnPerTransaction); require (balanceOf[_to] + _value > balanceOf[_to]); balanceOf[_from] -= _value + burnPerTransaction; balanceOf[_to] += _value; balanceOf[0x0] += burnPerTransaction; currentSupply -= burnPerTransaction; Burn(_from, burnPerTransaction); Transfer(_from, _to, _value); }", + "file_name": "2018-11239.sol", + "final_score": 7.5 + }, + { + "function_name": "approve", + "vulnerability": "ERC20 Approve/Allowance Race Condition", + "criticism": "The criticism of the approve function's vulnerability to a race condition is somewhat overstated. The function's requirement that either the current allowance is zero or the new value is zero mitigates the risk of an attacker exploiting the race condition to a significant extent. However, the scenario described does indeed represent a potential vulnerability in cases where allowances are being changed from one non-zero value to another without first setting them to zero. This could lead to unexpected behavior if not properly managed by the user or the interface interacting with the contract. The correctness of identifying a vulnerability is there, but the severity is overestimated due to the mitigating conditions in the code. Profitability for an attacker is also limited, as it requires specific conditions and timing to exploit successfully.", + "correctness": 6, + "severity": 3, + "profitability": 2, + "reason": "This vulnerability occurs because the function does not handle the case where changing an allowance from a non-zero value to another non-zero value could be exploited by an attacker who is able to call transferFrom multiple times. The require condition only checks for changes from zero to non-zero or vice versa, which means an attacker can exploit the race condition by requesting a change in allowance while executing transferFrom, potentially draining the owner's funds.", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(_value == 0 || allowance[msg.sender][_spender] == 0); allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "file_name": "2018-11239.sol", + "final_score": 4.25 + }, + { + "function_name": "burn", + "vulnerability": "Burning Tokens to 0x0 Address", + "criticism": "The criticism of burning tokens by sending them to the 0x0 address overlooks the intentional design choice behind such a mechanism. While it is true that burning tokens in this manner permanently removes them from circulation, thereby reducing the total supply, this is often a desired outcome in token economics to create scarcity or to fulfill specific tokenomics models. The criticism fails to acknowledge the potential benefits of such a design decision. However, caution should indeed be exercised to avoid burning tokens unintentionally. The practice of burning tokens is not inherently problematic but requires clear documentation and user understanding to prevent mistakes. The severity of this issue is low, as it aligns with the intended functionality, and profitability for an attacker is non-existent, as this action does not inherently provide a means for profit.", + "correctness": 5, + "severity": 1, + "profitability": 0, + "reason": "Directly burning tokens by sending them to the 0x0 address can lead to a permanent loss of those tokens, decreasing the total supply potentially in an undesirable manner. While this is somewhat intentional as described by the function, it can be problematic if there's a mistake in the amount to be burned. It also does not follow the best practice of burning tokens, which is to reduce the total supply without transferring to the 0x0 address.", + "code": "function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; balanceOf[0x0] += _value; currentSupply -= _value; Burn(msg.sender, _value); return true; }", + "file_name": "2018-11239.sol", + "final_score": 2.75 + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10299.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10299.json new file mode 100644 index 00000000..ca208522 --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10299.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "batchTransfer", + "code": "function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; }", + "vulnerability": "Integer Overflow and Underflow", + "reason": "In the 'batchTransfer' function, the calculation of the 'amount' variable can lead to an integer overflow if the product of 'cnt' and '_value' exceeds the maximum value of uint256. This could lead to unexpected behavior, such as a much smaller 'amount' than expected, which could then allow the transfer of tokens even when the sender's balance is insufficient.", + "file_name": "2018-10299.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + }, + { + "function_name": "transfer", + "code": "function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value > 0 && _value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; }", + "vulnerability": "Insufficient validation of '_to' address", + "reason": "The 'transfer' function lacks a check for the case where '_to' address is the smart contract itself. If tokens are transferred to the contract's address, they could be permanently locked in the contract, as the contract does not have a function to transfer tokens it received.", + "file_name": "2018-10299.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "vulnerability": "Race Condition (also known as front-running)", + "reason": "The 'approve' function is vulnerable to the race condition where, if you were to approve someone to spend a particular amount of tokens, and they were to spend them before you had a chance to change the approved amount, they could spend the tokens, and then spend the newly approved tokens again. This could be mitigated by requiring users to first reduce the spender's allowance to 0 before setting it to another value for the same spender.", + "file_name": "2018-10299.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10376.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10376.json new file mode 100644 index 00000000..72ac0a9b --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10376.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) public transferAllowed(_from) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } }", + "vulnerability": "Missing Input Validation", + "reason": "The function 'transferFrom' is missing a validation check to verify if the '_to' address is a non-zero address. This means that it's possible to send tokens to the 0x0 address, effectively destroying them and reducing the total supply of tokens.", + "file_name": "2018-10376.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + }, + { + "function_name": "allocateTokens", + "code": "function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { if(allocateEndTime < now) revert(); if(_owners.length != _values.length) revert(); for(uint256 i = 0; i < _owners.length ; i++){ address to = _owners[i]; uint256 value = _values[i]; if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); totalSupply += value; balances[to] += value; } }", + "vulnerability": "Arbitrary Minting", + "reason": "The function 'allocateTokens' allows the contract owner to mint an arbitrary number of tokens at any time, which is a centralization risk. The owner can manipulate the token supply at will, potentially diluting the value of other holders' tokens.", + "file_name": "2018-10376.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + }, + { + "function_name": "changeOwner", + "code": "function changeOwner(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; }", + "vulnerability": "Ownership Takeover", + "reason": "The 'changeOwner' function does not require the new owner to accept the ownership. This means that the contract owner can set any address as the new owner, even if that address is not controlled by anyone or is controlled by an attacker. This could result in an irreversible loss of control over the contract.", + "file_name": "2018-10376.sol", + "label": "Integer Overflow", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10468.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10468.json new file mode 100644 index 00000000..210f1219 --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-10468.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "transfer", + "code": "function transfer(address _to, uint256 _value) returns (bool success) { if(msg.data.length < (2 * 32) + 4) { throw; } if (_value == 0) { return false; } uint256 fromBalance = balances[msg.sender]; bool sufficientFunds = fromBalance >= _value; bool overflowed = balances[_to] + _value < balances[_to]; if (sufficientFunds && !overflowed) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } }", + "vulnerability": "Integer Overflow and Underflow", + "reason": "The function does not prevent integer overflow and underflow. An attacker can use this vulnerability to manipulate the balance of accounts, such as adding tokens to their account or removing tokens from other accounts.", + "file_name": "2018-10468.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue." + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if(msg.data.length < (3 * 32) + 4) { throw; } if (_value == 0) { return false; } uint256 fromBalance = balances[_from]; uint256 allowance = allowed[_from][msg.sender]; bool sufficientFunds = fromBalance <= _value; bool sufficientAllowance = allowance <= _value; bool overflowed = balances[_to] + _value > balances[_to]; if (sufficientFunds && sufficientAllowance && !overflowed) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } }", + "vulnerability": "Integer Overflow and Underflow", + "reason": "The function does not prevent integer overflow and underflow. An attacker can use this vulnerability to manipulate the balance of accounts and the allowance of tokens, such as adding tokens to their account or removing tokens from other accounts.", + "file_name": "2018-10468.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _value) returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "vulnerability": "Race Condition", + "reason": "The function does not prevent double spending due to race conditions. An attacker can use this vulnerability to spend tokens more than their allowance by calling the function multiple times before the transaction is mined.", + "file_name": "2018-10468.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for Useless Ethereum Token (UET), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect, as exploited in the wild starting in December 2017, aka the \"transferFlaw\" issue." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-11411.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-11411.json new file mode 100644 index 00000000..f1ec65fd --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-11411.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "distributeFUD", + "code": "function distributeFUD(address[] addresses, uint256 _value, uint256 _ethbal) onlyOwner { for (uint i = 0; i < addresses.length; i++) { if (getEthBalance(addresses[i]) < _ethbal) { continue; } balances[owner] -= _value; balances[addresses[i]] += _value; Transfer(owner, addresses[i], _value); } }", + "vulnerability": "Underflow vulnerability", + "reason": "In the distributeFUD function, the balance of the owner is reduced by _value without checking whether the balance of the owner is greater than or equal to _value. This could allow an underflow if _value is greater than the owner's balance which would result in an extremely large balance being assigned to the owner.", + "file_name": "2018-11411.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect." + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(2 * 32) returns (bool success) { if (_value == 0) { return false; } uint256 fromBalance = balances[_from]; uint256 allowance = allowed[_from][msg.sender]; bool sufficientFunds = fromBalance <= _value; bool sufficientAllowance = allowance <= _value; bool overflowed = balances[_to] + _value > balances[_to]; if (sufficientFunds && sufficientAllowance && !overflowed) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } }", + "vulnerability": "Insufficient balance check", + "reason": "The condition for checking sufficient funds in the transferFrom function is incorrect. The condition 'fromBalance <= _value' should be 'fromBalance >= _value'. This could potentially allow a user to transfer more tokens than they have in their balance.", + "file_name": "2018-11411.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect." + }, + { + "function_name": "approve", + "code": "function approve(address _spender, uint256 _value) returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "vulnerability": "Approval race condition", + "reason": "The approve function is vulnerable to the race condition. If a user calls this function twice in quick succession, the second call could overwrite the first, potentially leading to unexpected behavior. This is commonly known as the approve/transferFrom race condition in ERC20 tokens.", + "file_name": "2018-11411.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for DimonCoin (FUD), an Ethereum ERC20 token, allows attackers to steal assets (e.g., transfer all victims' balances into their account) because certain computations involving _value are incorrect." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-12025.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-12025.json new file mode 100644 index 00000000..cac7b531 --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-12025.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "transfer", + "code": "function transfer(address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[msg.sender] < value) return false; if(balances[to] + value < balances[to]) return false; balances[msg.sender] -= value; balances[to] += value; Transfer(msg.sender, to, value); return true; }", + "vulnerability": "Integer Underflow", + "reason": "The transfer function does not handle the case where the sender's balance is less than the value to be transferred. Essentially, if the sender's balance is less than the value to be transferred, the balance of the sender would underflow, and the sender would end up with an extraordinarily high balance.", + "file_name": "2018-12025.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address from, address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[from] < value) return false; if( allowed[from][msg.sender] >= value ) return false; if(balances[to] + value < balances[to]) return false; balances[from] -= value; allowed[from][msg.sender] -= value; balances[to] += value; Transfer(from, to, value); return true; }", + "vulnerability": "Integer Underflow", + "reason": "Similar to the transfer function, the transferFrom function does not handle the case where the sender's balance or allowed value is less than the value to be transferred. This could result in the sender's balance or allowance underflowing and becoming extremely high.", + "file_name": "2018-12025.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + }, + { + "function_name": "mintToken", + "code": "function mintToken(address target, uint256 mintedAmount) onlyOwner{ balances[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0,owner,mintedAmount); Transfer(owner,target,mintedAmount); }", + "vulnerability": "Arbitrary Minting", + "reason": "The mintToken function allows the contract owner to create an arbitrary amount of tokens and send them to any address. This could lead to an oversupply of tokens, devaluing existing tokens, and it could be used maliciously to grant an enormous number of tokens to an attacker's address.", + "file_name": "2018-12025.sol", + "label": "Wrong Logic", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-13836.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-13836.json new file mode 100644 index 00000000..86895275 --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-13836.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "transfer", + "code": "function transfer(address _to, uint256 _amount) public returns (bool success) { require(balances[msg.sender] >= _amount && _amount > 0); balances[msg.sender] -= _amount; balances[_to] += _amount; Transfer(msg.sender, _to, _amount); return true; }", + "vulnerability": "Missing input validation", + "reason": "The function doesn't check if the '_to' address is a zero address. Transferring to a zero address is like burning tokens, it can lead to permanent loss of tokens.", + "file_name": "2018-13836.sol", + "label": "Integer Overflow", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + }, + { + "function_name": "multiTransfer", + "code": "function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { require(_addresses.length <= 100 && _addresses.length == _amounts.length); uint totalAmount; for (uint a = 0; a < _amounts.length; a++) { totalAmount += _amounts[a]; } require(totalAmount > 0 && balances[msg.sender] >= totalAmount); balances[msg.sender] -= totalAmount; for (uint b = 0; b < _addresses.length; b++) { if (_amounts[b] > 0) { balances[_addresses[b]] += _amounts[b]; Transfer(msg.sender, _addresses[b], _amounts[b]); } } return true; }", + "vulnerability": "Arithmetic Overflow", + "reason": "The code doesn't check for arithmetic overflow when adding up the '_amounts'. This could potentially lead to incorrect balance calculations.", + "file_name": "2018-13836.sol", + "label": "Integer Overflow", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + }, + { + "function_name": "withdrawFunds", + "code": "function withdrawFunds(address _token) public returns (bool success) { require(msg.sender == owner); if (_token == address(0)) { owner.transfer(this.balance); } else { Token ERC20 = Token(_token); ERC20.transfer(owner, ERC20.balanceOf(this)); } return true; }", + "vulnerability": "Potential for unexpected behavior", + "reason": "The function transfers all the contract's ether to the owner without any restrictions or checks. This might not be an exploitable vulnerability, but it's a bad practice and can lead to unexpected behavior. For example, if the contract receives ether from a fallback function, it will be immediately transferred to the owner, which might not be the intended behavior.", + "file_name": "2018-13836.sol", + "label": "Integer Overflow", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-15552.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-15552.json new file mode 100644 index 00000000..a9b77169 --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-15552.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "AddTicket", + "code": "function AddTicket() public payable { require(msg.value == ticketPrice); require(numtickets < maxTickets); lastTicketTime = now; numtickets += 1; totalBounty += ticketPrice; bool success = numtickets == maxTickets; NewTicket(msg.sender, success); if(success) { PayWinner(msg.sender); } }", + "vulnerability": "Re-entrancy attack", + "reason": "The AddTicket function calls the PayWinner function, which in turn makes an external call to the winner's address. This operation can allow the contract to be re-entered before the state variables have been updated, allowing an attacker to potentially withdraw funds multiple times.", + "file_name": "2018-15552.sol", + "label": "Bad Randomness", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "PayWinner", + "code": "function PayWinner( address winner ) private { require(numtickets == maxTickets); uint ownerTax = 6 * totalBounty / 100; uint winnerPrice = totalBounty - ownerTax; LottoComplete(msg.sender, lottoIndex, winnerPrice); lottoIndex += 1; numtickets = 0; totalBounty = 0; if(_direction == 0 && maxTickets < 20) maxTickets += 1; if(_direction == 1 && maxTickets > 10) maxTickets -= 1; if(_direction == 0 && maxTickets == 20) _direction = 1; if(_direction == 1 && maxTickets == 10) _direction = 0; worldOwner.transfer(ownerTax); winner.transfer(winnerPrice); }", + "vulnerability": "Integer division rounding down", + "reason": "The calculation of the ownerTax can result in rounding down due to integer division. This can lead to precision loss and the winner receiving less than the intended amount.", + "file_name": "2018-15552.sol", + "label": "Bad Randomness", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "withdraw", + "code": "function withdraw() public { require(worldOwner == msg.sender); lottoIndex += 1; numtickets = 0; totalBounty = 0; worldOwner.transfer(this.balance); }", + "vulnerability": "Potential for loss of funds", + "reason": "The worldOwner can withdraw all funds from the contract at any time. This can result in a loss of funds for users who have purchased tickets but the lottery has not yet been drawn.", + "file_name": "2018-15552.sol", + "label": "Bad Randomness", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17877.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17877.json new file mode 100644 index 00000000..a9cca922 --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17877.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "buyHeart", + "code": "function buyHeart(address referred) public payable {...}", + "vulnerability": "Reentrancy Attack", + "reason": "The function 'buyHeart' executes a transfer of ether (msg.sender.transfer(Luckybuy)) before resolving all the internal state changes, which leaves the contract vulnerable to a Reentrancy Attack. In this attack, the attacker could repeatedly call the 'buyHeart' function before the first function call is finished, draining the contract of Ether.", + "file_name": "2018-17877.sol", + "label": "Bad Randomness", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "withdraw", + "code": "function withdraw(uint _round) public {...}", + "vulnerability": "Unchecked Return Values", + "reason": "The function 'withdraw' executes the 'transfer' method without validating its return value. If the transfer fails for whatever reason (e.g., the receiver contract throws an exception), the contract will not be aware of this, leading to inconsistent state and potential loss of funds.", + "file_name": "2018-17877.sol", + "label": "Bad Randomness", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + }, + { + "function_name": "win", + "code": "function win() public {...}", + "vulnerability": "Arbitrary Address Execution", + "reason": "In the 'win' function, there is a transfer of ether to an address without checking whether the address is a contract or externally owned account. If the address is a contract, the fallback function could be executed, allowing for potential malicious attacks. Moreover, it does not check whether the transfer was successful, potentially leading to loss of funds.", + "file_name": "2018-17877.sol", + "label": "Bad Randomness", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards." + } +] \ No newline at end of file diff --git a/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17882.json b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17882.json new file mode 100644 index 00000000..fed80bab --- /dev/null +++ b/src/logs/auditor_gpt-4_0.7_top3_1/CVE-2018-17882.json @@ -0,0 +1,29 @@ +[ + { + "function_name": "transfer", + "code": "function transfer(address _to, uint256 _value) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; }", + "vulnerability": "Missing input validation", + "reason": "This function allows an attacker to send tokens to the 0x0 address (burn address) or any other unintended addresses. This is because there is no validation on the '_to' address. The function can lead to permanent loss of tokens.", + "file_name": "2018-17882.sol", + "label": "Integer Overflow", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + }, + { + "function_name": "batchTransfer", + "code": "function batchTransfer(address[] _to, uint _value) public { balances[msg.sender] = safeSub( balances[msg.sender], _to.length * _value ); for (uint i = 0; i < _to.length; i++) { balances[_to[i]] = safeAdd(balances[_to[i]], _value); Transfer(msg.sender, _to[i], _value); } }", + "vulnerability": "Integer Overflow and Underflow", + "reason": "In the '_to.length * _value' operation, if the multiplication of the length of '_to' array and '_value' is greater than the max limit of uint, it can cause overflow. If overflow occurs, the result will be less than the operands which can cause the 'safeSub' function to underflow, leading to incorrect balance updates.", + "file_name": "2018-17882.sol", + "label": "Integer Overflow", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + }, + { + "function_name": "transferFrom", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); if (_to != fights) { allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value); } Transfer(_from, _to, _value); return true; }", + "vulnerability": "Missing authorization check", + "reason": "The function allows to transfer tokens from any account to any other account without checking if 'msg.sender' is allowed to do so. This can result in unauthorized transfer of tokens.", + "file_name": "2018-17882.sol", + "label": "Integer Overflow", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user." + } +] \ No newline at end of file diff --git a/src/model.py b/src/model.py new file mode 100644 index 00000000..9ce22325 --- /dev/null +++ b/src/model.py @@ -0,0 +1,50 @@ +import time +import os +from openai import OpenAI + +DEEPSEEK_API_KEY = os.environ.get('DEEPSEEK_API_KEY') +completion_tokens = 0 +prompt_tokens = 0 + +# Initialize Deepseek client +deepseek_client = OpenAI(api_key=DEEPSEEK_API_KEY, base_url="https://api.deepseek.com") + +def gpt(prompt, model, temperature=0.7, max_tokens=4000, n=1, stop=None) -> list: + messages = [{"role": "user", "content": prompt}] + return chatgpt(messages, model=model, temperature=temperature, max_tokens=max_tokens, n=n, stop=stop) + +def chatgpt(messages, model, temperature=0.0, max_tokens=4000, n=1, stop=None) -> list: + global completion_tokens, prompt_tokens + outputs = [] + + #mapping model name if its r1 + if model == "deepseek-r1": + model = "deepseek-reasoner" + + while n > 0: + batch_size = min(n, 20) + n -= batch_size + + res = deepseek_client.chat.completions.create( + model=model, + messages=messages, + max_tokens=max_tokens, + stop=stop + ) + + outputs.append(res.choices[0].message.content) + + completion_tokens += res.usage.completion_tokens + prompt_tokens += res.usage.prompt_tokens + + return outputs + +def gpt_usage(backend="deepseek-r1"): + global completion_tokens, prompt_tokens + # Deepseek Reasoner pricing (standard rate), not off peak discount rates. + # Input: $0.55 per 1M tokens + # Output: $2.19 per 1M tokens + input_cost = prompt_tokens / 1000000 * 0.55 + output_cost = completion_tokens / 1000000 * 2.19 + cost = input_cost + output_cost + return {"completion_tokens": completion_tokens, "prompt_tokens": prompt_tokens, "cost": cost} \ No newline at end of file diff --git a/src/pre_process.py b/src/pre_process.py new file mode 100644 index 00000000..b932997a --- /dev/null +++ b/src/pre_process.py @@ -0,0 +1,41 @@ +import os +import re +from utils import dotdict + + +def remove_annotations(file_path): + # read the file + with open(file_path, 'r', encoding="utf8") as f: + data = f.read() + + data = re.sub(r"//.*?$", "", data, flags=re.MULTILINE) # remove single-line comments + data = re.sub(r"/\*.*?\*/", "", data, flags=re.DOTALL) # remove multi-line comments + data = re.sub(r"\n\s*\n", "\n", data) # remove empty lines + data = data.strip() # remove leading/trailing whitespace + + return data + +if __name__ == '__main__': + + for filename in os.listdir("data/CVE"): + if not filename.endswith(".sol"): + continue + filepath = f"data/CVE/{filename}" + content = remove_annotations(filepath) + new_filepath = f"data/CVE_clean/{filename}" + + with open(new_filepath, 'w') as f: + f.write(content) + + +def mainfnc(data_dir): + + for filename in os.listdir("data/CVE"): + if not filename.endswith(".sol"): + continue + filepath = f"data/CVE/{filename}" + content = remove_annotations(filepath) + new_filepath = f"{data_dir}/{filename}" + + with open(new_filepath, 'w') as f: + f.write(content) \ No newline at end of file diff --git a/src/prompts.py b/src/prompts.py new file mode 100644 index 00000000..530209fe --- /dev/null +++ b/src/prompts.py @@ -0,0 +1,91 @@ + +####### Basic Prompt ######## +topk_prompt1 = '''Output {topk} most severe vulnerabilities.\n''' +topk_prompt2 = '''If no vulnerability is detected, you should only output in this json format {"output_list": []}.\n''' + +####### Auditor Prompt ####### +auditor_prompt = '''You are a smart contract auditor, identify and explain severe vulnerabilities in the provided smart contract. Make sure that they are exploitable in real world and beneficial to attackers. Provide each identified vulnerability with intermediate reasoning and its associated function. Remember, you must provide the entire function code and do not use "...". Make your reasoning comprehensive and detailed. Smart contract code:\n\n''' +auditor_format_constrain = '''\nYou should only output in below json format: +{ + "output_list": [ + { + "function_name": "", + "code": "", + "vulnerability": "", + "reason": "" + }, + { + "function_name": "", + "code": "", + "vulnerability": "", + "reason": "" + } + ] +} +''' + +####### Critic Prompt ####### +critic_zero_shot_prompt = '''Below vulnerabilities and reasoning are likely contain mistakes. As a harsh vulnerability critic, your duty is to scrutinize the function and evaluate the correctness, severity and profitability of given vulnerabilities and associated reasoning with corresponding scores ranging from 0 (lowest) to 9 (highest). Your also need to provide criticism, which must include explanations for your scoring. Make your criticism comprehensive and detailed\n''' +critic_few_shot_prompt = '''Below vulnerabilities and reasoning are likely contain mistakes. As a harsh vulnerability critic, your duty is to scrutinize the function and evaluate the correctness, severity and profitability of given vulnerabilities and associated reasoning with corresponding scores ranging from 0 (lowest) to 9 (highest). Your also need to provide criticism, which must include explanations for your scoring. Make your criticism comprehensive and detailed. Below are three examples:\n +Input: +"function_name": "mintToken", +"code": "function mintToken(address target, uint256 mintedAmount) onlyOwner{ balances[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0,owner,mintedAmount); Transfer(owner,target,mintedAmount); }", +"vulnerability": "Arbitrary Minting". +"reason" +Output: +"function_name": "mintToken", +"criticism": "The reasoning is correct. The owner of the contract can mint arbitrary tokens. This could lead to an arbitrary increase in the token supply, devaluing existing tokens. However, isn't inherently a vulnerability, but rather a design decision that might be questionable. The severity is moderate because it is based on the owner's intention. The profitability is low because an external attacker cannot profit from it.", +"correctness": 7, +"severity": 4, +"profitability": 0 + +Input: +"function_name": "transferFrom", +"code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; transfer(_from, _to, _value); return true;}", +"vulnerability": "Unchecked Transfer", +"reason": "The transferFrom function does not check if the _to address is a valid address before transferring tokens. This allows an attacker to send tokens to an invalid address, resulting in a loss of tokens."" +Output: +"function_name": "transferFrom", +"vulnerability": "Unchecked Transfer", +"criticism": "The reasoning is correct that there is no address check in the transferFrom function. However, the severity and profitability of this vulnerability are very low, because it does not cause severe exploitation and an external attacker cannot profit from this vulnerability." +"correctness": 7, +"severity": 2, +"profitability": 0 + +Input: +"function_name": "approve", +"code": "function approve(address _spender, uint256 _value) returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", +"vulnerability": "Race condition (front-running)", +"reason": "The approve function is vulnerable to front-running because it does not require the spender to have a zero allowance before setting a new one. An attacker can call the approve function and then the transferFrom function before the original transaction is mined." +Output: +"function_name": "approve", +"criticism": "The statement is correct in pointing out that this function does not inherently reset the allowance. However, the function does include a check to ensure that if the allowance is non-zero, the new value must be zero (and vice versa). Therefore, the risk is not as serve as stated, and also not profitable.", +"correctness": 3, +"severity": 0, +"profitability": 0 +''' + +critic_format_constrain = '''\nYou should only output in below json format: +{ + "output_list": [ + { + "function_name": "", + "vulnerability": "", + "criticism": "", + "correctness": <0~9>, + "severity": <0~9>, + "profitability": <0~9>, + }, + { + "function_name": "", + "vulnerability": "", + "criticism": "", + "correctness": <0~9>, + "severity": <0~9>, + "profitability": <0~9>, + } + ] +} +''' + + diff --git a/src/run_auditor.py b/src/run_auditor.py new file mode 100644 index 00000000..8f789ec6 --- /dev/null +++ b/src/run_auditor.py @@ -0,0 +1,115 @@ +import json +import random +import argparse +import os +from tqdm import tqdm +from utils import dotdict +from stqdm import stqdm + +from model import gpt, gpt_usage +from prompts import auditor_prompt, auditor_format_constrain +from prompts import topk_prompt1, topk_prompt2 + +completion_tokens = 0 +prompt_tokens = 0 + +def remove_spaces(s): + return ' '.join(s.split()) + +def prompt_wrap(prompt, format_constraint, code, topk): + return prompt + code + format_constraint + topk_prompt1.format(topk=topk) + topk_prompt2 + +def auditor_response_parse(auditor_outputs): + output_list = [] + for auditor_output in auditor_outputs: + try: + start_idx = auditor_output.find("{") + end_idx = auditor_output.rfind("}") + data = json.loads(auditor_output[start_idx: end_idx+1]) + except: + print("parsing json fail.") + continue + try: + output_list += data["output_list"] + except: + print("No vulnerability detected") + continue + + return output_list + +def solve(args, code): + + bug_info_list = [] + auditor_input = prompt_wrap(auditor_prompt, auditor_format_constrain, code, args.topk) + + try: + auditor_outputs = gpt(auditor_input, model=args.backend, temperature=args.temperature, n=args.num_auditor) + bug_info_list = auditor_response_parse(auditor_outputs) + except Exception as e: + print(e) + + return bug_info_list + +def run(args): + + # No need to set API keys as they were previously here as they're already set in model.py + # Just proceeding with the rest of the function + + with open("data/CVE_label/CVE2description.json", "r") as f: + CVE2description = json.load(f) + with open("data/CVE_label/CVE2label.json", "r") as f: + CVE2label = json.load(f) + + # log output file + log_dir = f"./src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}" + + for CVE_index, label in stqdm(CVE2label.items()): + + all_bug_info_list = [] + description = CVE2description[CVE_index] + file_name = "-".join(CVE_index.split("-")[1:]) + ".sol" + + with open(f"{args.data_dir}/" + file_name, "r") as f: + code = f.read() + # remove space + code = remove_spaces(code) + + # auditing + bug_info_list = solve(args, code) + + if len(bug_info_list) == 0: #Sometimes the query fails because the model does not strictly follow the format + print("{index} failed".format(index=CVE_index)) + continue + + for info in bug_info_list: + info.update({"file_name": file_name, "label": label, "description": description}) + all_bug_info_list.append(info) + + file = f"{log_dir}/{CVE_index}.json" + os.makedirs(os.path.dirname(file), exist_ok=True) + + with open(file, 'w') as f: + json.dump(all_bug_info_list, f, indent=4) + +def parse_args(): + args = argparse.ArgumentParser() + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') + args.add_argument('--temperature', type=float, default=0.7) + args.add_argument('--dataset', type=str, default="CVE") + args.add_argument('--data_dir', type=str, default="data_full/CVE_clean") + args.add_argument('--topk', type=int, default=5) # the topk per each auditor + args.add_argument('--num_auditor', type=int, default=1) + + args = args.parse_args() + return args + +if __name__ == '__main__': + + args = parse_args() + print(args) + run(args) + +def mainfnc(args=dotdict): + # args = parse_args() + # print(args) + run(args) \ No newline at end of file diff --git a/src/run_auditor_user_defined.py b/src/run_auditor_user_defined.py new file mode 100644 index 00000000..c5860c73 --- /dev/null +++ b/src/run_auditor_user_defined.py @@ -0,0 +1,113 @@ +import json +import random +import argparse +import os +from tqdm import tqdm +from utils import dotdict +from stqdm import stqdm + +import openai +from model import gpt, gpt_usage, OPENAI_API_KEY +from prompts import auditor_prompt, auditor_format_constrain +from prompts import topk_prompt1, topk_prompt2 + +completion_tokens = 0 +prompt_tokens = 0 + +def remove_spaces(s): + return ' '.join(s.split()) + +def prompt_wrap(prompt, format_constraint, code, topk): + return prompt + code + format_constraint + topk_prompt1.format(topk=topk) + topk_prompt2 + +def auditor_response_parse(auditor_outputs): + output_list = [] + for auditor_output in auditor_outputs: + try: + start_idx = auditor_output.find("{") + end_idx = auditor_output.rfind("}") + data = json.loads(auditor_output[start_idx: end_idx+1]) + except: + print("parsing json fail.") + continue + try: + output_list += data["output_list"] + except: + print("No vulnerability detected") + continue + + return output_list + +def solve(args, code): + + bug_info_list = [] + auditor_input = prompt_wrap(auditor_prompt, auditor_format_constrain, code, args.topk) + + try: + auditor_outputs = gpt(auditor_input, model=args.backend, temperature=args.temperature, n=args.num_auditor) + bug_info_list = auditor_response_parse(auditor_outputs) + except Exception as e: + print(e) + + return bug_info_list + +def run(args): + + if args.get('openai_api_key') is None: + openai.api_key = OPENAI_API_KEY + else: + openai.api_key = args.openai_api_key + + # log output file + log_dir = f"./src/logs/auditor_{args.backend}_{args.temperature}_top{args.topk}_{args.num_auditor}" + + for file_name in stqdm(os.listdir(args.data_dir)): + + all_bug_info_list = [] + + if not file_name.endswith(".sol"): + continue + + with open(f"{args.data_dir}/{file_name}", "r") as f: + code = f.read() + # remove space + code = remove_spaces(code) + + # auditing + bug_info_list = solve(args, code) + + if len(bug_info_list) == 0: #Sometimes the query fails because the model does not strictly follow the format + print("{index} failed".format(index=file_name)) + continue + + for info in bug_info_list: + info.update({"file_name": file_name}) + all_bug_info_list.append(info) + + file = f"{log_dir}/{file_name.replace('.sol', '.json')}" + os.makedirs(os.path.dirname(file), exist_ok=True) + + with open(file, 'w') as f: + json.dump(all_bug_info_list, f, indent=4) + +def parse_args(): + args = argparse.ArgumentParser() + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='deepseek-r1') + args.add_argument('--temperature', type=float, default=0.7) + args.add_argument('--data_dir', type=str, default="data_full/CVE_clean") + args.add_argument('--topk', type=int, default=5) # the topk per each auditor + args.add_argument('--num_auditor', type=int, default=1) + + args = args.parse_args() + return args + +if __name__ == '__main__': + + args = parse_args() + print(args) + run(args) + +def mainfnc(args=dotdict): + # args = parse_args() + # print(args) + run(args) \ No newline at end of file diff --git a/src/run_critic.py b/src/run_critic.py new file mode 100644 index 00000000..b2721040 --- /dev/null +++ b/src/run_critic.py @@ -0,0 +1,105 @@ +import json +import argparse +import os +from stqdm import stqdm +from utils import dotdict + + +from prompts import critic_zero_shot_prompt, critic_few_shot_prompt, critic_format_constrain +from model import gpt + +completion_tokens = 0 +prompt_tokens = 0 + +def critic_response_parse(critic_outputs): + output_list = [] + for critic_output in critic_outputs: + try: + data = json.loads(critic_output) + output_list += data["output_list"] + except: + continue + return output_list + +def run(args): + + # No need to set API keys here as they're already set in model.py + # Just proceed with the rest of the function + critic_dir = f"src/logs/{args.auditor_dir}/critic_{args.backend}_{args.temperature}_{args.num_critic}_{args.shot}" + + for filename in stqdm(os.listdir(f"src/logs/{args.auditor_dir}")): + if not filename.endswith("json"): + continue + filepath = f"src/logs/{args.auditor_dir}/{filename}" + with open(filepath, "r") as f: + auditor_output_list = json.load(f) + + critic_bug_info_final_list = [] + vul_info_str = '' + for i in range(len(auditor_output_list)): + bug_info = auditor_output_list[i] + function_name = bug_info["function_name"] + function_code = bug_info["code"] + vulnerability = bug_info["vulnerability"] + reason = bug_info["reason"] + vul_info_str = vul_info_str + "function_name: " + function_name + "\n" + "code: " + function_code + "\n" + "vulnerability" + ": " + vulnerability + "\n" + "reason: " + reason + "\n------------------\n" + + # do wrap + if args.shot == "zero": + critic_prompt = critic_zero_shot_prompt + elif args.shot == "few": + critic_prompt = critic_few_shot_prompt # provide three examples to make scoring consistent + else: + raise Exception("Please specify zero or few shots..") + + critic_input = critic_prompt + vul_info_str + critic_format_constrain + + critic_outputs = gpt(critic_input, model=args.backend, temperature=args.temperature, n=args.num_critic) + critic_bug_info_list = critic_response_parse(critic_outputs) + + for i in range(len(critic_bug_info_list)): + function_name = auditor_output_list[i]["function_name"] + label = auditor_output_list[i]["label"] + code = auditor_output_list[i]["code"] + file_name = auditor_output_list[i]["file_name"] + description = auditor_output_list[i]["description"] + reason = auditor_output_list[i]["reason"] + + critic_bug_info = critic_bug_info_list[i] + critic_bug_info.update( + {"reason": reason, "code": code, "label": label, "file_name": file_name, "description": description}) + + critic_bug_info_final_list.append(critic_bug_info) + + filepath = f"{critic_dir}/{filename}" + # dump the file + os.makedirs(os.path.dirname(filepath), exist_ok=True) + + with open(filepath, 'w') as f: + json.dump(critic_bug_info_final_list, f, indent=4) + + +def parse_args(): + args = argparse.ArgumentParser() + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') + args.add_argument('--temperature', type=float, default=0) + args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") + args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory + args.add_argument('--num_critic', type=int, default=1) + args.add_argument('--shot', type=str, choices=["zero", "few"], default="few") + + args = args.parse_args() + + return args + + +if __name__ == '__main__': + + args = parse_args() + print(args) + run(args) + +def mainfnc(args=dotdict): + # args = parse_args() + # print(args) + run(args) diff --git a/src/run_critic_user_defined.py b/src/run_critic_user_defined.py new file mode 100644 index 00000000..40f463ce --- /dev/null +++ b/src/run_critic_user_defined.py @@ -0,0 +1,106 @@ +import json +import argparse +import os +import openai +from stqdm import stqdm +from utils import dotdict + + +from prompts import critic_zero_shot_prompt, critic_few_shot_prompt, critic_format_constrain +from model import gpt, OPENAI_API_KEY + +completion_tokens = 0 +prompt_tokens = 0 + +def critic_response_parse(critic_outputs): + output_list = [] + for critic_output in critic_outputs: + try: + data = json.loads(critic_output) + output_list += data["output_list"] + except: + continue + return output_list + +def run(args): + + if args.get('openai_api_key') is None: + openai.api_key = OPENAI_API_KEY + else: + openai.api_key = args.openai_api_key + critic_dir = f"src/logs/{args.auditor_dir}/critic_{args.backend}_{args.temperature}_{args.num_critic}_{args.shot}" + + for filename in stqdm(os.listdir(f"src/logs/{args.auditor_dir}")): + if not filename.endswith("json"): + continue + filepath = f"src/logs/{args.auditor_dir}/{filename}" + with open(filepath, "r") as f: + auditor_output_list = json.load(f) + + critic_bug_info_final_list = [] + vul_info_str = '' + for i in range(len(auditor_output_list)): + bug_info = auditor_output_list[i] + function_name = bug_info["function_name"] + function_code = bug_info["code"] + vulnerability = bug_info["vulnerability"] + reason = bug_info["reason"] + vul_info_str = vul_info_str + "function_name: " + function_name + "\n" + "code: " + function_code + "\n" + "vulnerability" + ": " + vulnerability + "\n" + "reason: " + reason + "\n------------------\n" + + # do wrap + if args.shot == "zero": + critic_prompt = critic_zero_shot_prompt + elif args.shot == "few": + critic_prompt = critic_few_shot_prompt # provide three examples to make scoring consistent + else: + raise Exception("Please specify zero or few shots..") + + critic_input = critic_prompt + vul_info_str + critic_format_constrain + + critic_outputs = gpt(critic_input, model=args.backend, temperature=args.temperature, n=args.num_critic) + critic_bug_info_list = critic_response_parse(critic_outputs) + + for i in range(len(critic_bug_info_list)): + function_name = auditor_output_list[i]["function_name"] + code = auditor_output_list[i]["code"] + file_name = auditor_output_list[i]["file_name"] + reason = auditor_output_list[i]["reason"] + + critic_bug_info = critic_bug_info_list[i] + critic_bug_info.update( + {"reason": reason, "code": code, "file_name": file_name}) + + critic_bug_info_final_list.append(critic_bug_info) + + filepath = f"{critic_dir}/{filename}" + # dump the file + os.makedirs(os.path.dirname(filepath), exist_ok=True) + + with open(filepath, 'w') as f: + json.dump(critic_bug_info_final_list, f, indent=4) + + +def parse_args(): + args = argparse.ArgumentParser() + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') + args.add_argument('--temperature', type=float, default=0) + args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") + args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory + args.add_argument('--num_critic', type=int, default=1) + args.add_argument('--shot', type=str, choices=["zero", "few"], default="few") + + args = args.parse_args() + + return args + + +if __name__ == '__main__': + + args = parse_args() + print(args) + run(args) + +def mainfnc(args=dotdict): + # args = parse_args() + # print(args) + run(args) diff --git a/src/run_rank.py b/src/run_rank.py new file mode 100644 index 00000000..10fa39c0 --- /dev/null +++ b/src/run_rank.py @@ -0,0 +1,71 @@ +import json +import argparse +import os +from stqdm import stqdm +from utils import dotdict + + +def rank_by_score(json_list): + return sorted(json_list, key=lambda x: x["final_score"], reverse=True) + +def run(args): + # output file + ranker_dir = f"ranker_{args.strategy}" + + for filename in stqdm(os.listdir(f"src/logs/{args.auditor_dir}/{args.critic_dir}")): + if not filename.endswith("json"): + continue + filepath = f"src/logs/{args.auditor_dir}/{args.critic_dir}/{filename}" + with open(filepath, "r") as f: + critic_output_list = json.load(f) + + for i in range(len(critic_output_list)): + bug_info = critic_output_list[i] + correctness = float(bug_info["correctness"]) + severity = float(bug_info["severity"]) + profitability = float(bug_info["profitability"]) + + # overall score + if args.strategy == "default": + # naive weighted function + final_score = 0.5 * correctness + 0.25 * severity + 0.25 * profitability + + elif args.strategy == "customize": + # TODO: add your scoring function + pass + else: + raise Exception("Please choose correct strategy for scoring...") + + bug_info.update({"final_score": final_score}) + + # Rank based on scores + ranker_output_list = rank_by_score(critic_output_list) + filepath = f"src/logs/{args.auditor_dir}/{args.critic_dir}/{ranker_dir}/{filename}" + # dump the file + os.makedirs(os.path.dirname(filepath), exist_ok=True) + + with open(filepath, 'w') as f: + json.dump(ranker_output_list, f, indent=4) + + print("Ranking finished...") + +def parse_args(): + args = argparse.ArgumentParser() + args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") + args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory + args.add_argument('--critic_dir', type=str, default="critic_gpt-4_0_1_few_1026") #The critic output directory + args.add_argument('--strategy', type=str, default="default", choices=["default", "customize"]) + + args = args.parse_args() + return args + +if __name__ == '__main__': + args = parse_args() + print(args) + run(args) + + +def mainfnc(args=dotdict): + # args = parse_args() + # print(args) + run(args) \ No newline at end of file diff --git a/src/utils.py b/src/utils.py new file mode 100644 index 00000000..74b00534 --- /dev/null +++ b/src/utils.py @@ -0,0 +1,19 @@ +import os +import shutil + +class dotdict(dict): + """dot.notation access to dictionary attributes""" + __getattr__ = dict.get + __setattr__ = dict.__setitem__ + __delattr__ = dict.__delitem__ + +def clean_folder(folder): + for filename in os.listdir(folder): + file_path = f"{folder}/{filename}" + try: + if os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) + elif os.path.isdir(file_path): + shutil.rmtree(file_path) + except Exception as e: + print('Failed to delete %s. Reason: %s' % (file_path, e)) \ No newline at end of file From 0e88f08db026b78b01a3bd13ec4bcf53899de433 Mon Sep 17 00:00:00 2001 From: melvn <104540526@student.swin.edu.au> Date: Sat, 8 Mar 2025 23:38:33 +1100 Subject: [PATCH 5/6] change ranker command to include decimal point. fix file not found error. --- README.md | 2 +- .../ranker_default/CVE-2018-10299.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-10376.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-10666.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-10705.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-11335.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-12025.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-13836.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-15552.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-17877.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-17882.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-18425.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2018-19830.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2019-15078.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2019-15079.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2019-15080.json | 44 +++++++++++++++++++ .../ranker_default/CVE-2021-3004.json | 44 +++++++++++++++++++ 17 files changed, 705 insertions(+), 1 deletion(-) create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10299.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10376.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10666.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10705.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-11335.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-12025.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-13836.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-15552.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-17877.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-17882.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-18425.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-19830.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15078.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15079.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15080.json create mode 100644 src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2021-3004.json diff --git a/README.md b/README.md index 8cee2a26..a80a0d51 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ python src/run_critic.py --backend=deepseek-r1 --temperature=0 --auditor_dir="au ### Step 3: Run the Ranker ```bash -python src/run_rank.py --auditor_dir="auditor_deepseek-r1_0.7_top3_1" --critic_dir="critic_deepseek-r1_0_1_few" --strategy="default" +python src/run_rank.py --auditor_dir="auditor_deepseek-r1_0.7_top3_1" --critic_dir="critic_deepseek-r1_0.0_1_few" --strategy="default" ``` | Parameter | Description | diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10299.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10299.json new file mode 100644 index 00000000..d5ba5b65 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10299.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "batchTransfer", + "vulnerability": "Integer Overflow Leading to Arbitrary Token Minting", + "criticism": "The reasoning is correct. The multiplication `cnt * _value` lacks SafeMath checks, enabling integer overflow. If `_value` is crafted such that `cnt * _value` overflows, `amount` becomes a small value, allowing an attacker to bypass the balance check and mint large `_value` tokens for all receivers. The severity is extremely high (9) as this directly enables token supply manipulation. Profitability is also 9, as attackers can mint and sell tokens for profit. The correctness is 9 because the exploit is technically valid if SafeMath is not applied to the multiplication operation.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The multiplication `uint256 amount = uint256(cnt) * _value` does not use SafeMath, allowing integer overflow. If `cnt * _value` exceeds 2^256-1, `amount` wraps around to a small value. The subsequent `balances[msg.sender].sub(amount)` deducts an incorrect small amount, while each receiver gains the original large `_value`, enabling attackers to mint vast amounts of tokens from nothing.", + "code": "function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; }", + "label": "Integer Overflow", + "file_name": "2018-10299.sol", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", + "final_score": 9.0 + }, + { + "function_name": "approve", + "vulnerability": "Allowance Race Condition (Front-Running)", + "criticism": "The reasoning is partially correct but mischaracterizes the severity. The code follows the ERC20 standard, which inherently has this race condition. The function does not include mitigation (e.g., `increaseAllowance`/`decreaseAllowance`), but this is a protocol-level limitation, not a code vulnerability. Severity is low (2) as it relies on user error (not resetting to zero first). Profitability is moderate (4) only if exploited, but it is not a direct exploit vector. Correctness is 5 because the issue exists but is a known ERC20 design trade-off, not a code flaw.", + "correctness": 5, + "severity": 2, + "profitability": 4, + "reason": "The approve function does not mitigate the ERC20 allowance front-running attack. If a user reduces an existing allowance, a spender can front-run the transaction to use the old higher allowance before the reduction takes effect. This violates the intended allowance update and allows unauthorized token transfers.", + "code": "function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }", + "label": "Integer Overflow", + "file_name": "2018-10299.sol", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", + "final_score": 4.0 + }, + { + "function_name": "batchTransfer", + "vulnerability": "Unauthorized Token Burning via Zero Address", + "criticism": "The reasoning is context-dependent. Sending tokens to `address(0)` is a common way to burn tokens, and ERC20 does not prohibit it. If the contract explicitly forbids burning (e.g., in its `transfer` function), this would be a vulnerability. However, the reasoning assumes unauthorized burning without evidence of such a policy. Severity (1) and profitability (0) are negligible unless burning is disallowed. Correctness is 3 due to insufficient context.", + "correctness": 3, + "severity": 1, + "profitability": 0, + "reason": "The batchTransfer function lacks a check for zero addresses in the `_receivers` array. Unlike the transfer function, which blocks sending to `address(0)`, this allows users to send tokens to the zero address via batchTransfer, enabling unauthorized token burning and violating the contract's consistency.", + "code": "function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; }", + "label": "Integer Overflow", + "file_name": "2018-10299.sol", + "description": "An integer overflow in the batchTransfer function of a smart contract implementation for Beauty Ecosystem Coin (BEC), the Ethereum ERC20 token used in the Beauty Chain economic system, allows attackers to accomplish an unauthorized increase of digital assets by providing two _receivers arguments in conjunction with a large _value argument, as exploited in the wild in April 2018, aka the \"batchOverflow\" issue.", + "final_score": 1.75 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10376.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10376.json new file mode 100644 index 00000000..befe7dc3 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10376.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "transferProxy", + "vulnerability": "Integer Overflow in Fee/Value Sum", + "criticism": "The reasoning is correct. The function does not account for integer overflow in `_feeSmt + _value`, allowing an attacker to bypass balance checks. This leads to underflow in `balances[_from]`, effectively minting tokens for `_to` and `msg.sender`. The vulnerability is critical because it enables unauthorized token creation and transfer. The severity and profitability are both high due to direct exploitation potential.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The function checks if `_from` has sufficient balance using `balances[_from] < _feeSmt + _value`, but does not account for integer overflow. An attacker can craft `_feeSmt` and `_value` such that their sum overflows to a lower value (e.g., `_feeSmt = 2^256 - 200`, `_value = 200`), causing the check to pass even if `_from` has insufficient balance. This allows the attacker to transfer large amounts of tokens they don't own and mint arbitrary tokens for `msg.sender` via overflow in `balances[msg.sender] += _feeSmt`.", + "code": "function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ if(balances[_from] < _feeSmt + _value) revert(); uint256 nonce = nonces[_from]; bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); if(_from != ecrecover(h,_v,_r,_s)) revert(); if(balances[_to] + _value < balances[_to] || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); balances[_to] += _value; Transfer(_from, _to, _value); balances[msg.sender] += _feeSmt; Transfer(_from, msg.sender, _feeSmt); balances[_from] -= _value + _feeSmt; nonces[_from] = nonce + 1; return true; }", + "label": "Integer Overflow", + "file_name": "2018-10376.sol", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", + "final_score": 9.0 + }, + { + "function_name": "approveAndCallcode", + "vulnerability": "Reentrancy via External Call", + "criticism": "The reasoning is accurate. The external call `_spender.call(_extraData)` occurs after setting the allowance, enabling reentrancy. A malicious spender can repeatedly reset the allowance and drain funds. This is a high-severity vulnerability with direct profitability for attackers, akin to classic reentrancy exploits like the DAO hack.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The function performs an external call (`_spender.call(_extraData)`) after setting an allowance. A malicious `_spender` can re-enter the contract (e.g., by calling `transferFrom` or `approveAndCallcode` again) before the allowance is consumed. This allows repeated draining of the allowance, as each reentrant call resets `allowed[msg.sender][_spender]` to `_value`.", + "code": "function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(_extraData)) { revert(); } return true; }", + "label": "Integer Overflow", + "file_name": "2018-10376.sol", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", + "final_score": 9.0 + }, + { + "function_name": "allocateTokens", + "vulnerability": "Unrestricted Owner Minting", + "criticism": "The reasoning is partially correct. While the owner can mint tokens without a cap within the time window, this is a design choice (centralization risk) rather than a technical vulnerability. The overflow checks in the code prevent unintended supply inflation. Severity is moderate (7) as it depends on the owner's intent, and profitability is low (0) for external attackers unless the owner is compromised.", + "correctness": 7, + "severity": 7, + "profitability": 0, + "reason": "The `allocateTokens` function allows the owner to mint unlimited tokens within 1 day of deployment. There is no cap on `totalSupply`, so a malicious/compromised owner can inflate the supply indefinitely, devaluing existing tokens. Even though the function is time-limited, the 1-day window is sufficient to cause significant harm if exploited.", + "code": "function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { if(allocateEndTime < now) revert(); if(_owners.length != _values.length) revert(); for(uint256 i = 0; i < _owners.length ; i++){ address to = _owners[i]; uint256 value = _values[i]; if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); totalSupply += value; balances[to] += value; } }", + "label": "Integer Overflow", + "file_name": "2018-10376.sol", + "description": "An integer overflow in the transferProxy function of a smart contract implementation for SmartMesh (aka SMT), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized increase of digital assets via crafted _fee and _value parameters, as exploited in the wild in April 2018, aka the \"proxyOverflow\" issue.", + "final_score": 5.25 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10666.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10666.json new file mode 100644 index 00000000..97a66fa5 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10666.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "setOwner", + "vulnerability": "Missing access control", + "criticism": "The reasoning is entirely correct. The absence of an access control modifier (e.g., onlyOwner) allows any caller to arbitrarily set the contract owner. This is a critical vulnerability because ownership control grants access to privileged functions, enabling fund drainage, parameter manipulation, and full contract takeover. The severity and profitability are both maximal, as an attacker can immediately exploit this to steal assets or disrupt operations.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The setOwner function lacks the onlyOwner modifier, allowing any caller to arbitrarily change the contract owner. This enables an attacker to take full control of the contract, including privileged functions like uploadBalances, setExportFee, or unlockToken. Once ownership is hijacked, the attacker can drain funds, manipulate fees, or disrupt the contract's operation.", + "code": "function setOwner(address _owner) returns (bool success) { owner = _owner; return true; }", + "label": "Access Control", + "file_name": "2018-10666.sol", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", + "final_score": 9.0 + }, + { + "function_name": "approve", + "vulnerability": "Allowance front-running", + "criticism": "The reasoning is valid. The approve function lacks a mitigation for the front-running race condition (e.g., requiring allowance reset to zero before non-zero updates). Attackers can exploit this to double-spend allowances if users adjust approvals. However, severity is moderate (7) as exploitation requires specific user behavior (changing existing non-zero allowances) and mempool monitoring. Profitability is high (7) if successful, but contingent on victim actions.", + "correctness": 9, + "severity": 7, + "profitability": 7, + "reason": "The approve function does not enforce the check-effects-interaction pattern or require resetting allowances to zero before updating. Attackers can front-run a user\u2019s approval change (e.g., from 100 to 50) by first using the old allowance (100) before it\u2019s reduced. This allows double-spending of allowances, enabling unauthorized token transfers from the victim\u2019s balance.", + "code": "function approve(address _spender, uint256 _amount) returns (bool success) { require(!locked); allowance[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "label": "Access Control", + "file_name": "2018-10666.sol", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", + "final_score": 8.0 + }, + { + "function_name": "transfer", + "vulnerability": "Integer overflow/underflow", + "criticism": "The reasoning is incorrect. While the code uses raw arithmetic, the function includes require(balanceOf[msg.sender] >= _amount) and require(balanceOf[_to] + _amount >= balanceOf[_to]), which explicitly prevent underflow (sender balance) and overflow (recipient balance). These checks render the SafeMath argument moot. The vulnerability claim is invalid, as the code already enforces overflow/underflow safety through conditionals. No exploit path exists here.", + "correctness": 1, + "severity": 0, + "profitability": 0, + "reason": "The transfer and transferFrom functions use raw arithmetic operations (e.g., balanceOf[msg.sender] -= _amount) without leveraging the inherited SafeMath library. In Solidity <0.8.0, this allows integer underflows/overflows. An attacker can send tokens they don\u2019t own (underflow to max uint256) or overflow a recipient\u2019s balance to near-zero. This directly compromises the token\u2019s integrity and enables theft or denial of service.", + "code": "function transfer(address _to, uint256 _amount) returns (bool success) { require(!locked); require(balanceOf[msg.sender] >= _amount); require(balanceOf[_to] + _amount >= balanceOf[_to]); balanceOf[msg.sender] -= _amount; uint256 preBalance = balanceOf[_to]; balanceOf[_to] += _amount; bool alreadyMax = preBalance >= singleIDXMQty; if (!alreadyMax) { if (now >= validAfter[_to].ts + mustHoldFor) validAfter[_to].last = preBalance; validAfter[_to].ts = now; } if (validAfter[msg.sender].last > balanceOf[msg.sender]) validAfter[msg.sender].last = balanceOf[msg.sender]; Transfer(msg.sender, _to, _amount); return true; }", + "label": "Access Control", + "file_name": "2018-10666.sol", + "description": "The Owned smart contract implementation for Aurora IDEX Membership (IDXM), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. A new owner can subsequently modify variables.", + "final_score": 0.5 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10705.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10705.json new file mode 100644 index 00000000..ee626070 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-10705.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "setOwner", + "vulnerability": "Unrestricted Ownership Transfer", + "criticism": "The reasoning is entirely correct. The absence of an onlyOwner modifier allows any address to change the owner, leading to full contract control. This is a critical vulnerability because ownership privileges often include fund control and administrative functions. The severity and profitability are maximized since an attacker can immediately drain funds or disrupt the contract. The exploit requires no preconditions and is trivially executable.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The setOwner function lacks the onlyOwner modifier, allowing any address to arbitrarily change the contract owner. This enables an attacker to immediately take full control of the contract, including privileged functions like unlockToken and uploadBalances, leading to fund theft or contract destruction.", + "code": "function setOwner(address _owner) returns (bool success) { owner = _owner; return true; }", + "label": "Access Control", + "file_name": "2018-10705.sol", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", + "final_score": 9.0 + }, + { + "function_name": "approve", + "vulnerability": "Allowance Race Condition", + "criticism": "The reasoning correctly identifies the ERC20 front-running risk, but this is a protocol-level limitation, not a code flaw. The function follows the ERC20 standard, which does not mandate allowance resetting. The severity is moderate because exploitation depends on user behavior (e.g., not resetting allowances). Profitability is context-dependent: if high-value allowances exist, attackers could profit by front-running reduction attempts. However, this is a known ERC20 trade-off, not a unique contract vulnerability.", + "correctness": 5, + "severity": 4, + "profitability": 6, + "reason": "The approve function does not mitigate the ERC20 allowance front-running attack. If a user reduces their approval for a spender, the spender can front-run the transaction to use the old allowance before the reduction. This allows attackers to drain funds up to the previous higher allowance, especially impactful once the contract is unlocked.", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { require(!locked); allowance[msg.sender][_spender] = _value; return true; }", + "label": "Access Control", + "file_name": "2018-10705.sol", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", + "final_score": 5.0 + }, + { + "function_name": "uploadBalances", + "vulnerability": "Array Length Mismatch Token Loss", + "criticism": "The reasoning is partially correct but misses critical context. While unequal array lengths can cause out-of-bounds reads (returning 0 in legacy Solidity versions), the actual token loss occurs only if recipients.length > balances.length. In such cases, the owner's balance is reduced by the sum of the valid balances array, but excess recipients receive 0 tokens, effectively burning the sum. However, this requires the owner to mistakenly call the function with mismatched arrays. Since the function is onlyOwner, external attackers cannot trigger this. Severity is moderate (owner-induced error), and profitability is negligible for attackers.", + "correctness": 6, + "severity": 5, + "profitability": 0, + "reason": "The uploadBalances function does not enforce equal lengths for recipients and balances arrays. If recipients.length > balances.length, balances[i] returns 0 beyond the balances array's end, causing the owner's balance to be reduced by the sum of the valid balances while recipients receive incorrect (often zero) amounts. This permanently burns the sum from the owner's balance, leading to irreversible token loss.", + "code": "function uploadBalances(address[] recipients, uint256[] balances) onlyOwner { require(!balancesUploaded); uint256 sum = 0; for (uint256 i = 0; i < recipients.length; i++) { balanceOf[recipients[i]] = safeAdd(balanceOf[recipients[i]], balances[i]); sum = safeAdd(sum, balances[i]); } balanceOf[owner] = safeSub(balanceOf[owner], sum); }", + "label": "Access Control", + "file_name": "2018-10705.sol", + "description": "The Owned smart contract implementation for Aurora DAO (AURA), an Ethereum ERC20 token, allows attackers to acquire contract ownership because the setOwner function is declared as public. An attacker can then conduct a lockBalances() denial of service attack.", + "final_score": 4.25 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-11335.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-11335.json new file mode 100644 index 00000000..a1a335ca --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-11335.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "setMigrationAgent", + "vulnerability": "Privilege escalation via migration agent", + "criticism": "The reasoning is accurate. The function centralizes trust in `migrationMaster`, creating a single point of failure. If compromised, an attacker can set a malicious agent to drain user funds during migration. This is a critical vulnerability if `migrationMaster` is an EOA or poorly secured contract. Severity is high due to the potential for total fund loss. Profitability is extreme if the agent steals migrating tokens.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The setMigrationAgent function allows the migrationMaster to set a malicious migration agent contract once. If the migrationMaster's account is compromised, an attacker can set a malicious agent. Users who call migrate() will have their tokens transferred to the attacker's contract via MigrationAgent.migrateFrom, resulting in loss of funds. This centralizes trust in migrationMaster, creating a single point of failure.", + "code": "function setMigrationAgent(address _agent) external {\n require(migrationAgent == 0);\n require(msg.sender == migrationMaster);\n migrationAgent = _agent;\n}", + "label": "Integer Overflow", + "file_name": "2018-11335.sol", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "final_score": 9.0 + }, + { + "function_name": "mint", + "vulnerability": "Integer overflow in minting", + "criticism": "The reasoning is partially correct. While the absence of SafeMath could theoretically allow overflows, Solidity \u22650.8.0 automatically checks for overflows. If the contract uses an older compiler, the require(totalSupply + value <= TOKEN_LIMIT) check is vulnerable to overflow bypass (e.g., wrapping to 0). However, the attacker must control the `ico` address to exploit this, which limits exploitability. Severity is high only if `ico` is compromised. Profitability depends on the attacker's ability to mint beyond TOKEN_LIMIT and dump tokens.", + "correctness": 8, + "severity": 7, + "profitability": 6, + "reason": "The mint function does not use SafeMath for addition, allowing integer overflows. The require statement 'totalSupply + value <= TOKEN_LIMIT' can be bypassed if totalSupply + value overflows, resulting in a wrapped value that is within the limit. Additionally, 'balances[holder] += value' and 'totalSupply += value' can overflow, leading to incorrect token balances and total supply. An attacker with control over the ico address could exploit this to mint tokens beyond the intended TOKEN_LIMIT or corrupt balances.", + "code": "function mint(address holder, uint value) public {\n require(msg.sender == ico);\n require(value > 0);\n require(totalSupply + value <= TOKEN_LIMIT);\n balances[holder] += value;\n totalSupply += value;\n Transfer(0x0, holder, value);\n}", + "label": "Integer Overflow", + "file_name": "2018-11335.sol", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "final_score": 7.25 + }, + { + "function_name": "approve", + "vulnerability": "ERC20 approve front-running", + "criticism": "The reasoning is correct but overstates the risk. The function inherits the standard ERC20 front-running issue, where changing a non-zero allowance requires first resetting to zero. However, this is a well-known limitation of ERC20, not a code flaw. Severity is moderate since it relies on user error (not resetting allowances). Profitability is low unless users recklessly adjust allowances for untrusted spenders.", + "correctness": 7, + "severity": 3, + "profitability": 2, + "reason": "The approve function is vulnerable to the ERC20 race condition. If a user changes the approval amount from a non-zero value to another non-zero value, a malicious spender can front-run the transaction, using the old allowance before it's reduced. This can lead to unintended allowance usage. Although increaseApproval/decreaseApproval exist, the standard approve remains risky, especially when users are unaware of the race condition.", + "code": "function approve(address _spender, uint _value) public returns (bool) {\n require(!isFrozen);\n return super.approve(_spender, _value);\n}", + "label": "Integer Overflow", + "file_name": "2018-11335.sol", + "description": "GVToken Genesis Vision (GVT) is a smart contract running on Ethereum. The mint function has an integer overflow that allows minted tokens to be arbitrarily retrieved by the contract owner.", + "final_score": 4.75 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-12025.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-12025.json new file mode 100644 index 00000000..82b39b96 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-12025.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "transferFrom", + "vulnerability": "Inverted Allowance Check & Underflow", + "criticism": "The reasoning is correct. The inverted check allows transfers when allowance is insufficient, and the underflow (due to Solidity 0.4.2) sets the allowance to a massive value. This allows attackers to drain the victim's balance after one underflow. The severity is critical (direct theft) and profitability is extremely high. The code flaw is unambiguous and exploitable.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The condition `if( allowed[from][msg.sender] >= value ) return false;` is inverted. This allows transfers when the allowance is **insufficient** (allowed < value) instead of enforcing it. Furthermore, when `allowed[from][msg.sender]` is less than `value`, the line `allowed[from][msg.sender] -= value;` underflows (due to Solidity 0.4.2's lack of overflow checks), setting the allowance to a massive value (2^256 - X). Attackers can exploit this to gain infinite approval after one underflow, enabling unlimited token transfers from the victim's account.", + "code": "function transferFrom(address from, address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[from] < value) return false; if( allowed[from][msg.sender] >= value ) return false; if(balances[to] + value < balances[to]) return false; balances[from] -= value; allowed[from][msg.sender] -= value; balances[to] += value; Transfer(from, to, value); return true; }", + "label": "Wrong Logic", + "file_name": "2018-12025.sol", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", + "final_score": 9.0 + }, + { + "function_name": "transferFrom", + "vulnerability": "Incorrect Frozen Account Check", + "criticism": "The reasoning is accurate. The check on `msg.sender` (spender) instead of `from` (token owner) allows transfers from frozen accounts via approved spenders. Severity is high if freezing is meant to block all transfers. Profitability depends on attackers having prior approval, but it violates core security assumptions.", + "correctness": 9, + "severity": 8, + "profitability": 7, + "reason": "The function checks `frozenAccount[msg.sender]` (spender's status) instead of `frozenAccount[from]` (token owner's status). A frozen account (from) can still have its tokens transferred via an approved spender (msg.sender) as long as the spender is not frozen. This violates the intended freezing logic, allowing attackers to bypass account freezes by using approved addresses.", + "code": "function transferFrom(address from, address to, uint value) returns (bool success) { if (frozenAccount[msg.sender]) return false; if(balances[from] < value) return false; if( allowed[from][msg.sender] >= value ) return false; if(balances[to] + value < balances[to]) return false; balances[from] -= value; allowed[from][msg.sender] -= value; balances[to] += value; Transfer(from, to, value); return true; }", + "label": "Wrong Logic", + "file_name": "2018-12025.sol", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", + "final_score": 8.25 + }, + { + "function_name": "approve", + "vulnerability": "Unsafe ERC20 Approve", + "criticism": "The reasoning is valid but overstates severity. The lack of a zero-reset check enables front-running, but this is a known ERC20 design flaw, not a code-specific bug. Severity is moderate (requires user error) and profitability is medium (depends on user behavior).", + "correctness": 7, + "severity": 5, + "profitability": 5, + "reason": "The `approve` function does not include a check for the front-running race condition. If a user changes their approval from a non-zero value to another non-zero value, an attacker can front-run the transaction to use the old approval before it is reset. While this is a known ERC20 design flaw, its presence here allows attackers to steal funds if users naively adjust approvals without first setting them to zero.", + "code": "function approve(address _spender, uint256 _amount) returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "label": "Wrong Logic", + "file_name": "2018-12025.sol", + "description": "The transferFrom function of a smart contract implementation for FuturXE (FXE), an Ethereum ERC20 token, allows attackers to accomplish an unauthorized transfer of digital assets because of a logic error. The developer messed up with the boolean judgment - if the input value is smaller than or equal to allowed value, the transfer session would stop execution by returning false. This makes no sense, because the transferFrom() function should require the transferring value to not exceed the allowed value in the first place. Suppose this function asks for the allowed value to be smaller than the input. Then, the attacker could easily ignore the allowance: after this condition, the `allowed[from][msg.sender] -= value;` would cause an underflow because the allowed part is smaller than the value. The attacker could transfer any amount of FuturXe tokens of any accounts to an appointed account (the `_to` address) because the allowed value is initialized to 0, and the attacker could bypass this restriction even without the victim's private key.", + "final_score": 6.0 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-13836.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-13836.json new file mode 100644 index 00000000..b458d20e --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-13836.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "multiTransfer", + "vulnerability": "Integer Overflow in Token Transfer", + "criticism": "The reasoning is correct. In Solidity <0.8.0, integer overflow is not automatically checked. The summation of `_amounts` in a loop can overflow, allowing an attacker to bypass the balance check and mint tokens. This directly violates the token's integrity, enabling theft. Severity is critical as it breaks the core token economics. Profitability is high because attackers can create tokens arbitrarily and drain value.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The `multiTransfer` function calculates `totalAmount` by summing all `_amounts` without overflow checks. Using Solidity 0.4.18 (which lacks automatic overflow protection), an attacker can craft `_amounts` values that overflow `totalAmount`, bypassing the `balances[msg.sender] >= totalAmount` check. For example, if the sum overflows to a small value, the attacker's balance is reduced minimally, but recipients receive large amounts, effectively stealing tokens from the contract.", + "code": "function multiTransfer(address[] _addresses, uint[] _amounts) public returns (bool success) { require(_addresses.length <= 100 && _addresses.length == _amounts.length); uint totalAmount; for (uint a = 0; a < _amounts.length; a++) { totalAmount += _amounts[a]; } require(totalAmount > 0 && balances[msg.sender] >= totalAmount); balances[msg.sender] -= totalAmount; for (uint b = 0; b < _addresses.length; b++) { if (_amounts[b] > 0) { balances[_addresses[b]] += _amounts[b]; Transfer(msg.sender, _addresses[b], _amounts[b]); } } return true; }", + "label": "Integer Overflow", + "file_name": "2018-13836.sol", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "final_score": 9.0 + }, + { + "function_name": "approve", + "vulnerability": "Front-Runnable Approval", + "criticism": "The reasoning is valid. The absence of a zero-reset in `approve` allows front-running when reducing allowances. However, this is a known ERC-20 design limitation, not a code flaw. Severity is moderate as it depends on user behavior (e.g., reducing allowances). Profitability is context-dependent but possible if allowances are large. The vulnerability is real but inherent to the standard pattern.", + "correctness": 8, + "severity": 6, + "profitability": 7, + "reason": "The `approve` function allows a user to set a new allowance without first resetting it to zero. An attacker can front-run a user's approval reduction (e.g., from 5 to 3) by observing the transaction in the mempool and executing a `transferFrom` with the old allowance (5) before it is reduced. This enables double-spending of the originally approved amount, violating the user's intended authorization limits.", + "code": "function approve(address _spender, uint256 _amount) public returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "label": "Integer Overflow", + "file_name": "2018-13836.sol", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "final_score": 7.25 + }, + { + "function_name": "fallback function", + "vulnerability": "Trapped ETH with No Handling", + "criticism": "The reasoning is accurate. The `payable` fallback function does not handle incoming ETH, leading to permanent loss. Severity is high for users but low for the contract itself. Profitability is zero for attackers, but user funds are irrecoverable. The flaw is a design oversight, making it critical for user experience but not directly exploitable for profit.", + "correctness": 9, + "severity": 7, + "profitability": 0, + "reason": "The fallback function is `payable` but does not process incoming ETH. Users may mistakenly send ETH (e.g., assuming it's required for the airdrop), which becomes permanently locked in the contract. While the airdrop itself does not require ETH, the contract's design misleads users into sending funds that are never used or returned, resulting in accidental financial loss.", + "code": "function() public payable { require(airDropStatus && balances[owner] >= airDropAmount && !participants[msg.sender] && tx.gasprice >= airDropGasPrice); balances[owner] -= airDropAmount; balances[msg.sender] += airDropAmount; Transfer(owner, msg.sender, airDropAmount); participants[msg.sender] = true; }", + "label": "Integer Overflow", + "file_name": "2018-13836.sol", + "description": "An integer overflow vulnerability exists in the function multiTransfer of Rocket Coin (XRC), an Ethereum token smart contract. An attacker could use it to set any user's balance.", + "final_score": 6.25 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-15552.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-15552.json new file mode 100644 index 00000000..28888325 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-15552.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "withdraw", + "vulnerability": "Owner can steal funds mid-lottery", + "criticism": "The reasoning is accurate. The withdraw() function allows the owner to drain the contract balance and reset state variables at any time, even mid-lottery. This is a critical centralization risk. Correctness is 9 because the code explicitly enables this. Severity is 9 because it directly enables fund theft. Profitability is 9 for the owner (though not an external attacker), but since the vulnerability centers on owner abuse, the exploit potential is maximal.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The withdraw() function allows the owner to reset the lottery state (numtickets, totalBounty) and transfer the entire contract balance to themselves at any time, including during an active round. This enables the owner to steal all accumulated ticket funds from participants before the lottery completes. Participants who already bought tickets would lose their ETH without any reward distribution.", + "code": "function withdraw() public { require(worldOwner == msg.sender); lottoIndex += 1; numtickets = 0; totalBounty = 0; worldOwner.transfer(this.balance); }", + "label": "Bad Randomness", + "file_name": "2018-15552.sol", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", + "final_score": 9.0 + }, + { + "function_name": "AddTicket", + "vulnerability": "Predictable last-ticket winner selection", + "criticism": "The reasoning is valid. The winner is deterministically the last ticket purchaser, enabling MEV bots to front-run the final transaction. Correctness is 9 (code enforces this logic). Severity is 7 (violates fairness but doesn\u2019t directly drain funds). Profitability is 8 for attackers with MEV capabilities, as they can guarantee wins. However, this is more a design flaw than a traditional vulnerability; it assumes malicious actors can manipulate transaction ordering, which is inherent to Ethereum\u2019s mechanics.", + "correctness": 9, + "severity": 7, + "profitability": 8, + "reason": "The winner is deterministically set to the last address that submits a ticket when maxTickets is reached. Attackers can monitor the blockchain for pending transactions and front-run the final ticket purchase to guarantee they become the winner. This violates fair lottery mechanics and allows centralized exploitation by bots/MEV searchers.", + "code": "function AddTicket() public payable { require(msg.value == ticketPrice); require(numtickets < maxTickets); lastTicketTime = now; numtickets += 1; totalBounty += ticketPrice; bool success = numtickets == maxTickets; NewTicket(msg.sender, success); if(success) { PayWinner(msg.sender); } }", + "label": "Bad Randomness", + "file_name": "2018-15552.sol", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", + "final_score": 8.25 + }, + { + "function_name": "PayWinner", + "vulnerability": "DoS via failed winner transfer", + "criticism": "The analysis is correct. Using transfer() without handling failures can permanently brick the contract. If the winner is a non-payable contract, the transfer reverts, leaving numtickets == maxTickets and blocking AddTicket() indefinitely. Correctness is 9 (code uses unsafe transfer). Severity is 8 (permanent DoS), but profitability is 2: attackers can disrupt the contract but gain little unless they sabotage for ideological reasons. The vulnerability is severe for system availability but offers limited direct profit.", + "correctness": 9, + "severity": 8, + "profitability": 2, + "reason": "PayWinner uses transfer() to send funds to the winner. If the winner is a contract without a payable fallback function, the transfer will fail, reverting the entire transaction. This leaves the contract state (numtickets == maxTickets) unchanged, permanently blocking the AddTicket function (due to its numtickets < maxTickets check). Attackers can exploit this by purchasing the last ticket with a non-payable address to intentionally brick the contract.", + "code": "function PayWinner( address winner ) private { require(numtickets == maxTickets); uint ownerTax = 6 * totalBounty / 100; uint winnerPrice = totalBounty - ownerTax; LottoComplete(msg.sender, lottoIndex, winnerPrice); lottoIndex += 1; numtickets = 0; totalBounty = 0; if(_direction == 0 && maxTickets < 20) maxTickets += 1; if(_direction == 1 && maxTickets > 10) maxTickets -= 1; if(_direction == 0 && maxTickets == 20) _direction = 1; if(_direction == 1 && maxTickets == 10) _direction = 0; worldOwner.transfer(ownerTax); winner.transfer(winnerPrice); }", + "label": "Bad Randomness", + "file_name": "2018-15552.sol", + "description": "The \"PayWinner\" function of a simplelottery smart contract implementation for The Ethereum Lottery, an Ethereum gambling game, generates a random value with publicly readable variable \"maxTickets\" (which is private, yet predictable and readable by the eth.getStorageAt function). Therefore, it allows attackers to always win and get rewards.", + "final_score": 7.0 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-17877.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-17877.json new file mode 100644 index 00000000..1a06423d --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-17877.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "luckyBuy", + "vulnerability": "Insecure Pseudo-Randomness", + "criticism": "The reasoning is correct. The function relies entirely on predictable/miner-manipulable variables (block.timestamp, block.difficulty, etc.) to generate randomness. This allows miners or attackers to precompute favorable seeds and game the system. The severity is high as it directly undermines the fairness of the 'lucky' mechanism. Profitability is also high since attackers could systematically exploit this to win prizes. However, the impact depends on the value of the prize pool, which is not specified here.", + "correctness": 9, + "severity": 8, + "profitability": 8, + "reason": "The 'luckyBuy' function uses block.timestamp, block.difficulty, block.coinbase, and other predictable on-chain data to generate randomness. Miners can manipulate these values to influence the outcome, allowing attackers to increase their chances of winning the Luckybuy prize. This makes the randomness exploitable and not truly random.", + "code": "function luckyBuy() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < luckybuyTracker_) return(true); else return(false); }", + "label": "Bad Randomness", + "file_name": "2018-17877.sol", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", + "final_score": 8.5 + }, + { + "function_name": "buyHeart", + "vulnerability": "Contract Call Bypass", + "criticism": "The reasoning is correct. The extcodesize check is ineffective during contract construction (constructor phase), allowing malicious contracts to bypass the 'humans only' restriction. Severity is high (7) if the contract relies on human exclusivity for anti-botting or fairness. Profitability is high (8) if automated contract interactions provide unfair advantages (e.g., sniping limited resources). The vulnerability is well-known but remains critical in contexts requiring human participation.", + "correctness": 9, + "severity": 7, + "profitability": 8, + "reason": "The 'buyHeart' function checks if the sender is a contract by checking extcodesize. However, during contract construction (constructor), extcodesize returns 0, allowing malicious contracts to bypass this check. Attackers can exploit this to automate purchases or manipulate the game logic, violating the 'humans only' requirement.", + "code": "function buyHeart(address referred) public payable { ... address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, \"sorry humans only\"); ... }", + "label": "Bad Randomness", + "file_name": "2018-17877.sol", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", + "final_score": 8.25 + }, + { + "function_name": "win", + "vulnerability": "DoS via Failed Transfer", + "criticism": "The reasoning is accurate. The use of transfer() without handling revert scenarios creates a critical DoS risk. If RoundLastGreedyMan[Round] is a contract with a non-payable fallback (e.g., gas-intensive or intentionally malicious), the transfer fails, blocking Round++ and freezing contract progression. Severity is extreme (9) since the entire protocol halts. Profitability is moderate (5) only if attackers can intentionally become RoundLastGreedyMan and trigger this to block competitors, but this requires specific preconditions.", + "correctness": 9, + "severity": 9, + "profitability": 5, + "reason": "The 'win' function uses transfer() to send ETH to RoundLastGreedyMan without handling potential failures. If the winner is a contract with a fallback function that reverts (e.g., due to gas limits or intentional sabotage), the transfer will fail, causing the entire transaction to revert. This prevents the round from incrementing, halting the contract indefinitely.", + "code": "function win() public { require(now > RoundTime[Round] && RoundTime[Round] != 0); RoundLastGreedyMan[Round].transfer(RoundETH[Round]); emit winnerEvent(RoundLastGreedyMan[Round], RoundETH[Round], Round); Round++; }", + "label": "Bad Randomness", + "file_name": "2018-17877.sol", + "description": "A lottery smart contract implementation for Greedy 599, an Ethereum gambling game, generates a random value that is predictable via an external contract call. The developer used the extcodesize() function to prevent a malicious contract from being called, but the attacker can bypass it by writing the core code in the constructor of their exploit code. Therefore, it allows attackers to always win and get rewards.", + "final_score": 8.0 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-17882.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-17882.json new file mode 100644 index 00000000..55950c84 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-17882.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "batchTransfer", + "vulnerability": "Integer overflow in multiplication", + "criticism": "The reasoning is accurate. The lack of a safeMul check allows an attacker to force an overflow, deduct negligible tokens from their balance, and credit recipients with large amounts. This directly enables token inflation, making severity and profitability extremely high. The use of safeSub does not mitigate the unchecked multiplication.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The multiplication '_to.length * _value' in batchTransfer is vulnerable to integer overflow. An attacker can craft a large '_to.length' and '_value' such that the product overflows to a small value (e.g., 0). This allows them to bypass balance checks, deduct little/no tokens from their balance, while still crediting all recipients with '_value' tokens. This effectively mints tokens out of thin air.", + "code": "function batchTransfer(address[] _to, uint _value) public {\n balances[msg.sender] = safeSub(\n balances[msg.sender],\n _to.length * _value\n );\n for (uint i = 0; i < _to.length; i++) {\n balances[_to[i]] = safeAdd(balances[_to[i]], _value);\n Transfer(msg.sender, _to[i], _value);\n }\n}", + "label": "Integer Overflow", + "file_name": "2018-17882.sol", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", + "final_score": 9.0 + }, + { + "function_name": "transferFrom", + "vulnerability": "Unauthorized transfers to 'fights' address", + "criticism": "The reasoning correctly identifies that transfers to the 'fights' address bypass allowance checks. However, the severity depends on whether 'fights' is attacker-controlled. If 'fights' is immutable or non-malicious, the impact is limited to forced token burns or disruptions. If 'fights' can be set by the attacker (e.g., via compromised owner), severity increases. Profitability is moderate only if the attacker can extract value from 'fights'.", + "correctness": 9, + "severity": 7, + "profitability": 5, + "reason": "The transferFrom function does not check or deduct the allowance when transferring to the 'fights' address. This allows any user to transfer tokens from any account to the 'fights' address without requiring approval. An attacker can exploit this by setting 'fights' to a controlled address (if owner is compromised) or leveraging existing 'fights' access to drain funds from arbitrary accounts.", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {\n balances[_to] = safeAdd(balances[_to], _value);\n balances[_from] = safeSub(balances[_from], _value);\n if (_to != fights) {\n allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);\n }\n Transfer(_from, _to, _value);\n return true;\n}", + "label": "Integer Overflow", + "file_name": "2018-17882.sol", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", + "final_score": 7.5 + }, + { + "function_name": "transferFrom", + "vulnerability": "Incorrect allowance handling order", + "criticism": "The code does update balances before allowances, but safeSub ensures allowance underflow reverts the transaction, preventing direct exploitation. While violating checks-effects-interactions, there are no external calls to enable reentrancy. The reasoning overstates the risk; this is a code-style issue, not an active vulnerability. Severity and profitability are negligible.", + "correctness": 3, + "severity": 1, + "profitability": 0, + "reason": "The transferFrom function updates balances before modifying allowances. While safe for non-fights addresses (due to revert on underflow), this violates the checks-effects-interactions pattern. If external calls were present, this could enable reentrancy. Though not directly exploitable here, it reflects poor security practices and increases risk if contract logic evolves.", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {\n balances[_to] = safeAdd(balances[_to], _value);\n balances[_from] = safeSub(balances[_from], _value);\n if (_to != fights) {\n allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);\n }\n Transfer(_from, _to], _value);\n return true;\n}", + "label": "Integer Overflow", + "file_name": "2018-17882.sol", + "description": "An Integer overflow vulnerability exists in the batchTransfer function of a smart contract implementation for CryptoBotsBattle (CBTB), an Ethereum token. This vulnerability could be used by an attacker to create an arbitrary amount of tokens for any user.", + "final_score": 1.75 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-18425.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-18425.json new file mode 100644 index 00000000..98034b12 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-18425.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "approve", + "vulnerability": "Non-standard ERC20 allowance freeze", + "criticism": "The reasoning is correct. The function enforces a non-standard ERC20 behavior by blocking non-zero allowance updates, requiring users to reset to zero first. This creates a front-running risk during allowance adjustments. However, the severity is moderate because it primarily affects compatibility with standard contracts rather than enabling direct theft. Profitability for attackers is low, as exploitation requires specific user actions (allowance changes) and only allows stealing up to the original allowance amount.", + "correctness": 9, + "severity": 6, + "profitability": 3, + "reason": "The approve function prevents updating an existing non-zero allowance to another non-zero value. This violates ERC20 standards and forces users to reset their allowance to zero first, creating a race condition vulnerable to front-running attacks. Contracts/DEXs expecting standard behavior will fail when users try to adjust allowances, breaking compatibility and potentially locking funds.", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) { if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; }", + "label": "Token Devalue", + "file_name": "2018-18425.sol", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", + "final_score": 6.75 + }, + { + "function_name": "withdraw", + "vulnerability": "Owner ETH drain", + "criticism": "The reasoning is accurate. The function allows immediate full ETH extraction by the owner with no safeguards. This is a critical centralization risk and direct scam vector. Severity is extreme (9) as it enables total fund loss. However, profitability scores 0 under the assumption that scoring reflects external attacker profit potential - this is strictly owner abuse. From a system impact perspective, this is a 9/9 vulnerability, but following prior example conventions for privileged roles, external attackers cannot exploit it.", + "correctness": 9, + "severity": 9, + "profitability": 0, + "reason": "The withdraw function allows the owner to drain all ETH from the contract at any time. Users sending ETH during token distribution have no guarantee their funds will be used as intended. This creates a direct financial scam vector where the owner can collect ETH and disappear without distributing proper token value.", + "code": "function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); }", + "label": "Token Devalue", + "file_name": "2018-18425.sol", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", + "final_score": 6.75 + }, + { + "function_name": "doAirdrop", + "vulnerability": "Supply cap bypass", + "criticism": "The analysis is fully correct. The pre-addition check allows minting beyond totalSupply when totalDistributed is near the cap. This completely breaks the token's supply guarantee, enabling hyperinflation. Severity is catastrophic (9) as it undermines the token's fundamental economics. Profitability scores 0 for external attackers (assuming internal/owner-only access), but the owner could theoretically profit by minting unlimited tokens. Following example conventions for owner privileges, we score profitability 0 despite massive owner abuse potential.", + "correctness": 9, + "severity": 9, + "profitability": 0, + "reason": "The doAirdrop function only checks if totalDistributed < totalSupply BEFORE adding new tokens. If totalDistributed is 1 unit less than totalSupply, the owner can airdrop any amount (e.g., 1B tokens), causing totalDistributed to exceed totalSupply. This breaks the token's supply cap, enabling infinite inflation and total devaluation of the token.", + "code": "function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); }", + "label": "Token Devalue", + "file_name": "2018-18425.sol", + "description": "The doAirdrop function of a smart contract implementation for Primeo (PEO), an Ethereum token, does not check the numerical relationship between the amount of the air drop and the token's total supply, which lets the owner of the contract issue an arbitrary amount of currency. (Increasing the total supply by using 'doAirdrop' ignores the hard cap written in the contract and devalues the token.)", + "final_score": 6.75 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-19830.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-19830.json new file mode 100644 index 00000000..25972352 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2018-19830.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "approve", + "vulnerability": "Unsafe Allowance Update", + "criticism": "The reasoning is correct. By enforcing a zero-reset before updating allowances, the function introduces a race condition. Attackers can front-run the reset transaction to exploit the old allowance. This is a well-documented ERC20 flaw with high severity and profitability, as malicious spenders can drain funds during the approval window.", + "correctness": 9, + "severity": 8, + "profitability": 8, + "reason": "The approve function throws when updating a non-zero allowance to another non-zero value. This forces users to reset allowance to zero first, creating a race condition where a spender can use the old allowance before it is updated. Attackers can front-run the second approval transaction to drain funds using the outdated allowance.", + "code": "function approve(address _spender, uint _value) unFrozenAccount { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); }", + "label": "Access Control", + "file_name": "2018-19830.sol", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", + "final_score": 8.5 + }, + { + "function_name": "transfer", + "vulnerability": "Missing ERC20 Return Value", + "criticism": "The reasoning is accurate: the function lacks a boolean return value, violating ERC20 standards. This breaks interoperability with ERC20-reliant systems, causing transactions to fail. However, the severity is high for contract usability but low for direct exploitation. Attackers cannot profit from this flaw, but it critically impacts the token's functionality.", + "correctness": 9, + "severity": 8, + "profitability": 2, + "reason": "The transfer function does not return a boolean as required by the ERC20 standard. Contracts/Wallets expecting ERC20 compliance will treat the missing return value as a failure, causing transactions to revert. This breaks interoperability with exchanges, DeFi protocols, and other ERC20-reliant systems.", + "code": "function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) unFrozenAccount onlyTransferable { if (frozenAccount[_to]) { InvalidAccount(_to, \"The receiver account is frozen\"); } else { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); } }", + "label": "Access Control", + "file_name": "2018-19830.sol", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", + "final_score": 7.0 + }, + { + "function_name": "UBSexToken", + "vulnerability": "Insecure Initialization via Public Function", + "criticism": "The reasoning assumes the function is public due to a mismatched constructor name. However, if the contract is named 'UBSexToken', this is a valid constructor (pre-Solidity 0.4.22) and cannot be called post-deployment. The vulnerability only exists if the contract name differs, which is not confirmed here. Thus, the analysis is contextually flawed. If correct (contract name mismatch), severity would be catastrophic, but the assumption is unverified.", + "correctness": 2, + "severity": 0, + "profitability": 0, + "reason": "The function UBSexToken() is not a constructor (mismatched contract name) and is publicly callable. Attackers can invoke it post-deployment to reset the owner, totalSupply, and balances, effectively hijacking the contract. This allows an attacker to mint the entire token supply to themselves and gain ownership, leading to total control over the contract.", + "code": "function UBSexToken() { owner = msg.sender; totalSupply = 1.9 * 10 ** 26; balances[owner] = totalSupply; }", + "label": "Access Control", + "file_name": "2018-19830.sol", + "description": "The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity.", + "final_score": 1.0 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15078.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15078.json new file mode 100644 index 00000000..1730b00d --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15078.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "onlyPayloadSize", + "vulnerability": "Gas exhaustion via assert()", + "criticism": "The analysis is accurate. Using assert() instead of require() creates gas-draining potential, as failed assertions consume all transaction gas. This could be weaponized in short-address attacks or malformed payloads. Severity is high due to the irreversible gas loss, but profitability requires attackers to trick users into initiating the transactions (e.g., via phishing). While dangerous, real-world exploitation requires social engineering, making direct profitability moderate. The correctness score is high as the code flaw is unambiguous.", + "correctness": 9, + "severity": 8, + "profitability": 6, + "reason": "The onlyPayloadSize modifier uses assert() to validate transaction payload size. Unlike require(), assert() consumes all gas on failure. Attackers can craft malformed transactions (e.g., short-address attacks) to trigger this assertion, forcing victims to waste all gas. This enables gas-draining attacks and disrupts user transactions, directly benefiting attackers by increasing operational costs.", + "code": "modifier onlyPayloadSize(uint size) {\n assert(msg.data.length >= size + 4);\n _;\n}", + "label": "Typo Constructor", + "file_name": "2019-15078.sol", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", + "final_score": 8.0 + }, + { + "function_name": "approve", + "vulnerability": "Non-standard ERC20 approve", + "criticism": "The reasoning correctly identifies the ERC20 standard violation. By returning false when attempting to update a non-zero allowance, the function deviates from the ERC20 specification, which allows adjusting allowances from any value. This creates compatibility issues with contracts expecting standard behavior, enabling front-running attacks to lock approvals. However, the severity is reduced because modern UIs often handle allowance resets, and profitability depends on attacker ability to exploit front-running, which is situational. The direct financial impact is limited unless combined with other attack vectors.", + "correctness": 8, + "severity": 6, + "profitability": 4, + "reason": "The approve function returns false if attempting to update a non-zero allowance to another non-zero value, violating ERC20 standards. This prevents users from adjusting existing allowances without first resetting them to zero. Attackers can exploit this by front-running approval changes, causing transactions to fail or funds to be locked. Contracts expecting standard ERC20 behavior will misinterpret the false return value, leading to operational failures.", + "code": "function approve(address _spender, uint256 _value) public returns (bool success) {\n if (_value != 0 && allowed[msg.sender][_spender] != 0) {\n return false;\n }\n allowed[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n}", + "label": "Typo Constructor", + "file_name": "2019-15078.sol", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", + "final_score": 6.5 + }, + { + "function_name": "getTokens", + "vulnerability": "ETH trapping with owner withdrawal", + "criticism": "The reasoning is partially correct. While the function accepts ETH without processing it, the vulnerability assumes the existence of a withdraw() function (not shown). If withdrawal logic exists, trapped ETH could be stolen by the owner. Severity depends on the contract's ETH balance size and user awareness. Profitability requires active social engineering to trick users into sending ETH. The code flaw itself (payable without value handling) is severe, but exploitation requires external factors, lowering immediate risk.", + "correctness": 7, + "severity": 7, + "profitability": 5, + "reason": "The getTokens function is payable but does not process or validate msg.value. Users can accidentally send ETH, which remains trapped in the contract. The owner can withdraw these funds via withdraw(), creating a risk of financial loss for users. Attackers can also social-engineer victims into sending ETH, effectively stealing funds through the owner's withdrawal capability.", + "code": "function getTokens() payable canDistr onlyWhitelist public {\n if (value > totalRemaining) {\n value = totalRemaining;\n }\n require(value <= totalRemaining);\n address investor = msg.sender;\n uint256 toGive = value;\n distr(investor, toGive);\n if (toGive > 0) {\n blacklist[investor] = true;\n }\n if (totalDistributed >= totalSupply) {\n distributionFinished = true;\n }\n value = value.div(100000).mul(99999);\n}", + "label": "Typo Constructor", + "file_name": "2019-15078.sol", + "description": "An issue was discovered in a smart contract implementation for AIRDROPX BORN through 2019-05-29, an Ethereum token. The name of the constructor has a typo (wrong case: XBornID versus XBORNID) that allows an attacker to change the owner of the contract and obtain cryptocurrency for free.", + "final_score": 6.5 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15079.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15079.json new file mode 100644 index 00000000..6636d6c9 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15079.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "EAI_TokenERC20", + "vulnerability": "Reinitialization Attack", + "criticism": "The reasoning is correct. The constructor name mismatch (EAI_TokenERC20 vs. contract EAI_TokenERC) makes it a public function. In Solidity versions <0.4.22, this allows anyone to reinitialize the contract, resetting critical state variables (totalSupply, name, symbol) and granting the attacker all tokens. This is a critical vulnerability: correctness is maximized because the exploit is unambiguous, severity is extreme (total contract hijack), and profitability is maximal (attacker gains full token control).", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The constructor is incorrectly named (EAI_TokenERC20 vs. contract name EAI_TokenERC), making it a public function callable by anyone. Attackers can reinitialize the contract, resetting totalSupply, name, symbol, and assigning themselves the entire token supply. This allows them to mint unlimited tokens, overwrite the contract's state, and effectively hijack control.", + "code": "function EAI_TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; }", + "label": "Typo Constructor", + "file_name": "2019-15079.sol", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", + "final_score": 9.0 + }, + { + "function_name": "_transfer", + "vulnerability": "Arithmetic Over/Underflow Risk", + "criticism": "The reasoning is partially flawed. While Solidity 0.4.16 lacks native overflow checks, the manual require(balanceOf[_to] + _value >= balanceOf[_to]) effectively prevents overflow by reverting if addition exceeds uint256. The asserted risk of previousBalances overflow is negligible (sum of two balances exceeding 2^256 is practically impossible). The actual vulnerability is minor: correctness is low because manual checks are sufficient, severity is minimal (no realistic exploit path), and profitability is nonexistent.", + "correctness": 2, + "severity": 1, + "profitability": 0, + "reason": "While manual overflow checks exist, the contract uses Solidity 0.4.16, which lacks native overflow protection. If edge cases bypass the require(balanceOf[_to] + _value >= balanceOf[_to]) check (e.g., via unexpected overflow wrapping), token balances could be corrupted. The assert may fail to detect overflow in previousBalances if the initial sum exceeds uint256 max, leading to inconsistent states.", + "code": "function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); }", + "label": "Typo Constructor", + "file_name": "2019-15079.sol", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", + "final_score": 1.25 + }, + { + "function_name": "transferFrom", + "vulnerability": "Front-Running Allowance Race", + "criticism": "The reasoning is incorrect. In Solidity, state changes (allowance decrement) are atomic with the entire transaction. If _transfer reverts (e.g., due to insufficient balance), the allowance reduction is rolled back. There is no scenario where allowance is permanently reduced without a successful transfer. The alleged front-running exploit is invalid. Correctness is 0, as the vulnerability does not exist; severity and profitability are irrelevant.", + "correctness": 0, + "severity": 0, + "profitability": 0, + "reason": "The transferFrom function decrements the allowance before performing the transfer. If the transfer fails (e.g., due to a later revert in _transfer), the allowance is permanently reduced. Attackers could exploit this by front-running transactions to cause intentional failures, effectively locking users' allowances and disrupting expected behavior.", + "code": "function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; }", + "label": "Typo Constructor", + "file_name": "2019-15079.sol", + "description": "A typo exists in the constructor of a smart contract implementation for EAI through 2019-06-05, an Ethereum token. This vulnerability could be used by an attacker to acquire EAI tokens for free.", + "final_score": 0.0 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15080.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15080.json new file mode 100644 index 00000000..1396411a --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2019-15080.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "owned", + "vulnerability": "Publicly callable ownership takeover", + "criticism": "The reasoning is correct. The function 'owned()' is not a constructor (due to Solidity <0.4.22 naming rules) and remains publicly callable post-deployment, allowing anyone to reset ownership. This is a critical vulnerability as it grants full contract control. Severity is extreme (9) since ownership takeover enables all privileged functions. Profitability is high (9) for attackers exploiting this. However, correctness depends on deployment context; if the contract's actual constructor already initialized ownership, this function's existence is a catastrophic oversight.", + "correctness": 9, + "severity": 9, + "profitability": 9, + "reason": "The function 'owned()' is public and lacks access control, allowing any caller to set themselves as the owner. This is due to the incorrect naming of the constructor (should be 'Owned()' in Solidity <0.4.22). Since the MorphToken constructor sets the owner, this function should not exist, but it remains callable post-deployment, enabling anyone to reset ownership.", + "code": "function owned() public { owner = msg.sender; }", + "label": "Typo Constructor", + "file_name": "2019-15080.sol", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", + "final_score": 9.0 + }, + { + "function_name": "transferOwnership", + "vulnerability": "Unchecked zero-address ownership transfer", + "criticism": "The reasoning is correct. The lack of a zero-address check allows accidental or malicious ownership loss, permanently locking privileged functions. Severity is high (8) because it irreversibly disrupts governance, but profitability is lower (3) since it primarily enables denial-of-service rather than direct profit. Correctness is 9 as the code clearly omits the check.", + "correctness": 9, + "severity": 8, + "profitability": 3, + "reason": "The function does not validate if '_newOwner' is a non-zero address. If the owner accidentally transfers ownership to address(0), the contract becomes permanently ownerless, locking all onlyOwner functions (e.g., mintTokens, blacklistAccount) and disrupting protocol governance.", + "code": "function transferOwnership(address _newOwner) onlyOwner public { owner = _newOwner; }", + "label": "Typo Constructor", + "file_name": "2019-15080.sol", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", + "final_score": 7.25 + }, + { + "function_name": "approve", + "vulnerability": "Front-runnable allowance approval", + "criticism": "The reasoning is partially correct. The approve function lacks the standard mitigation (e.g., requiring allowance reset to zero first), making it vulnerable to front-running. However, this is a well-known design flaw in ERC-20, not a code-level bug. Severity is moderate (6) as it depends on user behavior. Profitability is high (7) if attackers exploit users adjusting allowances. Correctness is 8 since the code does not implement safeguards.", + "correctness": 8, + "severity": 6, + "profitability": 7, + "reason": "The approve() function does not implement checks for changing allowances (e.g., requiring allowance to be zero first). Attackers can front-run a user's approval change transaction to drain funds using the old allowance before it's updated, leading to double-spending of allowances.", + "code": "function approve(address _spender, uint256 _amount) public returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; }", + "label": "Typo Constructor", + "file_name": "2019-15080.sol", + "description": "An issue was discovered in a smart contract implementation for MORPH Token through 2019-06-05, an Ethereum token. A typo in the constructor of the Owned contract (which is inherited by MORPH Token) allows attackers to acquire contract ownership. A new owner can subsequently obtain MORPH Tokens for free and can perform a DoS attack.", + "final_score": 7.25 + } +] \ No newline at end of file diff --git a/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2021-3004.json b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2021-3004.json new file mode 100644 index 00000000..7451ef92 --- /dev/null +++ b/src/logs/auditor_deepseek-r1_0.7_top3_1/critic_deepseek-r1_0.0_1_few/ranker_default/CVE-2021-3004.json @@ -0,0 +1,44 @@ +[ + { + "function_name": "_deposit", + "vulnerability": "Oracle Price Manipulation", + "criticism": "The reasoning is correct. The _deposit function relies solely on the LINK oracle to calculate collateral value, ignoring the AMM pool's actual price. If the oracle is manipulated (e.g., stale data or centralized control), attackers can deposit undervalued assets and mint overvalued yCREDIT tokens. The severity is critical (9) as this directly compromises the protocol's solvency. Profitability is high (9) because attackers can drain funds by redeeming inflated yCREDIT. However, the code does interact with the AMM pool via _addLiquidity, which uses the pool's reserves to compute liquidity. This partially mitigates the impact, but the collateralCredit is still based on the manipulated oracle value, making the exploit viable.", + "correctness": 8, + "severity": 9, + "profitability": 9, + "reason": "The _deposit function calculates the deposited collateral value using a single oracle (LINK.getPriceUSD) without cross-verifying with the actual AMM pool price. If the oracle is manipulated or provides incorrect prices (e.g., due to stale data or centralized control), attackers can deposit undervalued assets to mint inflated yCREDIT tokens. This allows them to steal protocol funds by redeeming overvalued yCREDIT for legitimate collateral. This is a critical vulnerability as it directly affects the protocol's solvency.", + "code": "function _deposit(IERC20 token, uint amount) internal {\n uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals();\n require(_value > 0, \"!value\");\n (address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value);\n token.safeTransferFrom(msg.sender, _pair, amountA);\n _mint(_pair, _value);\n uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this));\n collateral[msg.sender][address(token)] += _liquidity;\n collateralCredit[msg.sender][address(token)] += _value;\n uint _fee = _value * FEE / BASE;\n _mint(msg.sender, _value - _fee);\n _mint(address(this), _fee);\n notifyFeeAmount(_fee);\n emit Deposit(msg.sender, address(token), _value, amount, _value);\n}", + "label": "Wrong Logic", + "file_name": "2021-3004.sol", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", + "final_score": 8.5 + }, + { + "function_name": "_addLiquidity", + "vulnerability": "Unrestricted Market Creation", + "criticism": "The function auto-adds any new Sushiswap pair to the _markets list, enabling attackers to create pairs with malicious tokens (e.g., fake collateral). Combined with oracle manipulation, this allows minting yCREDIT against worthless assets. The severity is high (8) as it undermines collateral integrity. Profitability is high (8) if exploited with oracle flaws. However, the vulnerability\u2019s impact depends on other factors (e.g., oracle trustworthiness), which slightly reduces its standalone severity. The system\u2019s lack of allowlist/denylist for collateral tokens is a critical oversight.", + "correctness": 8, + "severity": 8, + "profitability": 8, + "reason": "The _addLiquidity function automatically adds any token to the _markets list when a new Sushiswap pair is created. Attackers can exploit this by creating pairs with malicious tokens (e.g., tokens with manipulated supply or fake collateral). Combined with oracle manipulation, this allows attackers to deposit worthless tokens as collateral, mint yCREDIT, and drain the protocol. The system should restrict which tokens can be used as collateral instead of auto-adding all pairs.", + "code": "function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired ) internal virtual returns (address pair, uint amountA, uint amountB) {\n pair = FACTORY.getPair(tokenA, tokenB);\n if (pair == address(0)) {\n pair = FACTORY.createPair(tokenA, tokenB);\n pairs[pair] = true;\n _markets.push(tokenA);\n } else if (!pairs[pair]) {\n pairs[pair] = true;\n _markets.push(tokenA);\n }\n (uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB);\n if (reserveA == 0 && reserveB == 0) {\n (amountA, amountB) = (amountADesired, amountBDesired);\n } else {\n uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB);\n if (amountBOptimal <= amountBDesired) {\n (amountA, amountB) = (amountADesired, amountBOptimal);\n } else {\n uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA);\n assert(amountAOptimal <= amountADesired);\n (amountA, amountB) = (amountAOptimal, amountBDesired);\n }\n }\n}", + "label": "Wrong Logic", + "file_name": "2021-3004.sol", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", + "final_score": 8.0 + }, + { + "function_name": "_transferTokens", + "vulnerability": "Fee Handling Flaws", + "criticism": "The reasoning contains inaccuracies. First, the fee is calculated as a percentage of the transferred amount, so underflow is impossible unless FEE exceeds 100% (unlikely). Second, the rewardRate manipulation via notifyFeeAmount is speculative since the function\u2019s implementation is not shown. While small fees could distort rewards, the severity is low (2) without evidence of exploitable logic. Profitability is negligible (1) as no direct theft vector is demonstrated. The primary issue is design ambiguity, not a clear vulnerability.", + "correctness": 3, + "severity": 2, + "profitability": 1, + "reason": "The fee mechanism applies a transfer tax when tokens are sent from a pair (e.g., during a buy). However, the fee is deducted from the recipient's (buyer's) balance after the initial transfer, which could lead to underflow if the fee rounds to zero or exceeds the received amount. Additionally, notifyFeeAmount recalculates rewardRate without proper validation, allowing attackers to manipulate reward distribution by making small transfers to trigger fee updates, potentially disrupting reward calculations or causing integer overflows/underflows.", + "code": "function _transferTokens(address src, address dst, uint amount) internal {\n balances[src] -= amount;\n balances[dst] += amount;\n emit Transfer(src, dst, amount);\n if (pairs[src]) {\n uint _fee = amount * FEE / BASE;\n _transferTokens(dst, address(this), _fee);\n notifyFeeAmount(_fee);\n }\n}", + "label": "Wrong Logic", + "file_name": "2021-3004.sol", + "description": "The _deposit function in the smart contract implementation for Stable Yield Credit (yCREDIT), an Ethereum token, has certain incorrect calculations. An attacker can obtain more yCREDIT tokens than they should.", + "final_score": 2.25 + } +] \ No newline at end of file From c08291be273cb8f439bf6bf0c9b023e1c94705d4 Mon Sep 17 00:00:00 2001 From: melvn <104540526@student.swin.edu.au> Date: Mon, 24 Mar 2025 17:46:44 +1100 Subject: [PATCH 6/6] final working implementation of both UI and CLI for reasoner and LLM models. --- README.md | 25 +++++++++++++------- src/UI.py | 4 ++-- src/UI_demo.py | 4 ++-- src/model.py | 42 ++++++++++++++++++++++++++------- src/run_auditor.py | 2 +- src/run_auditor_user_defined.py | 2 +- src/run_critic.py | 2 +- src/run_critic_user_defined.py | 2 +- 8 files changed, 57 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index a80a0d51..158dc093 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,16 @@ - - -# GPTLens with Deepseek Reasoner +# GPTLens with OpenAI GPT and Deepseek Reasoner This is a fork of the original [GPTLens repository](https://arxiv.org/pdf/2310.01152.pdf), which was presented in the paper "Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives" at the IEEE Trust, Privacy and Security (TPS) conference 2023. -This fork modifies the original authors' work to include the use of Deepseek Reasoner for both the auditor and critic stages, improving the accuracy and precision of vulnerability detection in smart contracts. +This fork modifies the original authors' work to include support for both OpenAI GPT models (GPT-3.5-Turbo, GPT-4, GPT-4-Turbo) and Deepseek Reasoner models for both the auditor and critic stages, improving the accuracy and precision of vulnerability detection in smart contracts. ## Getting Started ### Prerequisites 1. Python 3.8+ environment -2. Deepseek API key +2. OpenAI API key (for GPT models) +3. Deepseek API key (for Deepseek models) ### Installation @@ -28,16 +27,18 @@ source gptlens_env/bin/activate # On Windows: gptlens_env\Scripts\activate pip install -r requirements.txt ``` -### Setting Up Your API Key +### Setting Up Your API Keys -Set your Deepseek API key in the environment: +Set your API keys in the environment: ```bash # On Linux/macOS -export DEEPSEEK_API_KEY="your-api-key-here" +export OPENAI_API_KEY="your-openai-api-key-here" +export DEEPSEEK_API_KEY="your-deepseek-api-key-here" # On Windows -set DEEPSEEK_API_KEY=your-api-key-here +set OPENAI_API_KEY=your-openai-api-key-here +set DEEPSEEK_API_KEY=your-deepseek-api-key-here ``` ## Running the Vulnerability Detection Pipeline @@ -48,6 +49,12 @@ The vulnerability detection process consists of three stages: 2. **Critic**: Evaluates the vulnerabilities identified by the auditor 3. **Ranker**: Combines auditor and critic outputs to produce final vulnerability scores +### Model Options + +You can choose from the following models: +- OpenAI models: `gpt-3.5-turbo`, `gpt-4`, `gpt-4-turbo-preview` +- Deepseek models: `deepseek-r1`, `deepseek-reasoner` + ### Step 1: Run the Auditor ```bash diff --git a/src/UI.py b/src/UI.py index abe3adb9..d20e6c09 100644 --- a/src/UI.py +++ b/src/UI.py @@ -96,7 +96,7 @@ def end_ranking(): model = st.radio( "Set the GPT model 👉", key="model", - options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], + options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview", "deepseek-r1", "deepseek-reasoner"], index=2 ) @@ -193,7 +193,7 @@ def end_ranking(): model_c = st.radio( "Set the GPT model 👉", key="model_c", - options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], + options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview", "deepseek-r1", "deepseek-reasoner"], index=2 ) diff --git a/src/UI_demo.py b/src/UI_demo.py index b83446f9..473e4a35 100644 --- a/src/UI_demo.py +++ b/src/UI_demo.py @@ -221,7 +221,7 @@ def end_ranking(): model = st.radio( "Set the GPT model 👉", key="model", - options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], + options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview", "deepseek-r1", "deepseek-reasoner"], index=2 ) @@ -293,7 +293,7 @@ def end_ranking(): model_c = st.radio( "Set the GPT model 👉", key="model_c", - options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview"], + options=["gpt-3.5-turbo", "gpt-4", "gpt-4-turbo-preview", "deepseek-r1", "deepseek-reasoner"], index=2 ) diff --git a/src/model.py b/src/model.py index 9ce22325..ef45c24d 100644 --- a/src/model.py +++ b/src/model.py @@ -3,12 +3,16 @@ from openai import OpenAI DEEPSEEK_API_KEY = os.environ.get('DEEPSEEK_API_KEY') +OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY') completion_tokens = 0 prompt_tokens = 0 # Initialize Deepseek client deepseek_client = OpenAI(api_key=DEEPSEEK_API_KEY, base_url="https://api.deepseek.com") +# Initialize OpenAI client +openai_client = OpenAI(api_key=OPENAI_API_KEY) + def gpt(prompt, model, temperature=0.7, max_tokens=4000, n=1, stop=None) -> list: messages = [{"role": "user", "content": prompt}] return chatgpt(messages, model=model, temperature=temperature, max_tokens=max_tokens, n=n, stop=stop) @@ -17,15 +21,21 @@ def chatgpt(messages, model, temperature=0.0, max_tokens=4000, n=1, stop=None) - global completion_tokens, prompt_tokens outputs = [] - #mapping model name if its r1 - if model == "deepseek-r1": - model = "deepseek-reasoner" + # Check which client to use based on model name + # OpenAI models start with "gpt-", while Deepseek models don't + if model.startswith("gpt-"): + client = openai_client + else: + client = deepseek_client + #mapping model name if its r1 + if model == "deepseek-r1": + model = "deepseek-reasoner" while n > 0: batch_size = min(n, 20) n -= batch_size - res = deepseek_client.chat.completions.create( + res = client.chat.completions.create( model=model, messages=messages, max_tokens=max_tokens, @@ -41,10 +51,24 @@ def chatgpt(messages, model, temperature=0.0, max_tokens=4000, n=1, stop=None) - def gpt_usage(backend="deepseek-r1"): global completion_tokens, prompt_tokens - # Deepseek Reasoner pricing (standard rate), not off peak discount rates. - # Input: $0.55 per 1M tokens - # Output: $2.19 per 1M tokens - input_cost = prompt_tokens / 1000000 * 0.55 - output_cost = completion_tokens / 1000000 * 2.19 + + # If the backend is an OpenAI model + if backend.startswith("gpt-"): + # OpenAI pricing varies per model + if "gpt-4" in backend: + # GPT-4 pricing (approximate) + input_cost = prompt_tokens / 1000000 * 10.0 # $10 per 1M tokens (approximate) + output_cost = completion_tokens / 1000000 * 30.0 # $30 per 1M tokens (approximate) + else: + # GPT-3.5 pricing (approximate) + input_cost = prompt_tokens / 1000000 * 0.5 # $0.5 per 1M tokens (approximate) + output_cost = completion_tokens / 1000000 * 1.5 # $1.5 per 1M tokens (approximate) + else: + # Deepseek Reasoner pricing (standard rate), not off peak discount rates. + # Input: $0.55 per 1M tokens + # Output: $2.19 per 1M tokens + input_cost = prompt_tokens / 1000000 * 0.55 + output_cost = completion_tokens / 1000000 * 2.19 + cost = input_cost + output_cost return {"completion_tokens": completion_tokens, "prompt_tokens": prompt_tokens, "cost": cost} \ No newline at end of file diff --git a/src/run_auditor.py b/src/run_auditor.py index 8f789ec6..283479b6 100644 --- a/src/run_auditor.py +++ b/src/run_auditor.py @@ -93,7 +93,7 @@ def run(args): def parse_args(): args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1', 'deepseek-reasoner'], default='gpt-4-turbo-preview') args.add_argument('--temperature', type=float, default=0.7) args.add_argument('--dataset', type=str, default="CVE") args.add_argument('--data_dir', type=str, default="data_full/CVE_clean") diff --git a/src/run_auditor_user_defined.py b/src/run_auditor_user_defined.py index c5860c73..8a5432c0 100644 --- a/src/run_auditor_user_defined.py +++ b/src/run_auditor_user_defined.py @@ -92,7 +92,7 @@ def run(args): def parse_args(): args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='deepseek-r1') + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1', 'deepseek-reasoner'], default='deepseek-r1') args.add_argument('--temperature', type=float, default=0.7) args.add_argument('--data_dir', type=str, default="data_full/CVE_clean") args.add_argument('--topk', type=int, default=5) # the topk per each auditor diff --git a/src/run_critic.py b/src/run_critic.py index b2721040..738419b4 100644 --- a/src/run_critic.py +++ b/src/run_critic.py @@ -81,7 +81,7 @@ def run(args): def parse_args(): args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1', 'deepseek-reasoner'], default='gpt-4-turbo-preview') args.add_argument('--temperature', type=float, default=0) args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory diff --git a/src/run_critic_user_defined.py b/src/run_critic_user_defined.py index 40f463ce..fe96ee61 100644 --- a/src/run_critic_user_defined.py +++ b/src/run_critic_user_defined.py @@ -82,7 +82,7 @@ def run(args): def parse_args(): args = argparse.ArgumentParser() - args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1'], default='gpt-4-turbo-preview') + args.add_argument('--backend', type=str, choices=['gpt-3.5-turbo','gpt-4', 'gpt-4-turbo-preview', 'deepseek-r1', 'deepseek-reasoner'], default='gpt-4-turbo-preview') args.add_argument('--temperature', type=float, default=0) args.add_argument('--dataset', type=str, choices=['CVE'], default="CVE") args.add_argument('--auditor_dir', type=str, default="auditor_gpt-4_0.7_top3_1") #The auditor output directory

      PN- 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

    q3l<*Kj}_-#$kN{;?y@FxuuG^{pvVM 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 KpCr literal 0 HcmV?d00001 diff --git a/src/Gradio_UI_Files/images/author.png b/src/Gradio_UI_Files/images/author.png new file mode 100644 index 0000000000000000000000000000000000000000..85011a7a9f27a0d7b39fb05f298aa4eb6285dca9 GIT binary patch literal 28397 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 literal 0 HcmV?d00001 diff --git a/src/Gradio_UI_Files/images/critic_prompt.png b/src/Gradio_UI_Files/images/critic_prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..80ce5c16e621a0389152adbc8645de9fab54b66e GIT binary patch literal 113250 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

    n zWfvIu)ZeT{ofpgIiVqARJxbn|?E%k^e6U9*chhPs4B+(MW;x5Nk}!V76U4oiAggC?8pY91Bi zV)48TGR23Nh%0z3GlUx}*pkW{=6wQQW>dM>T>w8e`2?@!L>wA9jAZOa;Dy8tEcfdQ z%Ond1Iw{LQYiX&}4YQ_O8ao_vFV_99X2v?9Knvqd&qwxiHM6x#uuir&l{-xD$Q?NG z8CCQhsinMDb>m_MV#OL?pGSb&QFtw+`6q*>H*8;)>Ew~8!K9&VpudPeR_--4zoi_d zzw6Kd{p6&NjFd?jB0*B8Yw}iy2_0MI73`m+B#)&^jcQ%-yGu&t;O^WztgB=A8WmaQ zK0pL`m3N_*#SNb`CT9>7;t3z_=Y~EUew@1j!2KIzMYAsel{5h)e%|cYOW}`e+s&q! zbcVZMq&sxb&X-FuQ^u3vxg7eV(S)6J*SifEbkm-a;lVQn7ROE?OtIL8hU!R=d*VhP zFPqm}pFgD!8!hJ9+oz3LZN=cB|D51$cl*`gNtvr(_FSB(z7njXyTsC*tWcKNoKGOm zUf&Zvosj(HkASvS$W6HyeAE2{-r=2Rwc}a4Lv{#-L^vUw-_@v&8@YciMsa(Y53da& zOXRZ6;gq*|Oy?}zq)ggF%*?8KOrF$_n+J>d&RQCQNZ7H;M@L}i9sfrh_L8hVN^qOF!cqN9s+j;Ic*MItig z-Z24wr#=kpm!FH{m@LR{S8V_fM0GLsG+8mD$Do{pXo6-a(59n_pHJe?H1yWGo}PkY z*!TB(@HqAIGdGuOG0qCXQV)xN{`~Roo7>t}7)6ht`aV~FBmve>jF4UBsl_lJ{O6^AnFwL(FyBHdjXW^jx)ONsXVf z26@2{g71Z1_?JV-bWJdsNGGJ0)pE|;IFlB)pfo#Fv!`j3Ig8$6$T;V{P3`Ca2fm+6RVry$eH+XGWHMZrI@wD*C4@_ zoCmBz;V-0AwdaF2)m5)>gM2vm2n*>av8gC$dH7KjkF+t@AnR z)51sdOS;^$CRa%%iQ5WtE!bV;T%*&fk5{}Fl~(9pspdg$m}cd8>bVrbETnkzE|U0T zH{31d2TQpc%LMH$#l6Xt95QHDQmf--TN`IO8OjX|_^+wryAn_DKKwZp>$)&Rj#8{( zFbMHKp^WpVY|pm{*BrC~{(|CI1UmlrorALSR-x8;mv!o*FTi!NnNHY8VNt^w4J(zz z=FBgw1tc-)yWQm1f^c+2y$kP_q3peT~rfAvWm8mpGVE$%P?eTwZ?#ola(+!}VG>O<963@Z{&`%UE8kdagIw zoWUmZtU%-2%_i0RV-3gpdcM}%?|!_`qOd1YE`_oG5*(Mtn=z#L1Tf8WU^K55fDaep zV)i$W{W;KbE{_Lqq<^~TtmfQBhyRp@Bn6_NGF4p}aBm3E3lE+L@Mg;4!QO|JG`z^0 zn-FeQ5cHQfTn@{UBIMb?t^S zd!8wf@m6}zhqN+{|E(k-Dz(P`h|@MC#AQ~S>_cwErWTEg&v`{gY-gHDFTl;f4+?^I z=UR0Hat$Q0jFJf1(QPz=BFR0HicxoAwJ`q<0XBQ_f=~xrH?J#eR(PTJPaY=Sd^RxR zB_cs1n%i^Bf<7dJbJnI6JRrx=t7A{y^m}vTlf9bHwA-8B9qFVSA-pC+zmNhfj$P0% z7*dXG8C=6{P*h6tYJ>9}7#Z-^N^BSPTbOk&pjT@>fUe{}ejsvue7baJnsz?`TaeRXA3aL3Jt3)Ck*}@-lCOn zl@k0qgRnu|Ra2?aKv|_tNe&PU^S@$g97Lt<@{Kr$hXtH8P;ol!T}wylgo<43~HLeH3;^=0T6I`1OXQfurd}2@zm|Gq)U-->77puc4 zV@=W>Eogjc`J)=2hE_(uUHw)P?Y;&qJM&?O>aa_&?=skq_je*MA^~3uZeuV_0LjV) z&*%ca`^ikcw;VA3IXhy5I-PH}yV;&rw(S8jUKQ;zmJJyg8BN!QTB9Q)_rwh9*sFT- zD;LVw8Z|`O4@blYhd^N~NPRVvsvLQTZ$b0j_*|~!)Pm)tz`YRzbiAHsMk~{q(?61B z#nK@q2v`iEVj6zDA?mG$f>BcgbvRNM_WdWU*Ep`TDF?s&oZZ zbVLV#Hy1S)jX|>}1}HIV2H#F*$u=j$H@B3H|CV=5{2hHST?Ksj^**3Nrd>6`qJ70l z^TwK-kmGRM$4@JPt?EaBNa)WWF*vifOR2M~DYmx3H7tnVU0#dYe#bn z+N|Rut@=0baI=yXPUOkGUIWv7PL`ONzrdDjP*$TBZv{T)&Y7x-d7bS_ZSP=G-l}Pd zQ{afcia~lP!afpVmo!z!ZXtDx>qh7CS#U(V#qn!|QlaF0>R7ON&oQ!ktIT#lN$&Rb zSP?=D88?nmYM^wa;gZQQbGAn}R-X)VXtV zV)DtZUmdnKGTAC>54pKa)q`zr*SeF%tm$n(W|#?U7L=Yk9PveGb!<$Z(E0^QZi&TX z2Uguyt+0)7%bo8VB zi5nj>n~AUurI^&JG)v&%V1_vz&=dXFd0SeCw#Q~PR2m{87Y!x4XZQr67d0}# ze;#?<$BDTHm&FFvzJTw~_LFefELx&un^GpmA1?yUJZDrW(SV1um@rooQg~253;em^ zOy1A%^y;fTE(WZVy9aX6f;wvtSYFZT>}2xK`4T@)yDnsObgC15HWn78S8nP4#M9$6 z?(d!YygcEaX-ff)GOl>C>Os%_Auh(QMV*;s%5=FV%Zf~NTwbhsRI%vJ%O?Ug(ToXB zP6PYUB2`O{OsiWS%GP#Up90Ui5&Q`M8e-2lCmVIrQT zg0lEqtr*<8x;jhOyou9=GPLe@RV$8v&SKQ@k_s{`I!xLVj|1>TVN)-W`bS8Nlcps1 z_u1`kR*X35H2)pCq42X2G+=MFCg-j$dONeuA9h=O+KM%bU_3X-X%6iZvqY}}{>p|g zJH7Y$V$HPYjjL_97G#~7nVGU@y`11Kr2dpun7kGLtd@%@IMB$>K7=jWk70rl7QNvT zBb;1gG3hGrCrsJyp`9$6pOyPm2O9gN}VPo3vr=^=IG#(ANM^DkiL1dVbxPhy(Er z0*kLr$)w#jA;;+f+zJwKLqkJt`70(a)1hHHFXu1OScBavD%rV2GXqR0DxNW2;!g== zfnk+NOxZ*x?3*tnt1bM00UV`4MZM%H&&Dyh1XgcK<+>yheS>frA+WR6d3kx=K(3ap zeNx28h?H*wLkhH7o{F^KhHIz$D`tTx%JMm3(~M=zPLSBu*7$_sQD#RH^b0Zo=osC0 z?|sqY&?s5U#D;%}Ad5<b<3(B?&2e`N}Y;*6jM< z`RVHlhUamSY6app`H6Jg#zbUdYFCKxXCAQ*FSEs+u`_HK9Gag3YsVXK$_R%g)&mH_ zvi^=p8Xroo*O*8E5mKYL9I}8kGr768c2)+5yQEoiE#%9Xd%cIzR+_rDXXzlX-4_2> zQmG)z=1$z<-6E7X*BWFo!Z%80l>iaZMhM31dGmErgM2Xspew|`KfmU0r}L^Kcg_6g z&=EZ~b}E5j#x5;C?6HV~t;h>}nAg~@Ke6X-LE;B?-UJ>)N=lnE2m}BOY`e>+;sBA9 zw*m&?-0$-U>!$m%+}^Z(q~nj+b@MAOq`Y?2BhVjW%yfU|uf=@v2jjXm0ZvkfAIy{> zkFC%iBq|%b9cPd2^0GoaVQccae6bH=z}&Lki@5)WPOZI<6k004gl|D_q1Vo3}w}A=ZAWlFT7%LpTEDJ1hHtkPP;3OMJ1Pu>LNWDiFk}f z9nkFU>~ZM~Quz!HQK( zyB+zVgLs$Ax>`|hfg}?UjV-T~T!f>n7t0HTqd8?VXo6EDwfcPv?jmk21H(6@1H%#o z9A>;}YEse(EH;i)sOx3QWV#o;mzdH1;g#~s5Hn}SRhN{G@5zkKz7Ptg zob($BaNF%pD$$3H$PYLeA(reer|Um!qyC63`;KO&is)B^$?Y~;eVJFOABhgWdVTtg9!cO3lfTXLFC~%P`4N_s`7SGR6kW*o7 zrhFHKFg8USiUfRd@B0m~oE4i%PepYbW)n_0oSr>q+=9RN z0AE!uPMb=~Ba9rj1_PgfTLwDOMs*i~uyt#j03_|gfnlOndlsl(hmFCMl;`^BKV8e4 z;HDh%W6U)-z)0^xE66F{Cng)Wkudbe4mf7gUZ5bLRQ|cS2(HQEGi2a+0Y{*=l6opg z`U_-SaV8Wn>+4V&P}iec^zDy8n%u53WQ)aNFAN^m8w7Q)G&s!PM+Y1ztf=O`UxNAN z`Nb%uybE&%Y=M55ic!p;;zu!;t*#DMsOEB5X9co^&~#>ew{ehe(QLHd%armO>Cy;s zf&>yO&XKvbGU4V@#(f_SVQ zO8h|8M5`|+1znH&htpfjw0`tpVGtIgufM7Jn7I+HzT+l5z$DB`Q0`%%tt5Rra z(j_D)Iz6l2G4b<%Qh0zXaT*%AsV;g1Xifgm=k`7>72?d2cUPQ!<#OBl_+~ZuFW=XZcJ_&9T@*GyRyVLzt5~^`ziOJLnB>{Dsak|uOFD0-|6(>EyoE*C^ za9(*z%=Dr<%{ly3jVX?R!hFBIZ=G#p%!I=hm&YqcSjNqVxtHX;`;*fkTMtL{cfG3! z_w)Hv_(wb=~G4g89K`l&lpxOJ7Oq)gIKikwCOuiU3V@YR&FtvI=wVpLfpZcfln)$V)|@)ue$`dO z++yl%_n|R2(62*wWKf$L)~*q33w8DY1d)y5V5?1{+&DY5{E>z`5CY{v-j`c4MQpjT zk`OmhO8|cORTLmN?AI!#;8HTxtOtf6-!Y2V*dWLvSI!0G`ZDhW&1P%0-s9Kg$i`7V5(UXNd+ z)9Yu(@+94$Z#~Oay~dxYUZg;TI6pWz8D?!pT~Cl@ru&rmv^i5m77cJww!;#8l7P`; z1Oi3mRIy0{nFN z*ke*F8~$)w0m|m*zky9x52Dcj+FeaDz}nDXhQ`^p_Wue06 zz$yHAJAnzD(DZozppJm=7Z9@j-+Ak$phrUH{JD(3zyEv%=Z(N*jG$3Q(f~RVQ8GG_ z2kn3*OT&KU21T4;IU}Ydks~AASya9Z1w{rK9+aiB%?vBi*U!DYmm9~&?1u|tKii;g zjnpZQtYAPe*oYT1DDhXQ0oP@dqVb>qN`{{@G6O^p776kC#V}PO(C24>IAiN#{ z6xF%0HC)-azjvffx&p!)?e*FHQinPMzR(o1R*!{L3J)U_>Q58G?CsTar>%rP5VDyL z6|xFr4i2J(Bi@Zlrp!O8Y3G8mQI1a_ND=6!bN03sHFv$`-rv9F@8)EChZXN3fdpYP z2Vm#uRNIuv^``6i>d&9$BiU_ZgB_@l=Q>&(I%%rT?Vx%f!2;?^dq8XwLF{89j-5{2 zyvbp@no66)+%3Xw2tLDy%MR^vNV?sa1@i56$TDs*UpVWZ^F$5~7)1sHwPx8d*^UHd zdz;Ox;gv_O=sp*x;2AqGvN`GpYW`DuPQk8==Av z4GAH_n6~*#1x7&g8;7TAR(k4sEtce~J^ik~TVu|tqpQPfbHiOD*G(WCsk}CWp`6!< z9(r0G*!nO| zXc*IWHxrH4ppbu??5@r0BO39qAwEASX+{YCXl=CUhau#|(fg1tRj}%6 z9>2>E;32&E?aq=21TYhplD!KaaCi`mqJc%VFaY~u2 z4fp5lP%TR6ldogu zET(3sddCRMPm8lcsw@r_9{tm~Cs8Gm`qVfC_=6vuXj2R z*^vVkWI~mQq~*JNEMls(=Y$j_u0~t?Q!0<>W#m2RgXQ3eN&Yt-O`z`BdpNSt;hrIl z?Wj=K0F<@jY#ts*_BY@zkEQ#z=i3+9S0{= zCoJj3(U1({Smli}?ArY|G0;6RVUUI>KAhf_KrwK}}{VWGTN-;QHj+x?Av9 z{u)`999#c!tCy?L2Wv;8cRMGn>|P!+(fxO}iqvI*8a&aKz1_~QR!;JSNDEZVzw&>k zY#13COMUik;`45&Vhqf~AnY(oxkur9*0M`8+n6FcV~jC#ZE z?%SJ%{fHex!{3y=#$7ZKJ_g`}*{(ODzM}kF8*kj)g9UBR$rjk|RMluQPiZFwlY_ev zrnE73?R@#+@i}?S+ps?Y^vNb$$l^pEjw^)dOhU^fD9R)MJApGBzPv-FXg_G!IzZ}bFWE_4%?arz}2&H85xYEMh zj9@W2g(H<7w%?)(4qpQ5%x^_fenCEOU=*{U8HPvbl}2Ap11F94M?)Kr}SEe%NMQ4 z%pky$0EmoDxWjlJ=hQFwOzie$-I((S#>Rx#7b<#YamY*;n6oK z;m$dDz3VH;a@pIbP`4I4{%>*sx+=Ev_qRl{8gu5=ddtcOX%JRUWg)r75DZ?_>Ajg^==Op#a z687yKG68p`dz5OVZG;^-7v$x0UM5DLP8=@(ddqURO^sMUeD96_N1v>ddb$-itqU%% ztJavNVyZj5d;<{G8Y;z$vu3PiOpU{1Xdis-=N*a@-HJ2u5?YxVqL;y?GJs|uyV*fP6p-!VpG zg{3O32Kpa|%r2yr_Nm?$;quY7nG=_a9vVcU3GFqQG;(R&n5$uTRMi{?!a_q8-d{Mc zCn1tN2Rb+u@5db9iF`Rq!sRW2EhWJ<+Ua#-t-k5(y@StvHPVZr1aYX@hN0!RUOaew zTPtHhHa%h>FpU;-L97p{EpN|P5`)rG?|-ccmnza#A&+;nFmsipGC)2c3CerNw<@Je z+QDn3dGwDVeq}=jtFbO_9GPw`$EPuPsVggYT8B@tcwsv0g1NY{v6?fAYaq6?E5I9z z6&9vp$9=9eth7JIh)fDye$`pu9=5_c)qO%QEKPW>Tvz3)$aq=Ri&3kCChN5bD1GVy z%Xk1J6ckt}>GXlZA(@j&elq}FqB4g2kJ}UQcv*<6{=%fnDCm&h5on~X&6aPd1;5i5 zQHnI8*8G51BeM>JMzPPDOr^ z5H6NKyZ5&eeg0S{c3bVHUND0;nVK=-@n#-&NjENEW*i+VN`&7V_LDM4C1SfB!n;@R z$TeDLT;WPdyhg{pnl4EqJu#T@Vhh+uyv&t8 zf~vKTU^EJOFJDPAB==E*`P##M$oU=faAcfgcn|U7yyOLh&3_xQg9iZx1T}fV>lI$$i7`O%914t0Ud-n z5K*n^jYMk*RnBNI$Vhgxw{lRqCAES8?Hlj~jcaJo|4 z!{*}_+B5lWhtdlxvf*}xZX(KQ88lB>g8c^;|5qk@_WLfw%y0Rv zc*`d_oGxQXQ^PvKu82Hfg(D?8&LScs;uzTl*#MpC3!MSBt0+3%i6+M2g;}B0eM@@R z7`&evUtxAV1ETt#pKrP}c)O~Fqhq8%`|N^q())j&yx8vZmiKHEO0i9G#@goMOzmbD zT0?suY8+vQDZK`Gr;*tvqmj_CC#jA;i+#nS4F0rL5^-Eu=fW%94s%q$_JT?KX8Y#J zb}+25zG<4aS)yKgwxD~Dtu;l3J7*2v^@5QlLmVLvYW9Q3gvtkvG8(hpwiB#215ZBk zL*9UAPRCO|p8!X%Vn)D0qgGNtCn}E(6fISJNLU&{5K4E0>4h4P-uPhgSn`oyV4$v^ z-wq5+`O1vh#W_kawtzAAT=O?G2RSYI(N_QoUEHj zEYJhqp|U?9HM0Ck(xE?dLQ|Icm8R33vL-OEtEZ^<#VXpi-tL(XsfM2I?*^%z9;Ljm?D}}e5ekd2|{d) zQN)UKW3xEucBmK70>8n)Q0NTHCh4IQWuhqt_acU9dedss39))uh{b}y$QQAeyeI+d zAJ*%_sHAF2reTO1X*m~35Pf*a-{SHo7F;Y?pi^e`n_bT7nd&7gwZN=`r5EcT&k)~Q zoq)MeCRtqllMDT(YiQspnTfmD1N2E76oQ5jFps{YLHYp>t}SR$BpfjUQqmogiI->H zfy?Ctlk~oOkv~xHHj&1VDQvUZdbhUdeEu?yAKB{<8n|CJvltzuN%kk5GPzB^Cvc;g zDAcR0ioHBD{-OJ>=W1?|6|@YSd;W@fP~&V^zRTDsEmv-8Kb{52klnjrvQdkSokZCj z37<>ywS7JYLD8e-RU|8-|J8Y$k7hcL{l`qH7@Mf9)l-MX^hy5T2anOy_*xT7!}N0| zh$a+D#3w&rf!~Gqz(3iHnC%_XsGW|m2>}@ZUt}ot9^h|O7ZKxeSW2wAk-JU;&mz=D?HySw%7~P;PDvqWit*~c=hsSJr zIrZsq&-hfRC_)QB#O=mzCMmxA8$S}eY*h@QNq=S-F?b&?p|0+AFdsV@OuapbpQ5SY z_7NxCk-Q)b)wSK4Q7*f-vTA-ZuqUPa6HV7unzcu*239nDI#wZr)u6ZcS1fMFpCw@F zYWQqpLLE0}-X?M~1?B?_WpsS(Y_lYquEb8gN{W@pabKVzQjKF{25BUL$S;H0-jAjG zQKt_^B(`_qPqY?mGL+Sx*JTJL#{0#V`O#5TW#Mjq}mJkx=pCHObynUByMSi^H3p z*OTjdU{7M1LLRfDkq2N#%^E@_qk5V8XvXX!AK(fs$C21^RdcVm60;QChOSyY8nIC;{(9ycJwh2OJo!*AQ{hAHDbDH<+1BFOy< z0(zG9;2;{KeQ=y}yirVuR8di*(dg*Un=pezO1{){tZC4JK^{`%bwpylzkDW(_jI=D zgu2iR`1>1>1~oLy7?R33ntp%cfFMfgM{Gwdk>{^*v!&I9%V&At*i$Np$7azwgl1OH z)}(O$1H-A*-I+$Grwit-%hM(Vhd!TjS#18pT3 zF2xA9ZfDiUOn{MufItn9#Cd;9tWPGUV9o@CL=2?hRwfP5)c_YfQILo3G=D)vz}7nn zk9<0pMXcoIXaaf1r@WOdWDk35xEN1f!g@lA2j;Ejz zakH7Nmvf8BVdfv;;S9|H`NVc+EA+0OAX!%iz3gsa0FtTL{Dc?dJ} zw;7MlF91Y5_r7oN^8J`h){z(jc#NF59G<<2Ha*{LNEpp?)g=#4fL_eg%vJ}GNiTTy z5xQbOv3W9{_umV;1_Knp!K`mDH%Dl-4x{6{S1$M5ML;!=j__cye!di>lmmOc+Uh{= zd<~QjA~l@C)p*J`_CWb|$R+?%>~L__nzUOOb-foWf*<6voqlQ6{Pgq7fkw#aG`)xm z4o5y1MRTgtcE9c~g{5T+6CYP>Q>rxT|G=yt;|p)`IB}!!ocS#AA1jI8UrH;^`MoY? z@^aQq%c!(AeR^8LY_(j25)3&fJ>Pv$P+)xdOsLq`v}Tk&o!39W>vpL!y_+phAh84W ztD&DLPy!yC#^BEo75OEv1IW2syKg!qIT%`?vo+_ck$W}`)FK7gZQH%%{ zWKY$~O|_P<$MhyYuUqc)n70r*``ybDUb28z>sFh6*8{SX}G? z0a>Wtjw!R2rI0~xaUjvT?(AZ_NMc40-1~`;`>O>oAQ8VcGtM#j_DVd_fd(2G@ZW<} z0(vi?^ZS9h`Ct9wIpiKu$S#(kO0b(N`ccA#gvR|r3?R*f5sQ$BBd03Ml?jHUtIs8_ zx1g&`{73jd2OviMZ}0(c+5bM?|JSRjQN7=wR>FC#aHe)9&Mr=-hPMAL*&A8GvHm1x zCjM`MkB^v1*v7@w$!{gLMJu%?z;D=vg>n(HFZ zvOREH(`gh=n7Ulcv83cZn6&XK04PETLlgxm1iiF~#Ar$V4Uc`!& zFrh8qOkPf3hZ&f!vF?0)`*(kT?D$V3C_PHg{fl7?wWv5>50zE+{95fq(=B843TUrL zZ;!4trnrBl>8CIn>UwB@01pj0dfR>enm%Pv*rK>D7c1~K;FO7Lhww?F{`h0H#;BCi zC*aiI1mOn<@WX?Ln1_nok(n9?@?dS!Ew|$nzdtM2EnVh<% zZE;ma)jG6osK(oL1`OzK+9rNOr^n!0J^$s$HlE&pMBRK>dZ#Nf(%O{>n5h`LJA>+O zuAVu<1rSZhVFnP9ov*8EXUl=yfD_Vf{AlRiJ)3V_H~CSUy=;~n{3)=ijx|MQbS=MY zUj^S*)EjhywIn61?iC>!Wx+@HwgtUup9P5;{3Q8T#^r=aj59a}Rrw?oqh zM%?omQ>OH%NE@;*->F=5x1TRjrXJqt*2XQDTEdHQI(yKbu4)!A)3+LPgfnaok;fw9 z`zG^Xzfvn3rQk5AMWr?w{_W8u%R|xQ>mk99{AM+)Bcr@|{REhWh+x>6Z&vHQ)dc_E3u3~+z!;C`ek)3A2*HExPKrx{2f(0BpBh3 z|1IjJ{if1R>`Up(=qnNBqSQ|A%iv3vlim%p-*VH|;~tdj?Fy4sE^;|y)^!zSU zcY1_gt$G30VO>%GvVk^7#O9sbT4nHU6=lM1ZHdgN7JBo`)8e_PLd+bIkA+Z50r&tU8_6t+vgVn^bfQ-wj{oS_p+Of6R34USjh<3AIC!Tw!MB`hC zRzte409)tb~SSGbO0_$*&3Pye^mZwMMJ^J%GB6}m`UBz z1Q^}eS(yLNNXNm+`Sa)hE!17=K51jf;eFZb;nIMLi-`%>D+!~@US40@)puyuE6LJd z+SMl~*zMe;-{@h685&PtU+y^|-FP{APEAkC^Rb>}W>Q_3?eBc6X82PA2SNrqGmU|A zZ*c&y^a=L=uMKR9a49LNCz$90Qy)%m2LmZgGhZp_e*lO7T?QLAT#C7Qx`4OZ^R=$H zr+6?<3O5QF`snC*xA%?T{8;iv^NmKU#oVgnfwA|K6;QPgm@{Xw*`A-Ayu@GT$&k4# z5Z#zf1t}qfh9eXGw0(O7N}pe@w$UBUm!#M39AaePh2yLb6bteHChn;_{S1${bidZ? z^m(0Za|R0aZg-jA49jJy|J4fpuKH4|-4-yJedee^mI$MAkCDB=%JX|uk=N@+O*8Vl za6qS~XKef4CBX&&rmeMGSF>)){f%4JJ3e2h4vj3lHp;z9 z)VD_)E!Gt)j*VG7wpz8VtsJ)N0002{m7=4)ecuEdi%8J&{&2AAB94k;?=d4W^N1Sa z=euPhSPv_ULLNV_{nv-xR!2u$8;&N!ukNR(hYK7$USLL3G!j?h|6x+UVfH_-!y@(V z=g3UM*w_OW{V5^A)zy{lVR*%b_9)8R<5h>n-M;ZiyrAz_VQZsoO}JUNuktR?q0XA4 z+8*!6Q+z}6--;GFL;AWvaOgdjXy=Hw_Dg5j%&vcAa4D(&g3fQf5r$;Et_YU%gB*g& z(KWkTs2G?WRWc_(iX{Bxc=Ys?tt8N`^Vju|;L^W8fz|@htY*^?D@|Nw&%b*oCah=k z``(f92WcXV7mukZA#s@@9q9G>UA3_M{mrSo`F7`Qic8{O07^y3MBHx|?!UluQK4~h z(Pb5>gvlipk_Sq1va?Bf#3=u2f8RY|L6df`sV0M|m4T>0S+CT@!@xVY>i^`4A#zG* z)Lka0H2U4ZV>$`PpqyX5&moys zmqZaooruWD`dwyI9goO}W^tFE#B~(l8wd^0j{RdpYwW!vHIaGV4guyG34oI=lF0_w zI&W5gEI}qJcXe$>Nq6^`dgGBT`3~b5XT#^I;s8gu55TMS(0Hn=IjO}&UX78ql9Ezg zDtqi|EEC2MuG0g&0e9)CW&;PeSw_iJ6+F5nWvA-B8w5pEqh+q@7t z&T)5n&-!aVn0@)Y5Tcz)DCFwN$qh9@2IY_aE`7Y(;3Q{GP_bqPy`aG!8=(D_*p``z zj~-A2hv4z?`T1Hp%rIMfG3(dicGKqcemo3)(tEfB=rQ`r!0Sj7*v#@f3E0;*8P3sP z@O+O+V}*izK0Dmzn;l!rtj&w5%~uGYeNvETgnpV-kcC^tgVgKsBW;!x5Ym=9Hz0h!aS`Zc0)1X^fs|V z+dH#VgpG5y?D_h%-|VEYpPQVM2R%h~&_Y_Y&pW=nK3*tsov?)6dY;L0JTZ{Bbi6+q z5&dhcbZ}+$>U=|>dw*NJu08az%1S43qx;i)?*qt+g{nI7IJ&s#pmeM`ORezz%%Hf6 z1#{TzBj^Lf%>vsB0RKR1L7II+!W)_c*4-fr4sV4^6!J#Te&=Rt*4fF)=jBE<`9@y( zH5(shC+tT2iska_KTMv^;T097wcnbomkflCClqZ{pst|UJKQ@a+Nsyw4{1GIB3;mX zIMi9Mbx*dtQ9ay?ne0wqj_+!-?mdc)VYyeQ_TQUWxId@+KC$01v(>;^?aIMe`q9d1 zyWR=u#S;y|2A_dmM+7H?)afyXMn+hAJw5$-u>X9$@%{Af?x=H=i35h5{@^3S?FnxN zjxQyWeV>$6cp%|~=4D-dt17#=d|L-ltI^Tnq8J0RL_>R;i}8+&a3Kw1!3A9i!r`c> zYDZ_)oWu94vIGUqclhZ!aJ}7B2MZHh`!yyu z7}?k!H(wvDAlM${;8u|#clAPoeH9zbwBp?ESqP`6gTX(N(cX^CKPZD~nHU*)+%$NR zYYm?g2ne{TA;;g}?eDI#+KR%L&>I>XU?_fgVd-N|e>iBbwpnx1!@kB;7^uUl!sGnO zR4ncdjmB!~DC73_gor<1`kV!Wof#=*K6>uxNDb15iZXV%xow0*{_5!0J&WsqgP~hz zYAmklx#R#r=qJjFjP=@?bXoo=>b2dO`Q{d~&3_Nn^Lqc#6fyk3HlNC!0-X)SgKnIs zL`e?G-6wmj1Zq_@wi*nAF?Pp_P(DWT>pBZ3uo`Y0A}DNqF&DuR)fN|mMa2ZFb7XFe4Ztn zp!@LY9KJfODZS?5UvgPhLJZ3X);buHbS07JgNCHaWcZnDM??e`LbXfLelQ94s}Z?D zT5ZNpyIWqylDS{5z3rg(ey9rwWc}76m&ZrPVb=TCN;V7Wm8Y?7zpjBy#N-u#Z+Y5E zB>1SQ@U{Fb&^<+QhVyr-HaW4os0X^GRE zwb}QHJ*j_}I$M&J#s=p9%^=m4#&0!x%~2!D&-aK{;GQQyc@2um`Yb`M+;nP3%-$a- z{SPl&&=0gcUj<>P95yTqUv-AmHXK1(fj8y1^o&}XXt z(RVrNp8$69TiJlOEShK-@Rogn{TiNheiBC*wE}`HOCEWoPvL7#=QM02 z-7q&lp32ZstGO?wD_$_Q-#(nl{dGQez6D-bcYOVJo9#FjM2D|?<YF`>9-EG)+UZ{(K*$mlqL2mz5^K!@jpn*zUc0Q+L7r?x9r- zRRm(vw&V8!sI4J&?sO9goWF;|COA{>`StEm=4PpYU6C=G$1UE71%^CBASivW_HMlW zp?RdqKKEn1+iyyrMgRT8WvpL!qfYeaX-pU#XSHgI^k+=89wzR7#gBdPn7f|HaPZp% zwHmFTt=WKavPP*B+XYKZt$0ftQ0VQgAi{#jo1KO{!o9}Y7S>q_NjHf0u+;^+Ac-N| zdTT@&gicr9*!qAebxO$dATZ{Mxe_D0ndVU%r&I%sV5Zg)h$Yc2hZ=R_yq!f{<&mWEV#@c#yhv-?SwtzL|m84Fd;*R65n+34Nu)2{SYYP*8E2|^pRDTbrYc}i28dqRjTFqizMj>|ZKpC1l zx1che_ZMlf=M!8DGe8UoZYkLAweiqpe3B4)&T2#bZH|8gYAZKzd;|Q~EN-owL|XXL9^|zRK=muc=7mRNh`6~}^o))H1%c@`nshR`C$!SBsyZFZ;T*=D zo#318)l?`(t4O&OQ-tW`sQvFQ*M`0PRsamoOOdyOH~%b6big;ZH>9CgB+de zGIY0^!vvtE5(9tj7nHYYO)&-e5_Oe@O1}omX7JVgNo@m1;fjQnQ!{~i4LjV&C#PdS z#H)fvE_mui=`w>V>ebs5OFP-)bzqKo3PCCshN1f?4vGTyzwMCSGa<_=>%^++&eP4z zO_I;2rN}Di#pS^x(83z{F%(-+siKA!Bs|wa7mEbS>gY74u88BnOSWAxTx^Y(q!O7m(PxV}^0!fuKT^xaxP(>}JNlw!1``4x6*soi zOv5+m>s=8MFdR4-I~<5`V68uk%pOvuKy}eI1k7UgrHfc~v$HWdPFDn;5_hk7*MQVdOMbNgt~bHu5aU<6M_BFbmOQbFanO{d_G^y z0Z|KVi%DVJF2N}ZJa5Q@^>00<7aY;iHD$FkWvg}w92OrKz;^N&EPQCF=btLtJ$m9) z$;81)(;`DV`!ZMs0mtP!4t*#^7Q&6LPtw<;eOk0_8%<>N9t`tp^dMy4CrtWM@0VQf zVA=a?*jQg(JcGIhp>vBv#$C5*i0B$Q3Vs$x-1Hf#4M zOlkbhTF{d|$zb`t^#>yixIg4=m(c;pT3jUNIOUGWmkiymWbTs=)3}u#;keTJbOt)< z-5!aYwxkkAK|gfZ1JJC(4x0Z;=RTj}+Kg32f25Isdc5lez&W-Ga$R^bCl=w3G@Fm8 z9q%?GJ&whxt2@FQDA0lX(7c_JB8}P&MzItnG+5eos}}c`(5bKPWss2X5Y9)Aj?R-GEHFT74*Muo{9X=XxR{BXtl7l#*F1HtKq z9ffi{BcES9K=3eY2*ZedaDTNtEN=(byd#aG@_20zU+|+bfCCLtnq>NfwxLI_N06Y;07Qg9OU0pjdSH<04X=vAJqt62_ zKuu@O<{g>Lf;G`tK4fbm9E7^3Ap>_^62towe3ppgx*XCR=5F^KkDP7s-oIjgK24E+ zAqnndxeTtz`Y3}WxBxCZXJc;*q+Lmg`GxVXf3tO<-Nl^5?4%16lSZgIj*P@~Y1O|T z=86Nd!FIX3_V>}#6Ebiv_r5fS5;fuVn@lrpW%~eUr7u!vav(Phm?Q?zZ67W}xmYX(kp?g#T zCPI9d(Wh(lGvi_Ype-tJJf;ENaG=4>w)+(j8dB#1E=Gd2IvvO7`y!H4lD*iwHcl-3 zJl-+`{!t|15R;+01$%2Y`Wj!SY>}6gc`O3A6doG8&!A;C8tqZw!j0C$`-we4o@o6@ zs}ub`SD!N z(wvmPOc8?!7U^WvN+BUb-`#F(@Z`&<B_XPLP^#=$ezm-t@Nv z@@I~u)x|#^K|K4QyV*{*6N}C)i%b(mpX?CHB;r^+^QAz=;e0;7azMj~PLC_Yg3HF0 zYRc_qbyWLG5!qM8fYL>M=uRUz5l^h1_{F~{kZ&F!eZfuPmTO4lXQNEQ4JrZmCD~Rh zk+8yY*!Zb_kOYms{eP$b@Mm3@krS*6j>~&AO|=K2@ZC7GrkH>4e0Pn$4TE-vZ1laE z)2w1G{+hG#K!!b9iLhNU~U z0Mqpp_|;&AW^9fYzyCl(H005E{WpvB{arIK>G8q~mB#%k!~pRkB^A;_?9G(F^9BIy znpnI;8aG?apiAm>#OaZ{;QGNu6)aoWsohv|l_ok&id5$jXgj?PJH5cEBkXE9K>Lbz zh(zS&3F5Hok*!|9tD;q zzKLr3X{hM=(SJ^ZeD2CPj1W5dLI(+3kigpnbdhR?g(kVO6O;4}!w=g`=hA@8%8S7z z)1%#?0_-A8XQm8n9}M@VYhY?=6tVM{PiFcMGkdlK_~D!F=y`n69AvXog@$|%^KoVA zcxcLL;|Ps9d%Vj5lYGU{()qn6u%!&pAOC_1>V~Dgu~uKgMAo5#SfjEIOo z`)Mz(wLug?deB)uI&qRO{$kXyllg5Hd;(9b!3LTmWvxofyPm#!4Z7aX1_1%J9KAwo zv=APDA)^+@H)r^163aIw98I!$av`X^(GdTt*($K=B!;4V<(D%aa4GMXbUZ&QDj*!i zy<)#v?G9z?*87YeunHQd6eUv_+@fAu;*br(%TDUCx0hznFM$N64^u9|msiECcU>8x zIL(v-Zqv8HVUN*7IxD79$cd7qPGc5n*&gs{As6>)!Gy99 z-9WR5KoI*ZW%|3%A5n#89X_B273D>4cx)w&k07np(oX1v#}ALNuGh^5T}8G7F98{h z0^3P>HTz^L;?2mjC>$ynA~ zdW+0EO;UWXK1W4MF^Jm*5ta z1g5vePo^!{ZmNp}609IG9+v3fq9OkNz)C`uj7VuT+E-J7j=e_U;Gpc|7;L3yvusVk z`fYdfo{}fd6g+~H_e5%pw<7?hyXAA$@$W*1{Wyt@(sJgs{k;zD6J}8eajIFHYxaNpE1$cuMzs z(@1ig82(2lX$;X-^V68*)qx8rOUBizP#05kMFS;6eyNk~damTjcZpXvXNDm^k|e)8 zcTl^76Vp2-2ko{naeCRq$2TMCWDfaI;jl@C_(p+PK{7LBC_Y4UR0G%Yw z#e8Dc`}K)pm@42;sf*!|!&S#w=8u0MYTZS<*@~2}P?T|(G#ZbKvf1pYX__$z4hMU8 z%HTj{eW7>J&fQA;T^ZL2OEZ;f&lFZBUBc$N1-*!DnM%rIZRm*u_S0feN8}^gpRIMc z7mxAtfa+|#)|ZWChldaH>nn@h3dZOHg-`?yh>+GA7s3z)qj#MSI$pwXA!`e}EtXMT z$~ce25kK)N78*Q7!ASw_c{Fvpz*Jiie+4qYPUD)|@AS9fJ%ix-0-Z6ol~=4WP&~hA zX=&*zOM^Q$0z}uVVX?6Yy!^AowtX@`32r4gtaI2PWEOL3|AIOzu(XjL&jS$;DJh1? zfbQ|*h!CoX$TL<_c({<`bk7yo{L?msDnm!R(w&aJo^Bk&jH7X3kDQ~Qy|WHd z6=b2+ecknf5&@QCzY?l}f&jIs9kHJUP1~3@YZ1hbt@J2{>$kliV>4=ZKgo;5bw>iW z8{G4Z7DP%Le!mPLjv!dBK3zpL(=!Ik>Y3Ou#Qf2P+G@?a6aI&L7tsNZj(BN*WKV*^ z`*NP!(qhWX3Gp^L`9)^GGHEG^Zc)~VhN8D;Y{Tim3QF*nLo9${B2m}EMj1Xvz>et(S66SU6*yMml~wnZzxiKv#^c0R!A{RS^;x3t{217t(cden9v=nINCbyK$R{Rn0|dTz-0jHfnPjf9QwfBL zk!ww=M)Pg@!mU}YHXWt&_-iu%^?YNNZ4I7naqtWC5qnr2GGt6yTzhoDypoSQqbP#+ zy!{DOX#lGN3ik2JZx?1909*62Gz0sP}-BAo^V=(esdSIEuRarZ3#wI zGAoS@IvO(yQ{A@-wUYzYZ}K@($%*#z1pK~4cnm0U(I5>}PtVV#kN=RH$!1U^Ewo-z z+n+MOQJeu@fVde>Qc|Hp zahf(yy*!r44Fq(>ZVOJ3n6Ze7M@N!+lR=wWj6`@p1&2i4j-{@Gkn5jX; z4T06`vq;Q^LUde`nMPI$n!KA8c*g|sI^vMF^i!#lP(-Jj_E&s7&9#+U)gQWQdM?N4 zg6xmab@n#fhmKxHDmPwku5&16kSqRGczNIhYgD9S-3f!)yGmV$G1hAXzuo=I6ndP6 zzAFDZyA1UOWHf@}C1H5E1AY zx)G3x1PglD7Z3x$TI|YbzS3r>sPO7}$MxHV4$Bo4KxAh~+yb?7s$*_MRVHuIQNSKg zkFGY4-X9N{cZR57pw?^s{fA&vP5$aN3`bSHC`cLh6k}BK4USc8^u4l;1Vdxe^ZoAT zTR625_qXQbzgs4ZjY2>zz=g_VUi`Vu=#Jvx?(Ghf zT#f&FuumbgXvO+KkOKC*OfFf$CAqg(aDn?Ou2(R0mn(IBa$X@10ZOfzfUeZT<9d{& zmmMuUU<=VZJI&4~?&^!LT_%hI--$uhF=b4@Tf>Ec+xIxeN92ebC|aqeQ=j0`l2MLp zB^culPr*Q z{XXqBEio21vb8iKHCO=eChQqk$PIU-iJ5mpJ-8jE;X@VnG~S*+c+9)mic(+F2+0F} z6-y<1Ltk%-hM`}s@0r#t!_Md-i27F%1Z?v!=$)PA*5FgqY1|1aoi(uoSGs%KSk(fJ z?+HA4e;?|2{BWGw!E28SE*i(NDu$qH5qe8+bocI1E5DLZu!y%BfVSUkO@muEc}mFC zWV76nzf&bH1HD+Ww=cWmi0i$f+6|#Fiv^OPdb&8npYQVMEs_HFyCL|XD4fw%tluaY zDUV`50|h1#VZ$!+Lc${IDm1zoSsv0S!_{>$)&lz-uV@*0jk9PkpOWPF?`{)|v@j#n zSl}6n6n~I%d$$ke>V_KA+L#5fNA()wayPjBF91eCxxS9aE{XkU)ALKuv%YCWs6hF7 z_m9~g8Cx7h&y&kLY?$0;$*A6mGtQ)55-o}ue49OX@)qddAM&c#No~vISJ^+#7muMH9=bRf0FGd{Nyc0H{ymKCb=9C&_(8W$^6rT_ zfo`rlBU)uyPiT`jZK9|Ufjup(YSp?#@{hKQkndSy-zM5*Uw|GTn-?*Z0@OKi6+GF# zjT+tP{4rz3l36pDn7LsUT{E3-7S}oL*L&2DePL?ae!{72lYpK7+nnDpCDQJXTrYQo zUT0T@P95OcI#{y3!hk&K`Xx5sW>ZpBk8#a7Ehcx4KLc{&yV|G-pJ-))_n`Gxa&V&!{i1|2iC3G%C)5=BI<#ntOoL# zL91t3wI|)~`&WJ~dg&Sy-rcKS@o>uuO)q5om9zB-x3glc<3bi2N zV?cf=Jbn}?5M&gP$>%R$A}MC@5s`opJXEohB-7Q&X-!xQxODNgC4>Qe{HVOBsOazk zE!vRej*Wz?hi3Wi4IS=oY*h6XqbkY!0jLxiT=3qWi|dmzlx4to{n2XApn}+z${&whxP=YdBqY&T{czL} zRXb=bV1mw{vuL!#sFVHbOoz7Qm%>h9M?2p!l3iQPTfq07J_%Jw-rSirnd*Dihn`)d zHK5W#0}Y*smI`&3>DLPYeHE2rpVE&X*g#3B{7bLyQgyfz`34RgWPB;ESh-TEZXvJr z+@UnTs?#+5;}HG;!+}+&jc+I%2>uJ-c8(&Li4fRWb?>n|C9(^~q3RPrTg1iMm?Fk%&DB1p#1A7?7 z^47|PfCwg_YHUZ6@8aaNt4(W*O$%U6Paf033)r6^>J4=9lC~5dYhqQXZ!zq)6yFNL zqbuF6VetjKFN;7)VkMotE#qM}YZh#L9rlckRip+oqmL})V{W>>g4@^SuP;Ok%%_=O zMqJ;a>vP)|?yzo>le?-k(#gZE>%O@hy#gA>aREB%UwTe~eFW@|L05HScR)AsFykYs zs{hbIYO^fnM@2=E!e+t|DF9T8Bo&jDyIngCNLTF9Ts#9 zwb$$P;2>3XL!~`!(UF7NK{;+jb%0Ak?G}`u5be(T*0aJj;TY^@;T576g=0>0Rfht4 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

    PN- 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

q3l<*Kj}_-#$kN{;?y@FxuuG^{pvVM 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 KpCr diff --git a/src/Gradio_UI_Files/images/author.png b/src/Gradio_UI_Files/images/author.png deleted file mode 100644 index 85011a7a9f27a0d7b39fb05f298aa4eb6285dca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28397 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 diff --git a/src/Gradio_UI_Files/images/critic_prompt.png b/src/Gradio_UI_Files/images/critic_prompt.png deleted file mode 100644 index 80ce5c16e621a0389152adbc8645de9fab54b66e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113250 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

n 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%0Ak?G}`u5be(T*0aJj;TY^@;T576g=0>0Rfht4 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